Skip to content

[BUG] Recursion limit exceeded when mutating tar derivation tree #95

@Kristopher38

Description

@Kristopher38

Describe the bug
Hi, I'm hitting a recursion limit when I try to generate a tar derivation tree and then mutate it.

Traceback (most recent call last):
  File "/home/kris/fuzzing/run.py", line 12, in <module>
    print(solver.mutate(dt))
          ^^^^^^^^^^^^^^^^^
  File "/home/kris/fuzzing/venv/lib/python3.12/site-packages/isla/solver.py", line 908, in mutate
    mutated = mutator.mutate(inp)
              ^^^^^^^^^^^^^^^^^^^
  File "/home/kris/fuzzing/venv/lib/python3.12/site-packages/isla/mutator.py", line 77, in mutate
    self.__get_mutator()(inp).map(tap(inc_applied_mutations)).value_or(inp)
    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/kris/fuzzing/venv/lib/python3.12/site-packages/isla/mutator.py", line 165, in generalize_subtree
    self.fuzzer.expand_tree(
  File "/home/kris/fuzzing/venv/lib/python3.12/site-packages/isla/fuzzer.py", line 369, in expand_tree
    tree = self.expand_tree_with_strategy(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/kris/fuzzing/venv/lib/python3.12/site-packages/isla/fuzzer.py", line 335, in expand_tree_with_strategy
    limit is None or self.possible_expansions(tree) < limit
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/kris/fuzzing/venv/lib/python3.12/site-packages/isla/fuzzer.py", line 196, in possible_expansions
    return sum(self.possible_expansions(c) for c in node.children)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/kris/fuzzing/venv/lib/python3.12/site-packages/isla/fuzzer.py", line 196, in <genexpr>
    return sum(self.possible_expansions(c) for c in node.children)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  [...]
  File "/home/kris/fuzzing/venv/lib/python3.12/site-packages/isla/fuzzer.py", line 196, in possible_expansions
    return sum(self.possible_expansions(c) for c in node.children)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/kris/fuzzing/venv/lib/python3.12/site-packages/isla/fuzzer.py", line 196, in <genexpr>
    return sum(self.possible_expansions(c) for c in node.children)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^
RecursionError: maximum recursion depth exceeded

To Reproduce
Run this minimum reproducible example:

from isla_formalizations.tar import TAR_CONSTRAINTS, TAR_GRAMMAR
from isla.solver import ISLaSolver

solver = ISLaSolver(
    grammar=TAR_GRAMMAR,
    formula=TAR_CONSTRAINTS,
    max_number_free_instantiations=1,
    max_number_smt_instantiations=1
)
dt = solver.solve()
print(dt)
print(solver.mutate(dt))

Expected behavior
I should get a mutated derivation tree.

System/Installation Specs:

  • ISLa Version: latest main (commit 1a04b7833d2960cffe037fb88826111769fefbeb)
  • Python Version: 3.12
  • OS: 5.15.167-1-MANJARO x86_64 GNU/Linux

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions