Skip to content

Commit

Permalink
bpo-38400 Don't check for NULL linked list pointers in _PyObject_IsFr…
Browse files Browse the repository at this point in the history
…eed (GH-16630)

Some objects like Py_None are not initialized with conventional means
that prepare the circular linked list pointers, leaving them unlinked
from the rest of the objects. For those objects, NULL pointers does
not mean that they are freed, so we need to skip the check in those
cases.
  • Loading branch information
pablogsal committed Oct 7, 2019
1 parent 1b18455 commit 36e33c3
Showing 1 changed file with 4 additions and 1 deletion.
5 changes: 4 additions & 1 deletion Objects/object.c
Expand Up @@ -454,9 +454,12 @@ _PyObject_IsFreed(PyObject *op)
/* ignore op->ob_ref: its value can have be modified
by Py_INCREF() and Py_DECREF(). */
#ifdef Py_TRACE_REFS
if (_PyMem_IsPtrFreed(op->_ob_next) || _PyMem_IsPtrFreed(op->_ob_prev)) {
if (op->_ob_next != NULL && _PyMem_IsPtrFreed(op->_ob_next)) {
return 1;
}
if (op->_ob_prev != NULL && _PyMem_IsPtrFreed(op->_ob_prev)) {
return 1;
}
#endif
return 0;
}
Expand Down

0 comments on commit 36e33c3

Please sign in to comment.