From: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> Date: Wed, 11 Dec 2024 11:21:07 +0000 (+0100) Subject: [3.12] GH-117195: Avoid assertion error in `object.__sizeof__` (GH-117220) (#127605) X-Git-Tag: v3.12.9~166 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0964f9f1847bcbe90345eeafd65813d06db4ba3b;p=thirdparty%2FPython%2Fcpython.git [3.12] GH-117195: Avoid assertion error in `object.__sizeof__` (GH-117220) (#127605) GH-117195: Avoid assertion error in `object.__sizeof__` (GH-117220) (cherry picked from commit 406ffb5293a8c9ca315bf63de1ee36a9b33f9aaf) Co-authored-by: Mark Shannon --- diff --git a/Lib/test/test_long.py b/Lib/test/test_long.py index d299c34cec07..41b973da2c7d 100644 --- a/Lib/test/test_long.py +++ b/Lib/test/test_long.py @@ -1639,6 +1639,8 @@ class LongTest(unittest.TestCase): 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 000000000000..ae1e5acc5c33 --- /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 5bca4b4e7886..06857e368574 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -6462,8 +6462,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);