Skip to content

Commit 9416e3d

Browse files
zznopplafosse
authored andcommitted
Fix memory leak when querying FWN relationships
1 parent 0cb69de commit 9416e3d

File tree

4 files changed

+10
-10
lines changed

4 files changed

+10
-10
lines changed

binaryninjaapi.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19354,7 +19354,6 @@ namespace BinaryNinja {
1935419354
{
1935519355
public:
1935619356
FirmwareNinjaRelationship(Ref<BinaryView> view, BNFirmwareNinjaRelationship* relationship = nullptr);
19357-
~FirmwareNinjaRelationship();
1935819357

1935919358
/*! Set the primary relationship object to an address
1936019359

binaryninjacore.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
// Current ABI version for linking to the core. This is incremented any time
3838
// there are changes to the API that affect linking, including new functions,
3939
// new types, or modifications to existing functions or types.
40-
#define BN_CURRENT_CORE_ABI_VERSION 125
40+
#define BN_CURRENT_CORE_ABI_VERSION 126
4141

4242
// Minimum ABI version that is supported for loading of plugins. Plugins that
4343
// are linked to an ABI version less than this will not be able to load and
@@ -8429,6 +8429,7 @@ extern "C"
84298429
BINARYNINJACOREAPI BNFirmwareNinjaReferenceNode* BNFirmwareNinjaGetMemoryRegionReferenceTree(BNFirmwareNinja* fn, uint64_t start, uint64_t end, BNFirmwareNinjaFunctionMemoryAccesses** fma, int size, uint64_t* value);
84308430
BINARYNINJACOREAPI BNFirmwareNinjaReferenceNode* BNFirmwareNinjaGetAddressReferenceTree(BNFirmwareNinja* fn, uint64_t address, BNFirmwareNinjaFunctionMemoryAccesses** fma, int size, uint64_t* value);
84318431
BINARYNINJACOREAPI BNFirmwareNinjaRelationship** BNFirmwareNinjaQueryRelationships(BNFirmwareNinja* fn, size_t* count);
8432+
BINARYNINJACOREAPI void BNFirmwareNinjaFreeRelationships(BNFirmwareNinjaRelationship** relationships, size_t count);
84328433
BINARYNINJACOREAPI void BNFirmwareNinjaAddRelationship(BNFirmwareNinja* fn, BNFirmwareNinjaRelationship* rel);
84338434
BINARYNINJACOREAPI BNFirmwareNinjaRelationship* BNFirmwareNinjaGetRelationshipByGuid(BNFirmwareNinja* fn, const char* guid);
84348435
BINARYNINJACOREAPI void BNFirmwareNinjaRemoveRelationshipByGuid(BNFirmwareNinja* fn, const char* guid);

firmwareninja.cpp

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,6 @@ FirmwareNinjaRelationship::FirmwareNinjaRelationship(Ref<BinaryView> view, BNFir
6767
}
6868

6969

70-
FirmwareNinjaRelationship::~FirmwareNinjaRelationship()
71-
{
72-
BNFreeFirmwareNinjaRelationship(m_object);
73-
}
74-
75-
7670
void FirmwareNinjaRelationship::SetPrimaryAddress(uint64_t address)
7771
{
7872
BNFirmwareNinjaRelationshipSetPrimaryAddress(m_object, address);
@@ -679,6 +673,7 @@ std::vector<Ref<FirmwareNinjaRelationship>> FirmwareNinja::QueryRelationships()
679673
BNNewFirmwareNinjaRelationshipReference(bnRelationships[i])));
680674
}
681675

676+
BNFirmwareNinjaFreeRelationships(bnRelationships, count);
682677
return result;
683678
}
684679

python/firmwareninja.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -829,11 +829,16 @@ def relationships(self) -> list[FirmwareNinjaRelationship]:
829829
"""
830830

831831
count = ctypes.c_ulonglong(0)
832-
relationships = core.BNFirmwareNinjaQueryRelationships(self._handle, count)
832+
relationships = core.BNFirmwareNinjaQueryRelationships(self._handle, ctypes.byref(count))
833833
relationship_list = []
834834
for i in range(count.value):
835-
relationship_list.append(FirmwareNinjaRelationship(self._view, handle=relationships[i]))
835+
relationship_list.append(
836+
FirmwareNinjaRelationship(
837+
self._view, handle=core.BNNewFirmwareNinjaRelationshipReference(relationships[i])
838+
)
839+
)
836840

841+
core.BNFirmwareNinjaFreeRelationships(relationships, count.value)
837842
return relationship_list
838843

839844
def add_relationship(self, relationship: FirmwareNinjaRelationship) -> None:

0 commit comments

Comments
 (0)