gh-132250: Clear error in lsprof callback when method descriptor raises an excep… (#132251)

This commit is contained in:
Tian Gao 2025-04-08 10:36:47 -07:00 committed by GitHub
parent efd8aca62c
commit ab64130b57
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 10 additions and 0 deletions

View file

@ -139,6 +139,14 @@ class CProfileTest(ProfileTest):
self.assertEqual(cc, 1)
self.assertEqual(nc, 1)
def test_bad_descriptor(self):
# gh-132250
# cProfile should not crash when the profiler callback fails to locate
# the actual function of a method.
with self.profilerclass() as prof:
with self.assertRaises(TypeError):
bytes.find(str())
class TestCommandLine(unittest.TestCase):
def test_sort(self):

View file

@ -0,0 +1 @@
Fixed the :exc:`SystemError` in :mod:`cProfile` when locating the actual C function of a method raises an exception.

View file

@ -671,6 +671,7 @@ PyObject* get_cfunc_from_callable(PyObject* callable, PyObject* self_arg, PyObje
PyObject *meth = Py_TYPE(callable)->tp_descr_get(
callable, self_arg, (PyObject*)Py_TYPE(self_arg));
if (meth == NULL) {
PyErr_Clear();
return NULL;
}
if (PyCFunction_Check(meth)) {