summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorR. David Murray <rdmurray@bitdance.com>2010-08-03 23:35:44 (GMT)
committerR. David Murray <rdmurray@bitdance.com>2010-08-03 23:35:44 (GMT)
commite06528c64b62abbaa49dedc395e1ce58ad3962fe (patch)
treef18571bb17671e57110e8a93ac356dc39ff52118
parent1f0f2785d9000e0120cca170208004ae0189dd3c (diff)
downloadcpython-e06528c64b62abbaa49dedc395e1ce58ad3962fe.zip
cpython-e06528c64b62abbaa49dedc395e1ce58ad3962fe.tar.gz
cpython-e06528c64b62abbaa49dedc395e1ce58ad3962fe.tar.bz2
Merged revisions 83690 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r83690 | r.david.murray | 2010-08-03 18:14:10 -0400 (Tue, 03 Aug 2010) | 10 lines #3196: if needed pad a short base64 encoded word before trying to decode. The RFCs encourage following Postel's law: be liberal in what you accept. So if someone forgot to pad the base64 encoded word payload to an even four bytes, we add the padding before handing it to base64mime.decode. Previously, missing padding resulted in a HeaderParseError. Patch by Jason Williams. ........
-rw-r--r--Lib/email/header.py3
-rw-r--r--Lib/email/test/test_email.py11
-rw-r--r--Misc/ACKS1
-rw-r--r--Misc/NEWS3
4 files changed, 17 insertions, 1 deletions
diff --git a/Lib/email/header.py b/Lib/email/header.py
index 3215a80..afcea40 100644
--- a/Lib/email/header.py
+++ b/Lib/email/header.py
@@ -94,6 +94,9 @@ def decode_header(header):
word = email.quoprimime.header_decode(encoded_string)
decoded_words.append((word, charset))
elif encoding == 'b':
+ paderr = len(encoded_string) % 4 # Postel's law: add missing padding
+ if paderr:
+ encoded_string += '==='[:4 - paderr]
try:
word = email.base64mime.decode(encoded_string)
except binascii.Error:
diff --git a/Lib/email/test/test_email.py b/Lib/email/test/test_email.py
index 7d91d25..0559142 100644
--- a/Lib/email/test/test_email.py
+++ b/Lib/email/test/test_email.py
@@ -1645,6 +1645,15 @@ Re: =?mac-iceland?q?r=8Aksm=9Arg=8Cs?= baz foo bar =?mac-iceland?q?r=8Aksm?=
(b'rg', None), (b'\xe5', 'iso-8859-1'),
(b'sbord', None)])
+ def test_rfc2047_B_bad_padding(self):
+ s = '=?iso-8859-1?B?%s?='
+ data = [ # only test complete bytes
+ ('dm==', b'v'), ('dm=', b'v'), ('dm', b'v'),
+ ('dmk=', b'vi'), ('dmk', b'vi')
+ ]
+ for q, a in data:
+ dh = decode_header(s % q)
+ self.assertEqual(dh, [(a, 'iso-8859-1')])
# Test the MIMEMessage class
@@ -3172,7 +3181,7 @@ A very long line that must get split to something other than at the
def test_broken_base64_header(self):
raises = self.assertRaises
- s = 'Subject: =?EUC-KR?B?CSixpLDtKSC/7Liuvsax4iC6uLmwMcijIKHaILzSwd/H0SC8+LCjwLsgv7W/+Mj3IQ?='
+ s = 'Subject: =?EUC-KR?B?CSixpLDtKSC/7Liuvsax4iC6uLmwMcijIKHaILzSwd/H0SC8+LCjwLsgv7W/+Mj3I ?='
raises(errors.HeaderParseError, decode_header, s)
diff --git a/Misc/ACKS b/Misc/ACKS
index 03f96eb..6486e79 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -817,6 +817,7 @@ Felix Wiemann
Gerry Wiener
Frank Wierzbicki
Bryce "Zooko" Wilcox-O'Hearn
+Jason Williams
John Williams
Sue Williams
Gerald S. Williams
diff --git a/Misc/NEWS b/Misc/NEWS
index 8e164a9..262bd5e 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -84,6 +84,9 @@ C-API
Library
-------
+- Issue #3196: email header decoding is now forgiving if an RFC2047
+ encoded word encoded in base64 is lacking padding.
+
- Issue #8447: Make distutils.sysconfig follow symlinks in the path to
the interpreter executable. This fixes a failure of test_httpservers
on OS X.