summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/email/quoprimime.py2
-rw-r--r--Lib/email/test/test_email.py6
-rw-r--r--Misc/NEWS3
3 files changed, 10 insertions, 1 deletions
diff --git a/Lib/email/quoprimime.py b/Lib/email/quoprimime.py
index b9dbfa9..0c18a9e 100644
--- a/Lib/email/quoprimime.py
+++ b/Lib/email/quoprimime.py
@@ -333,4 +333,4 @@ def header_decode(s):
the high level email.header class for that functionality.
"""
s = s.replace('_', ' ')
- return re.sub(r'=\w{2}', _unquote_match, s)
+ return re.sub(r'=[a-fA-F0-9]{2}', _unquote_match, s)
diff --git a/Lib/email/test/test_email.py b/Lib/email/test/test_email.py
index 300fc21..c3610bf 100644
--- a/Lib/email/test/test_email.py
+++ b/Lib/email/test/test_email.py
@@ -1621,6 +1621,12 @@ class TestRFC2047(unittest.TestCase):
dh = decode_header(s % q)
self.assertEqual(dh, [(a, 'iso-8859-1')])
+ def test_rfc2047_Q_invalid_digits(self):
+ # issue 10004.
+ s = '=?iso-8659-1?Q?andr=e9=zz?='
+ self.assertEqual(decode_header(s),
+ [(b'andr\xe9=zz', 'iso-8659-1')])
+
# Test the MIMEMessage class
class TestMIMEMessage(TestEmailBase):
diff --git a/Misc/NEWS b/Misc/NEWS
index d30b05b..78eb34f 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -48,6 +48,9 @@ Core and Builtins
Library
-------
+- Issue #10004: quoprimime no longer generates a traceback when confronted
+ with invalid characters after '=' in a Q-encoded word.
+
- Issue #9950: Fix socket.sendall() crash or misbehaviour when a signal is
received. Now sendall() properly calls signal handlers if necessary,
and retries sending if these returned successfully, including on sockets