mirror of
https://github.com/python/cpython.git
synced 2025-08-30 13:38:43 +00:00
_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).
This commit is contained in:
parent
45bb87bc13
commit
487fe6ac39
1 changed files with 6 additions and 5 deletions
|
@ -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:
|
||||||
# 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:
|
||||||
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:
|
||||||
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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue