summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoel Hillacre <joel@403forbidden.ca>2017-06-26 21:41:35 (GMT)
committerR. David Murray <rdmurray@bitdance.com>2017-06-26 21:41:35 (GMT)
commitb350c22ebcbb891412e0b334afc9f0db19534e06 (patch)
tree1b53241cf239c66a84da3c4d328d87ec7cd0b46a
parentf84ac420c2af98339678744953869cad3c253281 (diff)
downloadcpython-b350c22ebcbb891412e0b334afc9f0db19534e06.zip
cpython-b350c22ebcbb891412e0b334afc9f0db19534e06.tar.gz
cpython-b350c22ebcbb891412e0b334afc9f0db19534e06.tar.bz2
bpo-30532: Fix whitespace folding in certain cases
Leading whitespace was incorrectly dropped during folding of certain lines in the _header_value_parser's folding algorithm. This makes the whitespace handling code consistent.
-rw-r--r--Lib/email/_header_value_parser.py4
-rw-r--r--Lib/test/test_email/test__header_value_parser.py12
-rw-r--r--Misc/ACKS1
-rw-r--r--Misc/NEWS.d/next/Library/2017-06-26-11-01-59.bpo-30532.qTeL1o.rst1
4 files changed, 15 insertions, 3 deletions
diff --git a/Lib/email/_header_value_parser.py b/Lib/email/_header_value_parser.py
index 57d01fb..9b9697f 100644
--- a/Lib/email/_header_value_parser.py
+++ b/Lib/email/_header_value_parser.py
@@ -341,9 +341,7 @@ class TokenList(list):
# avoid infinite recursion.
ws = part.pop_leading_fws()
if ws is not None:
- # Peel off the leading whitespace and make it sticky, to
- # avoid infinite recursion.
- folded.stickyspace = str(part.pop(0))
+ folded.stickyspace = str(ws)
if folded.append_if_fits(part):
continue
if part.has_fws:
diff --git a/Lib/test/test_email/test__header_value_parser.py b/Lib/test/test_email/test__header_value_parser.py
index 26ece69..e0ec87d 100644
--- a/Lib/test/test_email/test__header_value_parser.py
+++ b/Lib/test/test_email/test__header_value_parser.py
@@ -2711,5 +2711,17 @@ class TestFolding(TestEmailBase):
self._test(parser.get_unstructured('xxx ' + 'y'*77),
'xxx \n ' + 'y'*77 + '\n')
+ def test_long_filename_attachment(self):
+ folded = self.policy.fold('Content-Disposition', 'attachment; filename="TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TES.txt"')
+ self.assertEqual(
+ 'Content-Disposition: attachment;\n filename="TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TES.txt"\n',
+ folded
+ )
+ folded = self.policy.fold('Content-Disposition', 'attachment; filename="TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_T.txt"')
+ self.assertEqual(
+ 'Content-Disposition: attachment;\n filename="TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_T.txt"\n',
+ folded
+ )
+
if __name__ == '__main__':
unittest.main()
diff --git a/Misc/ACKS b/Misc/ACKS
index eaff172..89cd1fa 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -630,6 +630,7 @@ Wouter van Heyst
Kelsey Hightower
Jason Hildebrand
Aaron Hill
+Joel Hillacre
Richie Hindle
Konrad Hinsen
David Hobley
diff --git a/Misc/NEWS.d/next/Library/2017-06-26-11-01-59.bpo-30532.qTeL1o.rst b/Misc/NEWS.d/next/Library/2017-06-26-11-01-59.bpo-30532.qTeL1o.rst
new file mode 100644
index 0000000..adce85f
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2017-06-26-11-01-59.bpo-30532.qTeL1o.rst
@@ -0,0 +1 @@
+Fix email header value parser dropping folding white space in certain cases.