summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/email/Generator.py18
1 files changed, 17 insertions, 1 deletions
diff --git a/Lib/email/Generator.py b/Lib/email/Generator.py
index 7f05218..58e2f91 100644
--- a/Lib/email/Generator.py
+++ b/Lib/email/Generator.py
@@ -8,7 +8,7 @@ import time
import re
import random
-from types import ListType
+from types import ListType, StringType
from cStringIO import StringIO
from email.Header import Header
@@ -35,6 +35,14 @@ SPACE8 = ' ' * 8
fcre = re.compile(r'^From ', re.MULTILINE)
+def _is8bitstring(s):
+ if isinstance(s, StringType):
+ try:
+ unicode(s, 'us-ascii')
+ except UnicodeError:
+ return True
+ return False
+
class Generator:
@@ -174,6 +182,14 @@ class Generator:
# No line was actually longer than maxheaderlen characters, so
# just return the original unchanged.
return text
+ # If we have raw 8bit data in a byte string, we have no idea what the
+ # encoding is. I think there is no safe way to split this string. If
+ # it's ascii-subset, then we could do a normal ascii split, but if
+ # it's multibyte then we could break the string. There's no way to
+ # know so the least harm seems to be to not split the string and risk
+ # it being too long.
+ if _is8bitstring(text):
+ return text
# The `text' argument already has the field name prepended, so don't
# provide it here or the first line will get folded too short.
h = Header(text, maxlinelen=maxheaderlen,