summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2022-12-01 13:32:15 (GMT)
committerGitHub <noreply@github.com>2022-12-01 13:32:15 (GMT)
commit64dae2efd5a083d342d744d40ca8d6ebb28bc771 (patch)
treecb4d7b116c54be3d7905e50c442d1fe84c584243
parent807b103bddc4d466f3cfe78aed74c891617c9631 (diff)
downloadcpython-64dae2efd5a083d342d744d40ca8d6ebb28bc771.zip
cpython-64dae2efd5a083d342d744d40ca8d6ebb28bc771.tar.gz
cpython-64dae2efd5a083d342d744d40ca8d6ebb28bc771.tar.bz2
gh-99845: _PyObject_DictPointer(): fix dictoffset cast (GH-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. (cherry picked from commit 9707bf228e008485a3fbb63aa7ee28cf88014f91) Co-authored-by: Victor Stinner <vstinner@python.org>
-rw-r--r--Objects/object.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/Objects/object.c b/Objects/object.c
index 6d80d6d..0bef2e9 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -1091,8 +1091,9 @@ _PyObject_GetDictPtr(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);
}