New submission from Paweł Karczewski <pawel.karczew...@intel.com>: How to reproduce:
1. Create callback function, which may take any object and run type() on it def builtin_type_in_callback(obj): type(obj) 2. Create C extension with two types defined in it - Internal and External. Eternal type should implement method (let's name it Call), which can get callback function static PyObject * Call(ExternalObject *self, PyObject* args) { PyObject* python_callback; if (!PyArg_ParseTuple(args, "O:set_callback", &python_callback)) { return NULL; } callback_runner(python_callback); if(PyErr_Occurred() != NULL) return NULL; Py_RETURN_NONE; } Inside this function create object of Internal type and pass it to callback function void callback_runner(void* callback_function) { InternalObject *entry = PyObject_New(InternalObject, &InternalType); PyObject_Init((PyObject*)entry, &InternalType); PyObject *args = PyTuple_New(1); if (args != NULL) { if (PyTuple_SetItem(args, 0, (PyObject *)entry) == 0) { PyObject *res = PyObject_CallObject((PyObject *) callback_function, args); Py_XDECREF(res); } } When type() is called on object of Internal type segmentation fault occur. However, if dir() was called on such object before type(), type() works properly and returns type of Internal Object. For more details please look into reproducer code. ---------- components: C API files: cpython_type_segfaulter.tgz messages: 359680 nosy: karczex priority: normal severity: normal status: open title: type() cause segmentation fault in callback function called from C extension versions: Python 3.7, Python 3.8 Added file: https://bugs.python.org/file48834/cpython_type_segfaulter.tgz _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue39276> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com