[Python-checkins] cpython (3.5): Issue #20041: Fixed TypeError when frame.f_trace is set to None.

serhiy.storchaka python-checkins at python.org
Sat Jun 4 13:42:44 EDT 2016


https://hg.python.org/cpython/rev/74ad78d2dd8d
changeset: 101703:74ad78d2dd8d
branch: 3.5
parent: 101699:d83007ab69e2
user: Serhiy Storchaka <storchaka at gmail.com>
date: Sat Jun 04 20:32:36 2016 +0300
summary:
 Issue #20041: Fixed TypeError when frame.f_trace is set to None.
Patch by Xavier de Gaye.
files:
 Lib/test/test_sys_settrace.py | 9 +++++++++
 Misc/NEWS | 3 +++
 Objects/frameobject.c | 8 +++-----
 3 files changed, 15 insertions(+), 5 deletions(-)
diff --git a/Lib/test/test_sys_settrace.py b/Lib/test/test_sys_settrace.py
--- a/Lib/test/test_sys_settrace.py
+++ b/Lib/test/test_sys_settrace.py
@@ -388,6 +388,15 @@
 (257, 'line'),
 (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):
 def setUp(self):
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,9 @@
 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"
 format unit.
 
diff --git a/Objects/frameobject.c b/Objects/frameobject.c
--- a/Objects/frameobject.c
+++ b/Objects/frameobject.c
@@ -349,15 +349,13 @@
 static int
 frame_settrace(PyFrameObject *f, PyObject* v, void *closure)
 {
- PyObject* old_value;
-
 /* We rely on f_lineno being accurate when f_trace is set. */
 f->f_lineno = PyFrame_GetLineNumber(f);
 
- old_value = f->f_trace;
+ if (v == Py_None)
+ v = NULL;
 Py_XINCREF(v);
- f->f_trace = v;
- Py_XDECREF(old_value);
+ Py_XSETREF(f->f_trace, v);
 
 return 0;
 }
-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /