Kaydet (Commit) 64c26e5f authored tarafından Serhiy Storchaka's avatar Serhiy Storchaka

Issue #20041: Fixed TypeError when frame.f_trace is set to None.

Patch by Xavier de Gaye.
...@@ -388,6 +388,15 @@ class TraceTestCase(unittest.TestCase): ...@@ -388,6 +388,15 @@ class TraceTestCase(unittest.TestCase):
(257, 'line'), (257, 'line'),
(257, 'return')]) (257, 'return')])
def test_17_none_f_trace(self):
# Issue 20041: fix TypeError when f_trace is set to None.
def func():
sys._getframe().f_trace = None
lineno = 2
self.run_and_compare(func,
[(0, 'call'),
(1, 'line')])
class RaisingTraceFuncTestCase(unittest.TestCase): class RaisingTraceFuncTestCase(unittest.TestCase):
def setUp(self): def setUp(self):
......
...@@ -120,6 +120,9 @@ Release date: 2016-05-16 ...@@ -120,6 +120,9 @@ Release date: 2016-05-16
Core and Builtins Core and Builtins
----------------- -----------------
- Issue #20041: Fixed TypeError when frame.f_trace is set to None.
Patch by Xavier de Gaye.
- Issue #26168: Fixed possible refleaks in failing Py_BuildValue() with the "N" - Issue #26168: Fixed possible refleaks in failing Py_BuildValue() with the "N"
format unit. format unit.
......
...@@ -344,6 +344,8 @@ frame_settrace(PyFrameObject *f, PyObject* v, void *closure) ...@@ -344,6 +344,8 @@ frame_settrace(PyFrameObject *f, PyObject* v, void *closure)
/* We rely on f_lineno being accurate when f_trace is set. */ /* We rely on f_lineno being accurate when f_trace is set. */
f->f_lineno = PyFrame_GetLineNumber(f); f->f_lineno = PyFrame_GetLineNumber(f);
if (v == Py_None)
v = NULL;
Py_XINCREF(v); Py_XINCREF(v);
Py_XSETREF(f->f_trace, v); Py_XSETREF(f->f_trace, v);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment