-
-
Notifications
You must be signed in to change notification settings - Fork 33.2k
gh-126845: Some edge cases in email.utils.parsedate_to_datetime seem to differ from RFC2822 spec #134438
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
gh-126845: Some edge cases in email.utils.parsedate_to_datetime seem to differ from RFC2822 spec #134438
Changes from 7 commits
a84d66c
df899ea
6112424
639514f
5dccaeb
83bdc71
1575dc3
3cba685
da6ff70
693bce3
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -3227,7 +3227,7 @@ def test_parsedate_y2k(self): | |
|
|
||
| """ | ||
| self.assertEqual(utils.parsedate_tz('25 Feb 03 13:47:26 -0800'), | ||
| utils.parsedate_tz('25 Feb 2003 13:47:26 -0800')) | ||
| utils.parsedate_tz('25 Feb 3 13:47:26 -0800')) | ||
|
||
| self.assertEqual(utils.parsedate_tz('25 Feb 71 13:47:26 -0800'), | ||
| utils.parsedate_tz('25 Feb 1971 13:47:26 -0800')) | ||
|
|
||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,17 @@ | ||
| # Test to see if parsedate_to_datetime returns the correct year for different digit numbers, adhering to the RFC2822 spec | ||
|
|
||
| import unittest | ||
| from email.utils import parsedate_to_datetime | ||
|
|
||
| class ParsedateToDatetimeTest(unittest.TestCase): | ||
|
||
| def test(self): | ||
| expectations = { | ||
| "Sat, 15 Aug 0001 23:12:09 +0500": "0001", | ||
| "Thu, 1 Sep 1 23:12:09 +0800": "0001", | ||
|
||
| "Thu, 7 Oct 123 23:12:09 +0500": "0123", | ||
|
||
| } | ||
| for input_string, output_string in expectations.items(): | ||
|
||
| self.assertEqual(str(parsedate_to_datetime(input_string))[:4], output_string) | ||
|
|
||
| if __name__ == '__main__': | ||
| unittest.main() | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,2 @@ | ||
| Fixed _parsedate_tz to not evaluate 1 digit years as as 4-digit years, adhering to RFC 2855 4.3 | ||
| Contributed by Gustaf Gyllensporre. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yyis now a number, so ifyy < 100(and it's positive),len(str(yy)) >= 2is never true.You need to keep the original year string for this check.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I was able to remove this check following what @bitdancer said below