]> granicus.if.org Git - python/commitdiff
#243654: only create a new MIME boundary if we don't already have one.
authorR. David Murray <rdmurray@bitdance.com>
Sun, 12 Dec 2010 20:06:19 +0000 (20:06 +0000)
committerR. David Murray <rdmurray@bitdance.com>
Sun, 12 Dec 2010 20:06:19 +0000 (20:06 +0000)
The rearranged code should do exactly what the old code did, but
the new code avoids a potentially costly re computation in the case
where a boundary already exists.

Lib/email/generator.py

index 086cf4b9df84bbeda554b76e2340f2e7538fb170..510f68b4408026155771a6235e027cdb1161e257 100644 (file)
@@ -220,19 +220,13 @@ class Generator:
             g = self.clone(s)
             g.flatten(part, unixfrom=False, linesep=self._NL)
             msgtexts.append(s.getvalue())
-        # Now make sure the boundary we've selected doesn't appear in any of
-        # the message texts.
-        alltext = self._encoded_NL.join(msgtexts)
         # BAW: What about boundaries that are wrapped in double-quotes?
-        boundary = msg.get_boundary(failobj=self._make_boundary(alltext))
-        # If we had to calculate a new boundary because the body text
-        # contained that string, set the new boundary.  We don't do it
-        # unconditionally because, while set_boundary() preserves order, it
-        # doesn't preserve newlines/continuations in headers.  This is no big
-        # deal in practice, but turns out to be inconvenient for the unittest
-        # suite.
-        if msg.get_boundary() != boundary:
-            msg.set_boundary(boundary)
+        boundary = msg.get_boundary()
+        if not boundary:
+            # Create a boundary that doesn't appear in any of the
+            # message texts.
+            alltext = self._encoded_NL.join(msgtexts)
+            msg.set_boundary(self._make_boundary(alltext))
         # If there's a preamble, write it out, with a trailing CRLF
         if msg.preamble is not None:
             self.write(msg.preamble + self._NL)