diff options
author | Victor Stinner <vstinner@python.org> | 2021-08-31 16:05:15 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-08-31 16:05:15 (GMT) |
commit | 4300352000beed22fb525ec45fd331918d206528 (patch) | |
tree | d85e14e3f00ce829258f890ee2e71698c9adf713 /Objects/boolobject.c | |
parent | 9a7ec2fcdee2da9e080ca459d4c240776df72567 (diff) | |
download | cpython-4300352000beed22fb525ec45fd331918d206528.zip cpython-4300352000beed22fb525ec45fd331918d206528.tar.gz cpython-4300352000beed22fb525ec45fd331918d206528.tar.bz2 |
bpo-45061: Detect Py_DECREF(Py_True) bug (GH-28089)
Add a deallocator to the bool type to detect refcount bugs in C
extensions which call Py_DECREF(Py_True) or Py_DECREF(Py_False) by
mistake.
Diffstat (limited to 'Objects/boolobject.c')
-rw-r--r-- | Objects/boolobject.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/Objects/boolobject.c b/Objects/boolobject.c index b786966..bc1666f 100644 --- a/Objects/boolobject.c +++ b/Objects/boolobject.c @@ -153,6 +153,13 @@ static PyNumberMethods bool_as_number = { 0, /* nb_index */ }; +static void _Py_NO_RETURN +bool_dealloc(PyObject* Py_UNUSED(ignore)) +{ + Py_FatalError("deallocating True or False likely caused by " + "a refcount bug in a C extension"); +} + /* The type object for bool. Note that this cannot be subclassed! */ PyTypeObject PyBool_Type = { @@ -160,7 +167,7 @@ PyTypeObject PyBool_Type = { "bool", sizeof(struct _longobject), 0, - 0, /* tp_dealloc */ + bool_dealloc, /* tp_dealloc */ 0, /* tp_vectorcall_offset */ 0, /* tp_getattr */ 0, /* tp_setattr */ |