Skip to content

The lltrace feature can trigger infinite recursion via __repr__ #107758

Description

@gvanrossum

When turning on the low-level interpreter tracing feature (lltrace in ceval.c) it is quite easy to hit infinite recursion in dump_stack(), when an item on the stack being printed has a __repr__ method implemented in Python. (This is especially annoying when hardcodinglltrace = 1, since it will never get through the importlib bootstrap -- for some reason the __repr__ for module objects is (re-)implemented in Python.)

While I suppose we could fix this by adding some kind of protection against recursive calls to dump_stack(), I think it's better to just avoid calling into Python at all by writing most objects in the form <type at address> (with exceptions for ints etc.).

CC @sweeneyde, author of dump_stack() in gh-91463. (I don't want to just remove it -- it actually saved my bacon today.)

Linked PRs

Activity

  1. added a commit that references this issue on Aug 8, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    type-bugAn unexpected behavior, bug, or error

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions