bpo-30532: Fix whitespace folding in certain cases (#2591) · python/cpython@c60d2f5 (original) (raw)

4 files changed

lines changed

Original file line number Diff line number Diff line change
@@ -341,9 +341,7 @@ def _fold(self, folded):
341 341 # avoid infinite recursion.
342 342 ws = part.pop_leading_fws()
343 343 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)
347 345 if folded.append_if_fits(part):
348 346 continue
349 347 if part.has_fws:
Original file line number Diff line number Diff line change
@@ -2711,5 +2711,17 @@ def test_whitespace_splitting(self):
2711 2711 self._test(parser.get_unstructured('xxx ' + 'y'*77),
2712 2712 'xxx \n ' + 'y'*77 + '\n')
2713 2713
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 +
2714 2726 if __name__ == '__main__':
2715 2727 unittest.main()
Original file line number Diff line number Diff line change
@@ -624,6 +624,7 @@ Wouter van Heyst
624 624 Kelsey Hightower
625 625 Jason Hildebrand
626 626 Aaron Hill
627 +Joel Hillacre
627 628 Richie Hindle
628 629 Konrad Hinsen
629 630 David Hobley
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
1 +Fix email header value parser dropping folding white space in certain cases.