Skip to content

Deeply nested programs crash with a stack overflow while evaluating #8

@kms70847

Description

@kms70847

Consider the following program:

if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){
    print("OK.");
}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}

This should print "OK", but instead it crashes with a RecursionError.

This occurs because evaluate is naively recursive - in the worst case, it uses as much stack space as the maximum height of the abstract syntax tree.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions