summaryrefslogtreecommitdiffstats
path: root/Objects/boolobject.c
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2021-08-31 16:05:15 (GMT)
committerGitHub <noreply@github.com>2021-08-31 16:05:15 (GMT)
commit4300352000beed22fb525ec45fd331918d206528 (patch)
treed85e14e3f00ce829258f890ee2e71698c9adf713 /Objects/boolobject.c
parent9a7ec2fcdee2da9e080ca459d4c240776df72567 (diff)
downloadcpython-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.c9
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 */