#27522: break unintended cycle in feedparser.

Patch by Costas.
This commit is contained in:
R David Murray 2016-07-15 21:29:13 -04:00
parent 9305bba203
commit 702b0460d2
2 changed files with 8 additions and 3 deletions

View File

@ -145,7 +145,7 @@ def __init__(self, _factory=None, *, policy=compat32):
""" """
self.policy = policy self.policy = policy
self._factory_kwds = lambda: {'policy': self.policy} self._old_style_factory = False
if _factory is None: if _factory is None:
# What this should be: # What this should be:
#self._factory = policy.default_message_factory #self._factory = policy.default_message_factory
@ -160,7 +160,7 @@ def __init__(self, _factory=None, *, policy=compat32):
_factory(policy=self.policy) _factory(policy=self.policy)
except TypeError: except TypeError:
# Assume this is an old-style factory # Assume this is an old-style factory
self._factory_kwds = lambda: {} self._old_style_factory = True
self._input = BufferedSubFile() self._input = BufferedSubFile()
self._msgstack = [] self._msgstack = []
self._parse = self._parsegen().__next__ self._parse = self._parsegen().__next__
@ -197,7 +197,10 @@ def close(self):
return root return root
def _new_message(self): def _new_message(self):
msg = self._factory(**self._factory_kwds()) if self._old_style_factory:
msg = self._factory()
else:
msg = self._factory(policy=self.policy)
if self._cur and self._cur.get_content_type() == 'multipart/digest': if self._cur and self._cur.get_content_type() == 'multipart/digest':
msg.set_default_type('message/rfc822') msg.set_default_type('message/rfc822')
if self._msgstack: if self._msgstack:

View File

@ -24,6 +24,8 @@ Core and Builtins
Library Library
------- -------
- Issue #27522: Avoid an unintentional reference cycle in email.feedparser.
- Issue #26844: Fix error message for imp.find_module() to refer to 'path' - Issue #26844: Fix error message for imp.find_module() to refer to 'path'
instead of 'name'. Patch by Lev Maximov. instead of 'name'. Patch by Lev Maximov.