]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
#27522: break unintended cycle in feedparser.
authorR David Murray <rdmurray@bitdance.com>
Sat, 16 Jul 2016 01:29:13 +0000 (21:29 -0400)
committerR David Murray <rdmurray@bitdance.com>
Sat, 16 Jul 2016 01:29:13 +0000 (21:29 -0400)
Patch by Costas.

Lib/email/feedparser.py
Misc/NEWS

index e2e3e96a15095d65eb0d2f2915ea39d1ad09f398..c54201819fa0287373b52b51672cc3f5ce335d43 100644 (file)
@@ -145,7 +145,7 @@ class FeedParser:
 
         """
         self.policy = policy
-        self._factory_kwds = lambda: {'policy': self.policy}
+        self._old_style_factory = False
         if _factory is None:
             # What this should be:
             #self._factory = policy.default_message_factory
@@ -160,7 +160,7 @@ class FeedParser:
                 _factory(policy=self.policy)
             except TypeError:
                 # Assume this is an old-style factory
-                self._factory_kwds = lambda: {}
+                self._old_style_factory = True
         self._input = BufferedSubFile()
         self._msgstack = []
         self._parse = self._parsegen().__next__
@@ -197,7 +197,10 @@ class FeedParser:
         return root
 
     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':
             msg.set_default_type('message/rfc822')
         if self._msgstack:
index a13b2fb34b8c32c14180684fde8f384baa8f2eea..75ca9b0133c9213b17d53b3a5ce72403349486e3 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -24,6 +24,8 @@ Core and Builtins
 Library
 -------
 
+- Issue #27522: Avoid an unintentional reference cycle in email.feedparser.
+
 - Issue #26844: Fix error message for imp.find_module() to refer to 'path'
   instead of 'name'. Patch by Lev Maximov.