FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

gh-102988: Detect email address parsing errors and return empty tuple to indicate the parsing error (old API) by tdwyer · Pull Request #105127 · python/cpython · GitHub

/ cpython Public

gh-102988: Detect email address parsing errors and return empty tuple to indicate the parsing error (old API) - #105127

Merged
gpshead merged 9 commits into
python:mainfrom
tdwyer:fix_issues102988
Jul 10, 2023
Merged

gh-102988: Detect email address parsing errors and return empty tuple to indicate the parsing error (old API)#105127
gpshead merged 9 commits into
python:mainfrom
tdwyer:fix_issues102988

Conversation

tdwyer commented May 31, 2023
edited by bedevere-bot
Loading

Copy link
Copy Markdown
Contributor

This PR is designed to detect parsing errors and return an empty tuple to indicate the parsing error. Additionally, this PR updates the test_email.py to check for these bugs, as well as, adds some other wacky Address Headers that are in the examples of RFC 2822 and makes sure they are being parsed correctly.

I realize that this PR dose not actually track down the bug and fix it. It simply detects the error has happened and returns a parsing error. However, Lib/email/utils.py is a much simpler file than Lib/email/_parseaddr.py, so it is much easier to review this change. Additionally, there are actually multiple bugs which are causing erroneous output. Tracing the code flow for each and fixing them would be prone to error considering all of the wacky stuff that RFC 2822 allows for in Address headers. Finally, this change is actually rather simple.

Copy link
Copy Markdown

Most changes to Python require a NEWS entry.

Please add it using the blurb_it web app or the blurb command-line tool.

tdwyer commented May 31, 2023

Copy link
Copy Markdown
Contributor Author

I had to create a new PR to replace the last one because Git got all messed up.

This is the old PR: #102990

tdwyer changed the title gh-102988: Detect email address parsing errors and return empty tupleto indicate the parsing error (old API) gh-102988: Detect email address parsing errors and return empty tuple to indicate the parsing error (old API) May 31, 2023

Copy link
Copy Markdown

Most changes to Python require a NEWS entry.

Please add it using the blurb_it web app or the blurb command-line tool.

This comment was marked as duplicate.

Comment thread Lib/email/utils.py Outdated
Comment thread Lib/email/utils.py Outdated
Comment thread Lib/test/test_email/test_email.py Outdated

This comment was marked as duplicate.

tdwyer commented Jun 7, 2023

Copy link
Copy Markdown
Contributor Author

Hum... it looks like CVE-2019-16056 was only fixed for parseaddr() and not getaddresses(). This PR happens to fix that too.
https://www.cve.org/CVERecord?id=CVE-2019-16056

getaddresses()

a = ['a@b.com<z@x.com>']
getaddresses(a)
[('', 'a@b.com'), ('', 'z@x.com')]

parseaddr()

a = ['a@b.com<z@x.com>']
parseaddr(a)
('', 'a@b.com<z@x.com>')

tdwyer commented Jun 7, 2023

Copy link
Copy Markdown
Contributor Author

Should I add that NEWS entry that the Bot is asking for?

Copy link
Copy Markdown
Contributor

Should I add that NEWS entry that the Bot is asking for?

I think it is needed, NEWS entry is required for most code modifications 😄. Please see: https://devguide.python.org/core-developers/committing/#updating-news-and-what-s-new-in-python

tdwyer commented Jun 14, 2023

Copy link
Copy Markdown
Contributor Author

I added NEWS entry, and all Unit tests have passed.

tdwyer requested review from CharlieZhao95 and gpshead June 17, 2023 19:05

This comment was marked as resolved.

This comment was marked as resolved.

This comment was marked as resolved.

This comment was marked as spam.

gpshead added the type-security A security issue label Jul 10, 2023
gpshead enabled auto-merge (squash) July 10, 2023 22:49

gpshead commented Jul 10, 2023

Copy link
Copy Markdown
Member

Docs updated, auto-merge set. The backports beyond 3.12 will require manual work to get version numbered things right. I'd like to let this bake in 3.12beta4 & 3.12rc1 for a while first to see if any practical issues arise before landing the backports in older releases.

it is a security issue so we could backport it all the way to 3.8, but lets see how things go first. it is not high severity.

gpshead merged commit 18dfbd0 into python:main Jul 10, 2023

Copy link
Copy Markdown
Contributor

Thanks @tdwyer for the PR, and @gpshead for merging it 🌮🎉.. I'm working now to backport this PR to: 3.10, 3.11, 3.12.
🐍🍒⛏🤖

Copy link
Copy Markdown
Contributor

Sorry, @tdwyer and @gpshead, I could not cleanly backport this to 3.11 due to a conflict.
Please backport using cherry_picker on command line.
cherry_picker 18dfbd035775c15533d13a98e56b1d2bf5c65f00 3.11

miss-islington pushed a commit to miss-islington/cpython that referenced this pull request Jul 10, 2023
… tuple to indicate the parsing error (old API) (pythonGH-105127)

Detect email address parsing errors and return empty tuple to indicate the parsing error (old API). This fixes or at least ameliorates CVE-2023-27043.

---------

(cherry picked from commit 18dfbd0)

Co-authored-by: Thomas Dwyer <github@tomd.tel>
Co-authored-by: Gregory P. Smith <greg@krypto.org>

Copy link
Copy Markdown
Contributor

Sorry @tdwyer and @gpshead, I had trouble checking out the 3.10 backport branch.
Please retry by removing and re-adding the "needs backport to 3.10" label.
Alternatively, you can backport using cherry_picker on the command line.
cherry_picker 18dfbd035775c15533d13a98e56b1d2bf5c65f00 3.10

Copy link
Copy Markdown

GH-106612 is a backport of this pull request to the 3.12 branch.

bedevere-bot removed the needs backport to 3.12 only security fixes label Jul 10, 2023
gpshead added a commit that referenced this pull request Jul 10, 2023
…y tuple to indicate the parsing error (old API) (GH-105127) (#106612)

gh-102988: Detect email address parsing errors and return empty tuple to indicate the parsing error (old API) (GH-105127)

Detect email address parsing errors and return empty tuple to indicate the parsing error (old API). This fixes or at least ameliorates CVE-2023-27043.

---------

(cherry picked from commit 18dfbd0)

Co-authored-by: Thomas Dwyer <github@tomd.tel>
Co-authored-by: Gregory P. Smith <greg@krypto.org>

tdwyer-wish commented Jul 12, 2023
edited
Loading

Copy link
Copy Markdown

Hello @gpshead Are you going to take care of the backports/cherrypick for 3.10 and 3.11 I'd do them but I've never done that before... Hum, actually I don't think I have permission to do that.

gpshead commented Jul 12, 2023

Copy link
Copy Markdown
Member

i'll do them, the issue remains assigned to me as a reminder. (anyone can do it, it's just a matter of creating your PR as a fork of the relevant release branch and selecting the matching base branch in the github ui at pr creation time)

Copy link
Copy Markdown
Contributor

Hello @gpshead Are you going to take care of the backports/cherrypick for 3.10 and 3.11 I'd do them but I've never done that before... Hum, actually I don't think I have permission to do that.

Please see https://devguide.python.org/core-developers/committing/#backporting-changes-to-an-older-version for details.

gpshead commented Jul 12, 2023

Copy link
Copy Markdown
Member

this appears to have caused #106669

This method returns a list of 2-tuples of the form returned by ``parseaddr()``.
*fieldvalues* is a sequence of header field values as might be returned by
:meth:`Message.get_all <email.message.Message.get_all>`. Here's a simple
example that gets all the recipients of a message::

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

@tdwyer Is this right? Isn’t the next paragraph still a literal block? Why have you removed this colon?

gpshead added a commit to gpshead/cpython that referenced this pull request Jul 14, 2023
…g errors and return empty tuple to indicate the parsing error (old API) (python#105127)"

This reverts commit 18dfbd0.

See python#106669.
gpshead added a commit that referenced this pull request Jul 21, 2023
gpshead added a commit to gpshead/cpython that referenced this pull request Jul 21, 2023
… parsing errors ... (pythonGH-105127)" (pythonGH-106733)

This reverts commit 18dfbd0.
Adds a regression test from the issue.

See python#106669..
(cherry picked from commit a31dea1)

Co-authored-by: Gregory P. Smith <greg@krypto.org>
gpshead added a commit that referenced this pull request Jul 21, 2023
…ors ... (GH-105127)" (GH-106733) (#106941)

This reverts commit 18dfbd0.
Adds a regression test from the issue.

See #106669..
(cherry picked from commit a31dea1)

Copy link
Copy Markdown
Member

Reminder about backporting. @tdwyer @gpshead

encukou commented Aug 15, 2025

Copy link
Copy Markdown
Member

This change was rolled back in 3.12+ in #106669.
The fixed version, #111116, was backported to 3.8+.

encukou removed needs backport to 3.10 only security fixes needs backport to 3.11 only security fixes labels Aug 15, 2025
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type-security A security issue

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants


Back | FazBrowse Home | New Git URL