mirror of
https://github.com/python/cpython.git
synced 2025-07-17 16:25:18 +00:00

caused by a self._input.readline() call that wasn't checking for the NeedsMoreData marker. msg_43.txt contains a message that illustrates the problem, when email.message_from_*() is called. That interface uses the Parser API, which splits reads into 8192 byte chunks. It so happens that for the test message, the 8192 chunk falls inside a message/delivery-status, which is where in the FeedParser the readline() call was that didn't check for NeedsMoreData. I also added an assert to unreadline() so it'll be more evident if an attempt to push back NeedsMoreData ever happens again. Bump the email package version number.
52 lines
1.2 KiB
Python
52 lines
1.2 KiB
Python
# Copyright (C) 2001-2004 Python Software Foundation
|
||
# Author: Barry Warsaw
|
||
# Contact: email-sig@python.org
|
||
|
||
"""A package for parsing, handling, and generating email messages."""
|
||
|
||
__version__ = '3.0+'
|
||
|
||
__all__ = [
|
||
'base64MIME',
|
||
'Charset',
|
||
'Encoders',
|
||
'Errors',
|
||
'Generator',
|
||
'Header',
|
||
'Iterators',
|
||
'Message',
|
||
'MIMEAudio',
|
||
'MIMEBase',
|
||
'MIMEImage',
|
||
'MIMEMessage',
|
||
'MIMEMultipart',
|
||
'MIMENonMultipart',
|
||
'MIMEText',
|
||
'Parser',
|
||
'quopriMIME',
|
||
'Utils',
|
||
'message_from_string',
|
||
'message_from_file',
|
||
]
|
||
|
||
|
||
|
||
# Some convenience routines. Don't import Parser and Message as side-effects
|
||
# of importing email since those cascadingly import most of the rest of the
|
||
# email package.
|
||
def message_from_string(s, *args, **kws):
|
||
"""Parse a string into a Message object model.
|
||
|
||
Optional _class and strict are passed to the Parser constructor.
|
||
"""
|
||
from email.Parser import Parser
|
||
return Parser(*args, **kws).parsestr(s)
|
||
|
||
|
||
def message_from_file(fp, *args, **kws):
|
||
"""Read a file and parse its contents into a Message object model.
|
||
|
||
Optional _class and strict are passed to the Parser constructor.
|
||
"""
|
||
from email.Parser import Parser
|
||
return Parser(*args, **kws).parse(fp)
|