Skip to content

Commit

Permalink
GH-117195: Avoid assertion error in object.__sizeof__ (GH-117220)
Browse files Browse the repository at this point in the history
  • Loading branch information
markshannon committed May 23, 2024
1 parent c85e352 commit 406ffb5
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 2 deletions.
2 changes: 2 additions & 0 deletions Lib/test/test_long.py
Original file line number Diff line number Diff line change
Expand Up @@ -1639,6 +1639,8 @@ class MyInt(int):
MyInt.__basicsize__ + MyInt.__itemsize__ * ndigits
)

# GH-117195 -- This shouldn't crash
object.__sizeof__(1)

if __name__ == "__main__":
unittest.main()
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Avoid assertion failure for debug builds when calling
``object.__sizeof__(1)``
7 changes: 5 additions & 2 deletions Objects/typeobject.c
Original file line number Diff line number Diff line change
Expand Up @@ -7144,8 +7144,11 @@ object___sizeof___impl(PyObject *self)

res = 0;
isize = Py_TYPE(self)->tp_itemsize;
if (isize > 0)
res = Py_SIZE(self) * isize;
if (isize > 0) {
/* 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;

return PyLong_FromSsize_t(res);
Expand Down

0 comments on commit 406ffb5

Please sign in to comment.