Crash report
Example from @chilaxan
corrupt=iter(lambda:0, 0)
classCstr:
def__hash__(self):
returnhash('iter')
def__eq__(self, other):
[*corrupt]
returnother=='iter'builtins=__builtins__.__dict__ifhasattr(__builtins__, '__dict__') else__builtins__oiter=builtins['iter']
delbuiltins['iter']
builtins[Cstr()] =oiterprint(corrupt.__reduce__())Expected result
This should return a valid __reduce__ tuple of the exhausted iterator. Instead behavior is inconsistent between segmentation faults, SystemErrors, and sometimes returning the iterator without being exhausted.
Error messages
- 3.11, windows,
PYTHONMALLOC=debug - 3.12.0a4, windows,
PYTHONMALLOC=debug
Windowsfatalexception: accessviolation>exitcode-1073741819 (0xC0000005)
- 3.12.04a4, windows, compiled with debug mode
print(corrupt.__reduce__())
^^^^^^^^^^^^^^^^^^^^SystemError: NULLobjectpassedtoPy_BuildValue
(<built-infunctioniter>, (<functionat0x7fb772c3c4a0>, 0))
>terminatedbysignalSIGSEGV (Addressboundaryerror)
(<built-infunctioniter>, (<functionat0x7f3480d71f80>, 0))
- 3.12.0a4, ubuntu,
PYTHONMALLOC=debug
FatalPythonerror: Segmentationfault
Linked PRs
Crash report
Example from @chilaxan
Expected result
This should return a valid
__reduce__tuple of the exhausted iterator. Instead behavior is inconsistent between segmentation faults, SystemErrors, and sometimes returning the iterator without being exhausted.Error messages
PYTHONMALLOC=debugPYTHONMALLOC=debugPYTHONMALLOC=debugLinked PRs
__reduce__when internal access ofbuiltins.__dict__exhausts the iterator #101769__reduce__when internal access ofbuiltins.__dict__exhausts the iterator (GH-101769) #102228__reduce__when internal access ofbuiltins.__dict__exhausts the iterator (GH-101769) #102229