summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrandon Miller <brandon@vector35.com>2025-07-21 14:43:14 -0400
committerPeter LaFosse <peter@vector35.com>2025-07-22 09:20:59 -0400
commit9416e3dd8ea4dab4ab50e215e11f2cd7a4264948 (patch)
tree6c74f324af7d637d4e97681768c74dd5afdebd45
parent0cb69def773d6669aa27de55bbfbff3c73dde396 (diff)
Fix memory leak when querying FWN relationships
-rw-r--r--binaryninjaapi.h1
-rw-r--r--binaryninjacore.h3
-rw-r--r--firmwareninja.cpp7
-rw-r--r--python/firmwareninja.py9
4 files changed, 10 insertions, 10 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index 50312bbc..4566ddd3 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -19354,7 +19354,6 @@ namespace BinaryNinja {
{
public:
FirmwareNinjaRelationship(Ref<BinaryView> view, BNFirmwareNinjaRelationship* relationship = nullptr);
- ~FirmwareNinjaRelationship();
/*! Set the primary relationship object to an address
diff --git a/binaryninjacore.h b/binaryninjacore.h
index 93a15b54..852ee230 100644
--- a/binaryninjacore.h
+++ b/binaryninjacore.h
@@ -37,7 +37,7 @@
// Current ABI version for linking to the core. This is incremented any time
// there are changes to the API that affect linking, including new functions,
// new types, or modifications to existing functions or types.
-#define BN_CURRENT_CORE_ABI_VERSION 125
+#define BN_CURRENT_CORE_ABI_VERSION 126
// Minimum ABI version that is supported for loading of plugins. Plugins that
// are linked to an ABI version less than this will not be able to load and
@@ -8429,6 +8429,7 @@ extern "C"
BINARYNINJACOREAPI BNFirmwareNinjaReferenceNode* BNFirmwareNinjaGetMemoryRegionReferenceTree(BNFirmwareNinja* fn, uint64_t start, uint64_t end, BNFirmwareNinjaFunctionMemoryAccesses** fma, int size, uint64_t* value);
BINARYNINJACOREAPI BNFirmwareNinjaReferenceNode* BNFirmwareNinjaGetAddressReferenceTree(BNFirmwareNinja* fn, uint64_t address, BNFirmwareNinjaFunctionMemoryAccesses** fma, int size, uint64_t* value);
BINARYNINJACOREAPI BNFirmwareNinjaRelationship** BNFirmwareNinjaQueryRelationships(BNFirmwareNinja* fn, size_t* count);
+ BINARYNINJACOREAPI void BNFirmwareNinjaFreeRelationships(BNFirmwareNinjaRelationship** relationships, size_t count);
BINARYNINJACOREAPI void BNFirmwareNinjaAddRelationship(BNFirmwareNinja* fn, BNFirmwareNinjaRelationship* rel);
BINARYNINJACOREAPI BNFirmwareNinjaRelationship* BNFirmwareNinjaGetRelationshipByGuid(BNFirmwareNinja* fn, const char* guid);
BINARYNINJACOREAPI void BNFirmwareNinjaRemoveRelationshipByGuid(BNFirmwareNinja* fn, const char* guid);
diff --git a/firmwareninja.cpp b/firmwareninja.cpp
index fef4af70..02c62526 100644
--- a/firmwareninja.cpp
+++ b/firmwareninja.cpp
@@ -67,12 +67,6 @@ FirmwareNinjaRelationship::FirmwareNinjaRelationship(Ref<BinaryView> view, BNFir
}
-FirmwareNinjaRelationship::~FirmwareNinjaRelationship()
-{
- BNFreeFirmwareNinjaRelationship(m_object);
-}
-
-
void FirmwareNinjaRelationship::SetPrimaryAddress(uint64_t address)
{
BNFirmwareNinjaRelationshipSetPrimaryAddress(m_object, address);
@@ -679,6 +673,7 @@ std::vector<Ref<FirmwareNinjaRelationship>> FirmwareNinja::QueryRelationships()
BNNewFirmwareNinjaRelationshipReference(bnRelationships[i])));
}
+ BNFirmwareNinjaFreeRelationships(bnRelationships, count);
return result;
}
diff --git a/python/firmwareninja.py b/python/firmwareninja.py
index a48c8be1..c44aaf0a 100644
--- a/python/firmwareninja.py
+++ b/python/firmwareninja.py
@@ -829,11 +829,16 @@ class FirmwareNinja:
"""
count = ctypes.c_ulonglong(0)
- relationships = core.BNFirmwareNinjaQueryRelationships(self._handle, count)
+ relationships = core.BNFirmwareNinjaQueryRelationships(self._handle, ctypes.byref(count))
relationship_list = []
for i in range(count.value):
- relationship_list.append(FirmwareNinjaRelationship(self._view, handle=relationships[i]))
+ relationship_list.append(
+ FirmwareNinjaRelationship(
+ self._view, handle=core.BNNewFirmwareNinjaRelationshipReference(relationships[i])
+ )
+ )
+ core.BNFirmwareNinjaFreeRelationships(relationships, count.value)
return relationship_list
def add_relationship(self, relationship: FirmwareNinjaRelationship) -> None: