[Python-checkins] gh-99845: _PyObject_DictPointer(): fix dictoffset cast (#99922)

vstinner webhook-mailer at python.org
Thu Dec 1 08:08:04 EST 2022


https://github.com/python/cpython/commit/9707bf228e008485a3fbb63aa7ee28cf88014f91
commit: 9707bf228e008485a3fbb63aa7ee28cf88014f91
branch: 3.11
author: Victor Stinner <vstinner at python.org>
committer: vstinner <vstinner at python.org>
date: 2022-12-01T14:07:58+01:00
summary:

gh-99845: _PyObject_DictPointer(): fix dictoffset cast (#99922)

Cast size_t to Py_ssize_t, rather than casting it to long. On 64-bit
Windows, long is 32-bit whereas Py_ssize_t is 64-bit.

files:
M Objects/object.c

diff --git a/Objects/object.c b/Objects/object.c
index 6a22f27de0b1..c4f2786c50a0 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -1076,8 +1076,9 @@ _PyObject_DictPointer(PyObject *obj)
             tsize = -tsize;
         }
         size_t size = _PyObject_VAR_SIZE(tp, tsize);
+        assert(size <= (size_t)PY_SSIZE_T_MAX);
+        dictoffset += (Py_ssize_t)size;
 
-        dictoffset += (long)size;
         _PyObject_ASSERT(obj, dictoffset > 0);
         _PyObject_ASSERT(obj, dictoffset % SIZEOF_VOID_P == 0);
     }



More information about the Python-checkins mailing list