Issue #7819: Check sys.call_tracing() arguments types.
py3k was already patched by issue #3661.
diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py
index f58d900..6b45d12 100644
--- a/Lib/test/test_sys.py
+++ b/Lib/test/test_sys.py
@@ -433,6 +433,10 @@
out = p.communicate()[0].strip()
self.assertEqual(out, '?')
+ def test_call_tracing(self):
+ self.assertEqual(sys.call_tracing(str, (2,)), "2")
+ self.assertRaises(TypeError, sys.call_tracing, str, 2)
+
class SizeofTest(unittest.TestCase):
diff --git a/Misc/NEWS b/Misc/NEWS
index 5f64b8a..6b0f121 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,8 @@
Core and Builtins
-----------------
+- Issue #7819: Check sys.call_tracing() arguments types.
+
- Issue #7788: Fix an interpreter crash produced by deleting a list
slice with very large step value.
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index 3a99197..65a9d8f 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -840,7 +840,7 @@
sys_call_tracing(PyObject *self, PyObject *args)
{
PyObject *func, *funcargs;
- if (!PyArg_UnpackTuple(args, "call_tracing", 2, 2, &func, &funcargs))
+ if (!PyArg_ParseTuple(args, "OO!:call_tracing", &func, &PyTuple_Type, &funcargs))
return NULL;
return _PyEval_CallTracing(func, funcargs);
}