From 034f713d70828c6642194ae80b8d194dc83ca66e Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Fri, 14 May 2021 02:07:01 +0100 Subject: Avoid traceback reference cycle in PageTemplate._cook In Python 3, exceptions have a ``__traceback__`` attribute containing their associated traceback. Storing an exception in a local variable of a frame present in that traceback thus creates a reference cycle. Avoid this by explicitly deleting the exception value when we're finished with it. --- src/zope/pagetemplate/pagetemplate.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/zope/pagetemplate/pagetemplate.py b/src/zope/pagetemplate/pagetemplate.py index 81b2c8b..78d4d50 100644 --- a/src/zope/pagetemplate/pagetemplate.py +++ b/src/zope/pagetemplate/pagetemplate.py @@ -230,10 +230,13 @@ class PageTemplate(object): source_file, self._text, pt_engine, self.content_type) except: etype, e = sys.exc_info()[:2] - self._v_errors = [ - "Compilation failed", - "%s.%s: %s" % (etype.__module__, etype.__name__, e) - ] + try: + self._v_errors = [ + "Compilation failed", + "%s.%s: %s" % (etype.__module__, etype.__name__, e) + ] + finally: + del e self._v_cooked = 1 -- cgit v1.2.1