GH-117195: Avoid assertion error in `object.__sizeof__` (GH-117220)

This commit is contained in:
Mark Shannon 2024-05-23 11:06:10 +01:00 committed by GitHub
parent c85e352673
commit 406ffb5293
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 9 additions and 2 deletions

View File

@ -1639,6 +1639,8 @@ class LongTest(unittest.TestCase):
MyInt.__basicsize__ + MyInt.__itemsize__ * ndigits MyInt.__basicsize__ + MyInt.__itemsize__ * ndigits
) )
# GH-117195 -- This shouldn't crash
object.__sizeof__(1)
if __name__ == "__main__": if __name__ == "__main__":
unittest.main() unittest.main()

View File

@ -0,0 +1,2 @@
Avoid assertion failure for debug builds when calling
``object.__sizeof__(1)``

View File

@ -7144,8 +7144,11 @@ object___sizeof___impl(PyObject *self)
res = 0; res = 0;
isize = Py_TYPE(self)->tp_itemsize; isize = Py_TYPE(self)->tp_itemsize;
if (isize > 0) if (isize > 0) {
res = Py_SIZE(self) * isize; /* This assumes that ob_size is valid if tp_itemsize is not 0,
which isn't true for PyLongObject. */
res = _PyVarObject_CAST(self)->ob_size * isize;
}
res += Py_TYPE(self)->tp_basicsize; res += Py_TYPE(self)->tp_basicsize;
return PyLong_FromSsize_t(res); return PyLong_FromSsize_t(res);