Issue 25240: Stack overflow in reprlib causes a core dump (original) (raw)

I have a linked list implementation made of nested tuples with a custom repr:

def __repr__(self):
    return 'LinkedList(' + ', '.join(repr(v) for v in self) + ')'

(Iterating over a LinkedList returns just its contents.)

When using Raymond Hettinger's recipe for finding the size in memory of an object, https://code.activestate.com/recipes/577504-compute-memory-footprint-of-an-object-and-its-cont/?in=user-178123 , when I set verbose=True and exceed the recursion limit with reprlib.repr, I get the following error:

Fatal Python error: Cannot recover from stack overflow.

Current thread 0x00007fa24200d700 (most recent call first): File ".py", line 327 in repr File "/usr/lib/python3.4/reprlib.py", line 135 in repr_instance File "/usr/lib/python3.4/reprlib.py", line 64 in repr1 File "/usr/lib/python3.4/reprlib.py", line 54 in repr File "recipe.py", line 46 in sizeof [many instances of the above line repeated] ... Aborted (core dumped)

The line in the recipe it fails when recursing on is:

        print(s, type(o), repr(o), file=stderr)

On 2.7 it fails with a RuntimeError as I'd expect.

There was work on recursion in newer versions and several similar issues have been confirmed to be fixed. Since you didn't include a complete reproduction script, it's hard to know whether your case was fixed as well. I am therefore closing this, and request that you create a new issue with full reproduction information if you are still seeing this in a current version (>= 3.9).