https://github.com/python/cpython/commit/406ffb5293a8c9ca315bf63de1ee36a9b33f9aaf
commit: 406ffb5293a8c9ca315bf63de1ee36a9b33f9aaf
branch: main
author: Mark Shannon <[email protected]>
committer: markshannon <[email protected]>
date: 2024-05-23T11:06:10+01:00
summary:
GH-117195: Avoid assertion error in `object.__sizeof__` (GH-117220)
files:
A Misc/NEWS.d/next/Core and
Builtins/2024-03-25-15-07-01.gh-issue-117195.OWakgD.rst
M Lib/test/test_long.py
M Objects/typeobject.c
diff --git a/Lib/test/test_long.py b/Lib/test/test_long.py
index d299c34cec076d..41b973da2c7df0 100644
--- a/Lib/test/test_long.py
+++ b/Lib/test/test_long.py
@@ -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()
diff --git a/Misc/NEWS.d/next/Core and
Builtins/2024-03-25-15-07-01.gh-issue-117195.OWakgD.rst b/Misc/NEWS.d/next/Core
and Builtins/2024-03-25-15-07-01.gh-issue-117195.OWakgD.rst
new file mode 100644
index 00000000000000..ae1e5acc5c333b
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and
Builtins/2024-03-25-15-07-01.gh-issue-117195.OWakgD.rst
@@ -0,0 +1,2 @@
+Avoid assertion failure for debug builds when calling
+``object.__sizeof__(1)``
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index 9f000d8c193bc5..11f9c570ac4971 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -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);
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]