Commit 487fe6ac authored by Barry Warsaw's avatar Barry Warsaw

_parsebody(): Use get_content_type() instead of the deprecated

get_type().  Also, one of the regular expressions is constant so might
as well make it a module global.  And, when splitting up digests,
handle lineseps that are longer than 1 character in length
(e.g. \r\n).
parent 45bb87bc
...@@ -20,6 +20,8 @@ except NameError: ...@@ -20,6 +20,8 @@ except NameError:
True = 1 True = 1
False = 0 False = 0
nlcre = re.compile('\r\n|\r|\n')
class Parser: class Parser:
...@@ -137,7 +139,7 @@ class Parser: ...@@ -137,7 +139,7 @@ class Parser:
# Parse the body, but first split the payload on the content-type # Parse the body, but first split the payload on the content-type
# boundary if present. # boundary if present.
boundary = container.get_boundary() boundary = container.get_boundary()
isdigest = (container.get_type() == 'multipart/digest') isdigest = (container.get_content_type() == 'multipart/digest')
# If there's a boundary, split the payload text into its constituent # If there's a boundary, split the payload text into its constituent
# parts and parse each separately. Otherwise, just parse the rest of # parts and parse each separately. Otherwise, just parse the rest of
# the body as a single message. Note: any exceptions raised in the # the body as a single message. Note: any exceptions raised in the
...@@ -167,8 +169,7 @@ class Parser: ...@@ -167,8 +169,7 @@ class Parser:
preamble = payload[0:start] preamble = payload[0:start]
# Find out what kind of line endings we're using # Find out what kind of line endings we're using
start += len(mo.group('sep')) + len(mo.group('ws')) start += len(mo.group('sep')) + len(mo.group('ws'))
cre = re.compile('\r\n|\r|\n') mo = nlcre.search(payload, start)
mo = cre.search(payload, start)
if mo: if mo:
start += len(mo.group(0)) start += len(mo.group(0))
# We create a compiled regexp first because we need to be able to # We create a compiled regexp first because we need to be able to
...@@ -209,12 +210,12 @@ class Parser: ...@@ -209,12 +210,12 @@ class Parser:
payload[start:terminator]) payload[start:terminator])
for part in parts: for part in parts:
if isdigest: if isdigest:
if part[0] == linesep: if part.startswith(linesep):
# There's no header block so create an empty message # There's no header block so create an empty message
# object as the container, and lop off the newline so # object as the container, and lop off the newline so
# we can parse the sub-subobject # we can parse the sub-subobject
msgobj = self._class() msgobj = self._class()
part = part[1:] part = part[len(linesep):]
else: else:
parthdrs, part = part.split(linesep+linesep, 1) parthdrs, part = part.split(linesep+linesep, 1)
# msgobj in this case is the "message/rfc822" container # msgobj in this case is the "message/rfc822" container
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment