summaryrefslogtreecommitdiff
path: root/architecture.cpp
diff options
context:
space:
mode:
authorBrandon Miller <brandon@vector35.com>2026-06-01 14:16:02 -0400
committerBrandon Miller <brandon@vector35.com>2026-06-02 16:31:18 -0400
commit75c344dcea30b1beb5680e46a7557c26fd7286e4 (patch)
tree0d951476e562250e32569b90e008975d46faaf9e /architecture.cpp
parent5fe1980a95f956c1f58974de27fbbfbfac1258af (diff)
Fix unbounded recursion in function inlining
Fix crash that occurs when two functions that directly call each other are both marked "inline during analysis"
Diffstat (limited to 'architecture.cpp')
-rw-r--r--architecture.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/architecture.cpp b/architecture.cpp
index 8bb60129..0f3649cf 100644
--- a/architecture.cpp
+++ b/architecture.cpp
@@ -622,7 +622,12 @@ Ref<LowLevelILFunction> FunctionLifterContext::GetForeignFunctionLiftedIL(Ref<Fu
size_t inlinedCallsCount = m_inlinedCalls.size();
uint64_t* inlinedCalls = nullptr;
if (inlinedCallsCount)
+ {
inlinedCalls = new uint64_t[inlinedCallsCount];
+ size_t i = 0;
+ for (uint64_t addr : m_inlinedCalls)
+ inlinedCalls[i++] = addr;
+ }
BNLowLevelILFunction* il =
BNGetForeignFunctionLiftedIL(func->GetObject(), m_logger->GetObject(), inlinedCallsCount, inlinedCalls);