summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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 c924d3a..89c1391 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 09f51df..c311469 100644
--- a/Lib/email/test/test_email.py
+++ b/Lib/email/test/test_email.py
@@ -1649,6 +1649,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
@@ -3176,7 +3185,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 0347f67..75c3ae7 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -854,6 +854,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 a523b8f..dcf2b62 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -37,6 +37,9 @@ Extensions
Library
-------
+- Issue #3196: email header decoding is now forgiving if an RFC2047
+ encoded word encoded in base64 is lacking padding.
+
- Issue #9444: Argparse now uses the first element of prefix_chars as
the option character for the added 'h/help' option if prefix_chars
does not contain a '-', instead of raising an error.