From: Victor Stinner Date: Mon, 19 Aug 2019 22:40:39 +0000 (+0200) Subject: Fix TracebackFrameProxy.set_next() on Python 3.7 X-Git-Tag: 2.10.2~2^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3a86ef3d72fdefb149c0c859e6e37035826f3557;p=thirdparty%2Fjinja.git Fix TracebackFrameProxy.set_next() on Python 3.7 Fix issue #1050: fix a crash in TracebackFrameProxy.set_next() on Python 3.7 and newer, when Python is build in debug mode. Since Python 3.7, traceback.tb_next field can be modified: ctypes is no longer needed. --- diff --git a/CHANGES.rst b/CHANGES.rst index 3199d559..9bf04814 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -8,6 +8,8 @@ Unreleased - Fix Python 3.7 deprecation warnings. - Using ``range`` in the sandboxed environment uses ``xrange`` on Python 2 to avoid memory use. :issue:`933` +- Use Python 3.7's better traceback support to avoid a core dump when + using debug builds of Python 3.7. :issue:`1050` Version 2.10.1 diff --git a/jinja2/debug.py b/jinja2/debug.py index b61139f0..d3c1a3a8 100644 --- a/jinja2/debug.py +++ b/jinja2/debug.py @@ -365,8 +365,14 @@ def _init_ugly_crap(): # proxies. tb_set_next = None if tproxy is None: - try: - tb_set_next = _init_ugly_crap() - except: - pass - del _init_ugly_crap + # traceback.tb_next can be modified since CPython 3.7 + if sys.version_info >= (3, 7): + def tb_set_next(tb, next): + tb.tb_next = next + else: + # On Python 3.6 and older, use ctypes + try: + tb_set_next = _init_ugly_crap() + except Exception: + pass +del _init_ugly_crap