Skip to content

Commit 3005c6d

Browse files
committed
Adjust a test to cope with 3.14 tuple changes
PyTupleObject now includes a cached hash. Adjust our heuristics about how to find the items inside a tuple.
1 parent d3e5e3f commit 3005c6d

File tree

1 file changed

+19
-17
lines changed

1 file changed

+19
-17
lines changed

tests/integration/test_local_variables.py

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -578,35 +578,37 @@ class ListObject(ctypes.Structure):
578578
("ob_item", ctypes.c_void_p),
579579
]
580580
581-
class TupleObject(ctypes.Structure):
582-
_fields_ = [
583-
("ob_type", ctypes.c_void_p),
584-
("ob_size", ctypes.c_ssize_t),
585-
]
586-
587-
class TupleItems(ctypes.Structure):
588-
_fields_ = [
589-
("ob_item0", ctypes.c_void_p),
590-
("ob_item1", ctypes.c_void_p),
591-
]
581+
if sys.version_info >= (3, 14):
582+
class TupleObject(ctypes.Structure):
583+
_fields_ = [
584+
("ob_type", ctypes.c_void_p),
585+
("ob_size", ctypes.c_ssize_t),
586+
("ob_hash", ctypes.c_ssize_t),
587+
("ob_item0", ctypes.c_void_p),
588+
("ob_item1", ctypes.c_void_p),
589+
]
590+
else:
591+
class TupleObject(ctypes.Structure):
592+
_fields_ = [
593+
("ob_type", ctypes.c_void_p),
594+
("ob_size", ctypes.c_ssize_t),
595+
("ob_item0", ctypes.c_void_p),
596+
("ob_item1", ctypes.c_void_p),
597+
]
592598
593599
def ob_type_field(obj):
594600
# Assume ob_type is the last field of PyObject
595601
return id(obj) + sys.getsizeof(None) - ctypes.sizeof(ctypes.c_void_p)
596602
597-
def tuple_ob_items_field(tup):
598-
assert isinstance(tup, tuple)
599-
return id(tup) + sys.getsizeof(()) - sys.getsizeof(None)
600-
601603
def main():
602604
bad_type = (1, 2, 3)
603605
bad_elem = (4, 5, 6)
604606
nullelem = (7, 8, 9)
605607
bad_list = [0, 1, 2]
606608
607609
TupleObject.from_address(ob_type_field(bad_type)).ob_type = 0xded
608-
TupleItems.from_address(tuple_ob_items_field(bad_elem)).ob_item1 = 0xbad
609-
TupleItems.from_address(tuple_ob_items_field(nullelem)).ob_item1 = 0x0
610+
TupleObject.from_address(ob_type_field(bad_elem)).ob_item1 = 0xbad
611+
TupleObject.from_address(ob_type_field(nullelem)).ob_item1 = 0x0
610612
ListObject.from_address(ob_type_field(bad_list)).ob_item = 0x0
611613
612614
fifo = sys.argv[1]

0 commit comments

Comments
 (0)