Skip to content

gh-88574: Do not swallow the line after a terminating literal in imaplib#153317

Merged
serhiy-storchaka merged 1 commit into
python:mainfrom
serhiy-storchaka:gh-88574-terminating-literal
Jul 8, 2026
Merged

gh-88574: Do not swallow the line after a terminating literal in imaplib#153317
serhiy-storchaka merged 1 commit into
python:mainfrom
serhiy-storchaka:gh-88574-terminating-literal

Conversation

@serhiy-storchaka

@serhiy-storchaka serhiy-storchaka commented Jul 8, 2026

Copy link
Copy Markdown
Member

GH-152751 made imaplib skip a spurious blank line that some servers send after a literal, but it did so unconditionally. That corrupted a response ending with a literal (such as a mailbox name returned by LIST/LSUB as a literal): the literal's legitimately empty trailer was mistaken for the spurious blank, so the following line was swallowed and the framing was lost.

Spurious blank lines are now handled in both positions a literal can occupy:

  • Inside a response (e.g. before the closing ) of a FETCH) the blank is skipped only while the response line is still open, i.e. inside an unclosed parenthesis. A literal that terminates the response is at depth 0, so its empty trailer is preserved.
  • Between responses, after a literal that ends a response, the blank arrives as an empty line before the next response and is skipped there. This covers a LIST/LSUB reply that returns a literal mailbox name in every response.

@serhiy-storchaka serhiy-storchaka deleted the gh-88574-terminating-literal branch July 8, 2026 10:08
@serhiy-storchaka serhiy-storchaka restored the gh-88574-terminating-literal branch July 8, 2026 10:11
@serhiy-storchaka serhiy-storchaka marked this pull request as ready for review July 8, 2026 10:11
@serhiy-storchaka serhiy-storchaka requested a review from a team as a code owner July 8, 2026 10:11
@serhiy-storchaka serhiy-storchaka marked this pull request as draft July 8, 2026 10:37
…n imaplib

pythonGH-152751 skipped a spurious blank line after a literal unconditionally,
corrupting a response that ends with a literal (such as a mailbox name
returned by LIST): its empty trailer was mistaken for the blank and the
following line was swallowed.

The blank is now skipped only inside an unclosed parenthesis.  After a
literal that ends the response it instead arrives before the next
response and is skipped there.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@serhiy-storchaka serhiy-storchaka force-pushed the gh-88574-terminating-literal branch from 4b356f6 to 1bc0b0d Compare July 8, 2026 11:11
@serhiy-storchaka serhiy-storchaka marked this pull request as ready for review July 8, 2026 11:14
@serhiy-storchaka serhiy-storchaka added needs backport to 3.13 bugs and security fixes needs backport to 3.14 bugs and security fixes needs backport to 3.15 pre-release feature fixes, bugs and security fixes and removed awaiting core review labels Jul 8, 2026
@serhiy-storchaka serhiy-storchaka enabled auto-merge (squash) July 8, 2026 11:22
@serhiy-storchaka serhiy-storchaka merged commit 6b81784 into python:main Jul 8, 2026
60 of 61 checks passed
@miss-islington-app

Copy link
Copy Markdown

Thanks @serhiy-storchaka for the PR 🌮🎉.. I'm working now to backport this PR to: 3.13, 3.14, 3.15.
🐍🍒⛏🤖

@serhiy-storchaka serhiy-storchaka deleted the gh-88574-terminating-literal branch July 8, 2026 11:46
@bedevere-app

bedevere-app Bot commented Jul 8, 2026

Copy link
Copy Markdown

GH-153324 is a backport of this pull request to the 3.15 branch.

@bedevere-app bedevere-app Bot removed the needs backport to 3.15 pre-release feature fixes, bugs and security fixes label Jul 8, 2026
@bedevere-app

bedevere-app Bot commented Jul 8, 2026

Copy link
Copy Markdown

GH-153325 is a backport of this pull request to the 3.14 branch.

@bedevere-app bedevere-app Bot removed the needs backport to 3.14 bugs and security fixes label Jul 8, 2026
@bedevere-app

bedevere-app Bot commented Jul 8, 2026

Copy link
Copy Markdown

GH-153326 is a backport of this pull request to the 3.13 branch.

@bedevere-app bedevere-app Bot removed the needs backport to 3.13 bugs and security fixes label Jul 8, 2026
serhiy-storchaka added a commit that referenced this pull request Jul 8, 2026
…in imaplib (GH-153317) (GH-153325)

GH-152751 skipped a spurious blank line after a literal unconditionally,
corrupting a response that ends with a literal (such as a mailbox name
returned by LIST): its empty trailer was mistaken for the blank and the
following line was swallowed.

The blank is now skipped only inside an unclosed parenthesis.  After a
literal that ends the response it instead arrives before the next
response and is skipped there.
(cherry picked from commit 6b81784)

Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
serhiy-storchaka added a commit that referenced this pull request Jul 8, 2026
…in imaplib (GH-153317) (GH-153324)

GH-152751 skipped a spurious blank line after a literal unconditionally,
corrupting a response that ends with a literal (such as a mailbox name
returned by LIST): its empty trailer was mistaken for the blank and the
following line was swallowed.

The blank is now skipped only inside an unclosed parenthesis.  After a
literal that ends the response it instead arrives before the next
response and is skipped there.
(cherry picked from commit 6b81784)

Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant