From accd1c040f472f613cdac8fbf78e75794819acfc Mon Sep 17 00:00:00 2001 From: R David Murray Date: Sun, 13 Mar 2011 20:06:23 -0400 Subject: #1162477: accept '.' in addition to ':' when parsing time in date header. Some non-compliant MUAs use '.'s, so by the Postel Principle we should accept them. Patch by Thomas Herve. --- Lib/email/_parseaddr.py | 8 ++++++++ Lib/email/test/test_email.py | 7 +++++++ Misc/NEWS | 3 +++ 3 files changed, 18 insertions(+) diff --git a/Lib/email/_parseaddr.py b/Lib/email/_parseaddr.py index 41694f9..4b2f5c6 100644 --- a/Lib/email/_parseaddr.py +++ b/Lib/email/_parseaddr.py @@ -99,6 +99,14 @@ def parsedate_tz(data): tss = '0' elif len(tm) == 3: [thh, tmm, tss] = tm + elif len(tm) == 1 and '.' in tm[0]: + # Some non-compliant MUAs use '.' to separate time elements. + tm = tm[0].split('.') + if len(tm) == 2: + [thh, tmm] = tm + tss = 0 + elif len(tm) == 3: + [thh, tmm, tss] = tm else: return None try: diff --git a/Lib/email/test/test_email.py b/Lib/email/test/test_email.py index 16772b1..5aaf526 100644 --- a/Lib/email/test/test_email.py +++ b/Lib/email/test/test_email.py @@ -2328,6 +2328,13 @@ class TestMiscellaneous(TestEmailBase): (2002, 4, 3, 14, 58, 26, 0, 1, -1, -28800)) + def test_parsedate_accepts_time_with_dots(self): + eq = self.assertEqual + eq(utils.parsedate_tz('5 Feb 2003 13.47.26 -0800'), + (2003, 2, 5, 13, 47, 26, 0, 1, -1, -28800)) + eq(utils.parsedate_tz('5 Feb 2003 13.47 -0800'), + (2003, 2, 5, 13, 47, 0, 0, 1, -1, -28800)) + def test_parsedate_acceptable_to_time_functions(self): eq = self.assertEqual timetup = utils.parsedate('5 Feb 2003 13:47:26 -0800') diff --git a/Misc/NEWS b/Misc/NEWS index f22f41c..a87e501 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -68,6 +68,9 @@ Core and Builtins Library ------- +- Issue #1162477: Postel Principal adjustment to email date parsing: handle the + fact that some non-compliant MUAs use '.' instead of ':' in time specs. + - Issue #11131: Fix sign of zero in decimal.Decimal plus and minus operations when the rounding mode is ROUND_FLOOR. -- cgit v0.12