diff options
author | Georg Brandl <georg@python.org> | 2012-09-22 07:03:56 (GMT) |
---|---|---|
committer | Georg Brandl <georg@python.org> | 2012-09-22 07:03:56 (GMT) |
commit | 1aca31e8f329e19de62a2f1a2080995e5712a9cd (patch) | |
tree | 9a3d62178053892e1bb1033032f88977746a7951 | |
parent | deb92b5b1b015191bb9f072b67536e471bd37a7a (diff) | |
download | cpython-1aca31e8f329e19de62a2f1a2080995e5712a9cd.zip cpython-1aca31e8f329e19de62a2f1a2080995e5712a9cd.tar.gz cpython-1aca31e8f329e19de62a2f1a2080995e5712a9cd.tar.bz2 |
Closes #15925: fix regression in parsedate() and parsedate_tz() that should return None if unable to parse the argument.
-rw-r--r-- | Lib/email/_parseaddr.py | 4 | ||||
-rw-r--r-- | Lib/email/utils.py | 24 | ||||
-rw-r--r-- | Lib/test/test_email/test_email.py | 13 | ||||
-rw-r--r-- | Misc/NEWS | 4 |
4 files changed, 21 insertions, 24 deletions
diff --git a/Lib/email/_parseaddr.py b/Lib/email/_parseaddr.py index 3528d02..cdfa372 100644 --- a/Lib/email/_parseaddr.py +++ b/Lib/email/_parseaddr.py @@ -48,6 +48,8 @@ def parsedate_tz(data): Accounts for military timezones. """ res = _parsedate_tz(data) + if not res: + return if res[9] is None: res[9] = 0 return tuple(res) @@ -62,6 +64,8 @@ def _parsedate_tz(data): source timezone really was UTC. """ + if not data: + return data = data.split() # The FWS after the comma after the day-of-week is optional, so search and # adjust for this. diff --git a/Lib/email/utils.py b/Lib/email/utils.py index 73bc348..6b6d7f4 100644 --- a/Lib/email/utils.py +++ b/Lib/email/utils.py @@ -37,10 +37,7 @@ from email._parseaddr import quote from email._parseaddr import AddressList as _AddressList from email._parseaddr import mktime_tz -# We need wormarounds for bugs in these methods in older Pythons (see below) -from email._parseaddr import parsedate as _parsedate -from email._parseaddr import parsedate_tz as _parsedate_tz -from email._parseaddr import _parsedate_tz as __parsedate_tz +from email._parseaddr import parsedate, parsedate_tz, _parsedate_tz from quopri import decodestring as _qdecode @@ -222,25 +219,8 @@ def make_msgid(idstring=None, domain=None): return msgid - -# These functions are in the standalone mimelib version only because they've -# subsequently been fixed in the latest Python versions. We use this to worm -# around broken older Pythons. -def parsedate(data): - if not data: - return None - return _parsedate(data) - - -def parsedate_tz(data): - if not data: - return None - return _parsedate_tz(data) - def parsedate_to_datetime(data): - if not data: - return None - *dtuple, tz = __parsedate_tz(data) + *dtuple, tz = _parsedate_tz(data) if tz is None: return datetime.datetime(*dtuple[:6]) return datetime.datetime(*dtuple[:6], diff --git a/Lib/test/test_email/test_email.py b/Lib/test/test_email/test_email.py index 5cc6d04..36c344f 100644 --- a/Lib/test/test_email/test_email.py +++ b/Lib/test/test_email/test_email.py @@ -2718,8 +2718,17 @@ class TestMiscellaneous(TestEmailBase): utils.formatdate(now, localtime=False, usegmt=True), time.strftime('%a, %d %b %Y %H:%M:%S GMT', time.gmtime(now))) - def test_parsedate_none(self): - self.assertEqual(utils.parsedate(''), None) + # parsedate and parsedate_tz will become deprecated interfaces someday + def test_parsedate_returns_None_for_invalid_strings(self): + self.assertIsNone(utils.parsedate('')) + self.assertIsNone(utils.parsedate_tz('')) + self.assertIsNone(utils.parsedate('0')) + self.assertIsNone(utils.parsedate_tz('0')) + self.assertIsNone(utils.parsedate('A Complete Waste of Time')) + self.assertIsNone(utils.parsedate_tz('A Complete Waste of Time')) + # Not a part of the spec but, but this has historically worked: + self.assertIsNone(utils.parsedate(None)) + self.assertIsNone(utils.parsedate_tz(None)) def test_parsedate_compact(self): # The FWS after the comma is optional @@ -22,6 +22,10 @@ Library with decimal.py: Infinity coefficients are undefined in _decimal (in accordance with the specification). +- Issue #15925: Fix a regression in email.util where the parsedate() and + parsedate_tz() functions did not return None anymore when the argument could + not be parsed. + Extension Modules ----------------- |