]> granicus.if.org Git - python/commitdiff
#11492: fix header truncation on folding when there are runs of split chars.
authorR David Murray <rdmurray@bitdance.com>
Fri, 8 Apr 2011 00:54:03 +0000 (20:54 -0400)
committerR David Murray <rdmurray@bitdance.com>
Fri, 8 Apr 2011 00:54:03 +0000 (20:54 -0400)
Not a complete fix for this issue.

Lib/email/header.py
Lib/email/test/test_email.py

index da739d58925d93d73335d0cd58081f4e981a5086..a7963ac25cda8342c6e3028c81d57f09d5b91773 100644 (file)
@@ -464,12 +464,13 @@ class _ValueFormatter:
                         self._current_line.reset(str(holding))
                 return
             elif not nextpart:
-                # There must be some trailing split characters because we
+                # There must be some trailing or duplicated split characters
+                # because we
                 # found a split character but no next part.  In this case we
                 # must treat the thing to fit as the part + splitpart because
                 # if splitpart is whitespace it's not allowed to be the only
                 # thing on the line, and if it's not whitespace we must split
-                # after the syntactic break.  In either case, we're done.
+                # after the syntactic break.
                 holding_prelen = len(holding)
                 holding.push(part + splitpart)
                 if len(holding) + len(self._current_line) <= self._maxlen:
@@ -484,7 +485,7 @@ class _ValueFormatter:
                     self._lines.append(str(self._current_line))
                     holding.reset(save_part)
                     self._current_line.reset(str(holding))
-                return
+                holding.reset()
             elif not part:
                 # We're leading with a split character.  See if the splitpart
                 # and nextpart fits on the current line.
index 5b8b7bfbdb80d2ca6643cfb717036423cda57e7d..e06c4611a5351ea38582ed5e651956b259650a26 100644 (file)
@@ -793,6 +793,16 @@ Subject: the first part of this is short,
 ;
  this_part_does_not_fit_within_maxlinelen_and_thus_should_be_on_a_line_all_by_itself;""")
 
+    def test_long_header_with_multiple_sequential_split_chars(self):
+        # Issue 11492
+
+        eq = self.ndiffAssertEqual
+        h = Header('This is a long line that has two whitespaces  in a row.  '
+            'This used to cause truncation of the header when folded')
+        eq(h.encode(), """\
+This is a long line that has two whitespaces  in a row.  This used to cause
+ truncation of the header when folded""")
+
     def test_no_split_long_header(self):
         eq = self.ndiffAssertEqual
         hstr = 'References: ' + 'x' * 80