Skip to content

Commit b350c22

Browse files
jhillacrebitdancer
authored andcommitted
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.
1 parent f84ac42 commit b350c22

File tree

4 files changed

+15
-3
lines changed

4 files changed

+15
-3
lines changed

Lib/email/_header_value_parser.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -341,9 +341,7 @@ def _fold(self, folded):
341341
# avoid infinite recursion.
342342
ws = part.pop_leading_fws()
343343
if ws is not None:
344-
# Peel off the leading whitespace and make it sticky, to
345-
# avoid infinite recursion.
346-
folded.stickyspace = str(part.pop(0))
344+
folded.stickyspace = str(ws)
347345
if folded.append_if_fits(part):
348346
continue
349347
if part.has_fws:

Lib/test/test_email/test__header_value_parser.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2711,5 +2711,17 @@ def test_whitespace_splitting(self):
27112711
self._test(parser.get_unstructured('xxx ' + 'y'*77),
27122712
'xxx \n ' + 'y'*77 + '\n')
27132713

2714+
def test_long_filename_attachment(self):
2715+
folded = self.policy.fold('Content-Disposition', 'attachment; filename="TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TES.txt"')
2716+
self.assertEqual(
2717+
'Content-Disposition: attachment;\n filename="TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TES.txt"\n',
2718+
folded
2719+
)
2720+
folded = self.policy.fold('Content-Disposition', 'attachment; filename="TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_T.txt"')
2721+
self.assertEqual(
2722+
'Content-Disposition: attachment;\n filename="TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_TEST_T.txt"\n',
2723+
folded
2724+
)
2725+
27142726
if __name__ == '__main__':
27152727
unittest.main()

Misc/ACKS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -630,6 +630,7 @@ Wouter van Heyst
630630
Kelsey Hightower
631631
Jason Hildebrand
632632
Aaron Hill
633+
Joel Hillacre
633634
Richie Hindle
634635
Konrad Hinsen
635636
David Hobley
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix email header value parser dropping folding white space in certain cases.

0 commit comments

Comments
 (0)