diff options
| author | Brandon Miller <brandon@vector35.com> | 2025-07-21 14:43:14 -0400 |
|---|---|---|
| committer | Peter LaFosse <peter@vector35.com> | 2025-07-22 09:20:59 -0400 |
| commit | 9416e3dd8ea4dab4ab50e215e11f2cd7a4264948 (patch) | |
| tree | 6c74f324af7d637d4e97681768c74dd5afdebd45 | |
| parent | 0cb69def773d6669aa27de55bbfbff3c73dde396 (diff) | |
Fix memory leak when querying FWN relationships
| -rw-r--r-- | binaryninjaapi.h | 1 | ||||
| -rw-r--r-- | binaryninjacore.h | 3 | ||||
| -rw-r--r-- | firmwareninja.cpp | 7 | ||||
| -rw-r--r-- | python/firmwareninja.py | 9 |
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: |
