https://github.com/python/cpython/commit/d48616e08cbf069847026a2ee35017ad5cbe12a8
commit: d48616e08cbf069847026a2ee35017ad5cbe12a8
branch: main
author: Mark Shannon <[email protected]>
committer: ambv <[email protected]>
date: 2025-05-05T21:51:32+02:00
summary:
GH-133261: Make sure trashcan pointers look mortal -- 32 bit (GH-133450)
Make sure trashcan pointer look mortal -- 32 bit
files:
M Objects/object.c
diff --git a/Objects/object.c b/Objects/object.c
index e9a93f87be4cf7..723b0427e69251 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -2940,20 +2940,29 @@ pointer_to_safe_refcount(void *ptr)
{
uintptr_t full = (uintptr_t)ptr;
assert((full & 3) == 0);
+#if SIZEOF_VOID_P > 4
uint32_t refcnt = (uint32_t)full;
if (refcnt >= (uint32_t)_Py_IMMORTAL_MINIMUM_REFCNT) {
full = full - ((uintptr_t)_Py_IMMORTAL_MINIMUM_REFCNT) + 1;
}
return full + 2;
+#else
+ // Make the top two bits 0, so it appears mortal.
+ return (full >> 2) + 1;
+#endif
}
static void *
safe_refcount_to_pointer(uintptr_t refcnt)
{
+#if SIZEOF_VOID_P > 4
if (refcnt & 1) {
refcnt += _Py_IMMORTAL_MINIMUM_REFCNT - 1;
}
return (void *)(refcnt - 2);
+#else
+ return (void *)((refcnt -1) << 2);
+#endif
}
#endif
_______________________________________________
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]