From 4025361513068463390900635313910200542556 Mon Sep 17 00:00:00 2001 From: Glenn Smith Date: Tue, 14 Nov 2023 18:35:38 -0500 Subject: Fix a number of leaks and bad uses of free in the api See https://github.com/Vector35/binaryninja-api/issues/4751 --- function.cpp | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'function.cpp') diff --git a/function.cpp b/function.cpp index 4ef91860..b95ed211 100644 --- a/function.cpp +++ b/function.cpp @@ -538,6 +538,31 @@ BNPossibleValueSet PossibleValueSet::ToAPIObject() } +void PossibleValueSet::FreeAPIObject(BNPossibleValueSet* value) +{ + switch (value->state) + { + case SignedRangeValue: + case UnsignedRangeValue: + delete[] value->ranges; + break; + case LookupTableValue: + for (size_t i = 0; i < value->count; i ++) + { + delete[] value->table[i].fromValues; + } + delete[] value->table; + break; + case InSetOfValues: + case NotInSetOfValues: + delete[] value->valueSet; + break; + default: + break; + } +} + + DataBuffer Function::GetConstantData(BNRegisterValueType state, uint64_t value, size_t size) { return DataBuffer(BNGetConstantData(m_object, state, value, size)); @@ -2533,6 +2558,8 @@ void Function::SetUserVariableValue(const Variable& var, uint64_t defAddr, Possi auto valueObj = value.ToAPIObject(); BNSetUserVariableValue(m_object, &var_data, &defSite, &valueObj); + + PossibleValueSet::FreeAPIObject(&valueObj); } -- cgit v1.3.1