gh-40038: Quote imaplib command arguments when necessary#152703
Conversation
Documentation build overview
22 files changed ·
|
455004a to
23165c3
Compare
|
Tests has been merged separately, so now we only see new tests, which would fail on the old code. |
Argument quoting was inadvertently disabled when imaplib was ported to Python 3 (bpo-1210 commented out the ``_checkquote()`` call, bpo-9638 then removed it), so since Python 3.0 commands failed for arguments containing protocol-sensitive characters, such as a space in a mailbox name. Quoting is restored and reimplemented per the RFC 3501 grammar, so that arguments that need quoting are escaped and quoted, while flags, sequence sets and list wildcards are left intact. For backward compatibility, an argument already enclosed in double quotes is left unchanged, so code that quotes arguments itself keeps working. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
23165c3 to
d74a402
Compare
Non-ASCII mailbox names are only allowed in a quoted string or a literal, never in an atom (RFC 6855). "ALL", "FULL" and "FAST" are macros, not data item names; they cannot be enclosed in parentheses. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
# Conflicts: # Lib/test/test_imaplib.py
|
Thanks @serhiy-storchaka for the PR 🌮🎉.. I'm working now to backport this PR to: 3.13, 3.14, 3.15. |
|
Sorry, @serhiy-storchaka, I could not cleanly backport this to |
|
Sorry, @serhiy-storchaka, I could not cleanly backport this to |
|
Sorry, @serhiy-storchaka, I could not cleanly backport this to |
|
GH-153066 is a backport of this pull request to the 3.15 branch. |
…52703) (GH-153066) Argument quoting was inadvertently disabled when imaplib was ported to Python 3 (bpo-1210 commented out the ``_checkquote()`` call, bpo-9638 then removed it), so since Python 3.0 commands failed for arguments containing protocol-sensitive characters, such as a space in a mailbox name. Quoting is restored and reimplemented per the RFC 3501 grammar, so that arguments that need quoting are escaped and quoted, while flags, sequence sets and list wildcards are left intact. For backward compatibility, an argument already enclosed in double quotes is left unchanged, so code that quotes arguments itself keeps working. (cherry picked from commit 600e864) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
GH-153069 is a backport of this pull request to the 3.14 branch. |
|
GH-153071 is a backport of this pull request to the 3.13 branch. |
…52703) (GH-153069) Argument quoting was inadvertently disabled when imaplib was ported to Python 3 (bpo-1210 commented out the ``_checkquote()`` call, bpo-9638 then removed it), so since Python 3.0 commands failed for arguments containing protocol-sensitive characters, such as a space in a mailbox name. Quoting is restored and reimplemented per the RFC 3501 grammar, so that arguments that need quoting are escaped and quoted, while flags, sequence sets and list wildcards are left intact. For backward compatibility, an argument already enclosed in double quotes is left unchanged, so code that quotes arguments itself keeps working. (cherry picked from commit 600e864) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…52703) (GH-153071) Argument quoting was inadvertently disabled when imaplib was ported to Python 3 (bpo-1210 commented out the ``_checkquote()`` call, bpo-9638 then removed it), so since Python 3.0 commands failed for arguments containing protocol-sensitive characters, such as a space in a mailbox name. Quoting is restored and reimplemented per the RFC 3501 grammar, so that arguments that need quoting are escaped and quoted, while flags, sequence sets and list wildcards are left intact. For backward compatibility, an argument already enclosed in double quotes is left unchanged, so code that quotes arguments itself keeps working. (cherry picked from commit 600e864) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Argument quoting in
imaplibwas inadvertently disabled when the modulewas ported to Python 3 (bpo-1210, bpo-9638), so since Python 3.0 commands
silently fail for arguments containing protocol-sensitive characters,
such as a mailbox name with a space.
Quoting is restored and reimplemented per the :rfc:
3501grammar:arguments that need quoting are escaped and quoted, while flags, sequence
sets and list wildcards are left intact. For backward compatibility, an
argument already enclosed in double quotes is left unchanged, so code that
quotes arguments itself keeps working.
This supersedes #6395 and also resolves #92835, #58148, #90378 and
#148770.
I had almost finished this work about 1.5 years ago, but stopped,
exhausted, after writing roughly 30% of the tests — there are a lot of
them, they are wordy, and they require strict focus. I was finally able
to complete them now with the help of AI.