Skip to content

Crash about overflowing max_stackdepth #5154

Closed

Description

@tekknolagi

Summary

I tried to run scrapscript.py with RustPython. It crashed. I reduced the input code with CReduce and then manually from ~4k lines to 21 lines.

Expected

No crash. In the full example, I expect the test suite to run. In the reduced example I expect nothing to happen.

Actual

# scrapscript.py
class LeftParen:
    pass
class RightParen:
    pass
class Lexer:
    def read_char(self) :
        return None
    def read_one(self) :
        while self:
            c = self.read_char()
            break
        else:
            return x
        {
                "(": LeftParen,
                ")": RightParen}
def tokenize():
    lexer = Lexer()
    while (lexer.read_one()) :
        pass
tokenize()
cedar% rustpython scrapscript.py test
[vm/src/frame.rs:1942] self = ExecutingFrame {
    code: code: <code object read_one at ??? file "scrapscript.py", line 8>,
    state: FrameState {
        stack: [
            [PyObject PyStr { value: "(", kind: Ascii, hash: -1 }],
            [PyObject [PyType LeftParen]],
            [PyObject PyStr { value: ")", kind: Ascii, hash: -1 }],
        ],
        blocks: [],
        lasti: 16,
    },
}
thread 'main' panicked at vm/src/frame.rs:1943:9:
tried to push value onto stack but overflowed max_stackdepth
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
cedar%

Activity

  1. youknowone commented on May 20, 2024

    @youknowone
    Member

    #5273 fixed a max_stackdepth calculation bug.

  2. tekknolagi commented on May 20, 2024

    @tekknolagi
    Author

    Building from main (5d6d1a6) and running still crashes in the same way.

  3. tekknolagi commented on May 20, 2024

    @tekknolagi
    Author

    Reduced further:

    # scrapscript.py
    def read_one() :
        self = 1
        while self:
            break
        else:
            return self
        {")": 2}
    read_one()
  4. tekknolagi commented on May 20, 2024

    @tekknolagi
    Author
    # scrapscript.py
    def f() :
        while 1:
            break
        else:
            return 2
        {1: 2}
    f()
  5. youknowone commented on Apr 20, 2026

    @youknowone
    Member

    reported as fixed by @changjoon-park

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

    C-bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions