mirror of
https://github.com/python/cpython.git
synced 2025-11-02 03:01:58 +00:00
Import _isstring() from the compatibility layer.
_handle_text(): Use _isstring() for stringiness test. _handle_multipart(): Add a test before the ListType test, checking for stringiness of the payload. String payloads for multitypes means a message with broken MIME chrome was parsed by a lax parser. Instead of raising a BoundaryError in those cases, the entire body is assigned to the message payload (but since the content type is still multipart/*, the Generator needs to be updated too).
This commit is contained in:
parent
356afac41f
commit
b1c1de3805
1 changed files with 12 additions and 2 deletions
|
|
@ -8,11 +8,17 @@ import time
|
|||
import re
|
||||
import random
|
||||
|
||||
from types import ListType, StringType
|
||||
from types import ListType
|
||||
from cStringIO import StringIO
|
||||
|
||||
from email.Header import Header
|
||||
|
||||
try:
|
||||
from email._compat22 import _isstring
|
||||
except SyntaxError:
|
||||
from email._compat21 import _isstring
|
||||
|
||||
|
||||
EMPTYSTRING = ''
|
||||
SEMISPACE = '; '
|
||||
BAR = '|'
|
||||
|
|
@ -187,7 +193,7 @@ class Generator:
|
|||
cset = msg.get_charset()
|
||||
if cset is not None:
|
||||
payload = cset.body_encode(payload)
|
||||
if not isinstance(payload, StringType):
|
||||
if not _isstring(payload):
|
||||
raise TypeError, 'string payload expected: %s' % type(payload)
|
||||
if self._mangle_from_:
|
||||
payload = fcre.sub('>From ', payload)
|
||||
|
|
@ -209,6 +215,10 @@ class Generator:
|
|||
print >> self._fp, '\n'
|
||||
print >> self._fp, '--' + boundary + '--'
|
||||
return
|
||||
elif _isstring(subparts):
|
||||
# e.g. a non-strict parse of a message with no starting boundary.
|
||||
self._fp.write(subparts)
|
||||
return
|
||||
elif not isinstance(subparts, ListType):
|
||||
# Scalar payload
|
||||
subparts = [subparts]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue