Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork33.7k
Description
Bug report
Bug description:
Documented behavior of Py_REF_DEBUG includes:
Py_REF_DEBUG also checks after every decref to verify that the refcount hasn't
gone negative, and causes an immediate fatal error if it has.
CallingPy_DECREF twice does not result in the expected error:
staticPyObject*spam_double_decref(PyObject*self,PyObject*args) {printf("spam_double_decref ... begin\n");PyObject*obj=Py_BuildValue("s","foobar");Py_DECREF (obj);Py_DECREF (obj);// Expect error, but does not error when using cpython built with `--with-pydebug`.printf("spam_double_decref ... end\n");Py_RETURN_NONE;}
To reproduce:
Build CPython with--with-pydebug:
cd /home/kevin/code/cpythonmkdir debugcd debug/../configure --with-pydebugmake -j16
Buildthis sample extension callingPy_DECREF twice using the debug build of CPython:
PYTHON=/home/kevin/code/cpython/debug/python$PYTHON setup.py buildRun a test with this extension:
# Add path to built extension to `PYTHONPATH`.export PYTHONPATH=/home/kevin/code/cpython/KEVINALBS/double_decref_extension/build/lib.linux-x86_64-cpython-313-pydebugPYTHON=/home/kevin/code/cpython/debug/python$PYTHON -c"import spam; spam.double_decref()"# Prints:# spam_double_decref ... begin# spam_double_decref ... end
No error is indicated, but an error is expected.
Extension source is located here:https://github.com/kevinAlbs/double_decref_extension
Tested with cpython main branch on commit:929cc4e.
If this issue is confirmed, I may be interested to investigate possible solutions.
CPython versions tested on:
CPython main branch
Operating systems tested on:
Linux
Linked PRs
- gh-109496: Detect Py_DECREF() after dealloc in debug mode #109539
- [3.12] gh-109496: Detect Py_DECREF() after dealloc in debug mode (GH-109539) #109545
- gh-109496: Skip test_capi.test_decref_freed_object() on ASAN #109573
- [3.12] gh-109496: Skip test_capi.test_decref_freed_object() on ASAN (GH-109573) #109578