Skip to content

Commit

Permalink
Fix hitting recursion limit when constructing DataDep graph on even m…
Browse files Browse the repository at this point in the history
…edium sized traces (angr#3280)
  • Loading branch information
novafacing authored Apr 5, 2022
1 parent 0baed8c commit 5d07750
Showing 1 changed file with 14 additions and 17 deletions.
31 changes: 14 additions & 17 deletions angr/analyses/data_dep/data_dependency_analysis.py
Original file line number Diff line number Diff line change
Expand Up @@ -445,34 +445,31 @@ def _parse_instruction(self) -> SimActLocation:
:returns: The instruction address and last statement index of the parsed instruction
"""

# ins_addr = loc.ins_addr if loc else None
loc = self._parse_statement()
while True:
loc = self._parse_statement()

if not self._actions or loc.ins_addr != self._peek().ins_addr:
# End of instruction
return loc
else:
return self._parse_instruction()
if not self._actions or loc.ins_addr != self._peek().ins_addr:
# End of instruction
return loc

def _parse_block(self):
"""
block -> instruction
block -> instruction block
"""

start_stmt_idx = self._peek().stmt_idx # Statement index of first statement in instruction
while True:
start_stmt_idx = self._peek().stmt_idx # Statement index of first statement in instruction

end_loc = self._parse_instruction()
end_loc = self._parse_instruction()

# Add most recently parsed instruction to instructions data structure
parsed_ins = ParsedInstruction(end_loc.ins_addr, start_stmt_idx, end_loc.stmt_idx)
self._parsed_ins_addrs.insert(0, parsed_ins)
# Add most recently parsed instruction to instructions data structure
parsed_ins = ParsedInstruction(end_loc.ins_addr, start_stmt_idx, end_loc.stmt_idx)
self._parsed_ins_addrs.insert(0, parsed_ins)

if self._actions and end_loc.bbl_addr == self._peek().bbl_addr:
# Block continues with at least one more instruction
self._parse_block()
else:
return
if not self._actions or end_loc.bbl_addr != self._peek().bbl_addr:
# Block continues with at least one more instruction
break

def _parse_blocks(self):
"""
Expand Down

0 comments on commit 5d07750

Please sign in to comment.