Skip to content

Commit c6ba779

Browse files
committed
Fix API memory leaks
1 parent becc9ba commit c6ba779

7 files changed

Lines changed: 8 additions & 11 deletions

File tree

‎python/debuginfo.py‎

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,7 @@ def __getitem__(cls, value: str) -> 'DebugInfoParser':
7474
parser = core.BNGetDebugInfoParserByName(str(value))
7575
if parser is None:
7676
raise KeyError(f"'{str(value)}' is not a valid debug-info parser")
77-
parser_ref = core.BNNewDebugInfoParserReference(parser)
78-
assert parser_ref is not None, "core.BNNewDebugInfoParserReference returned None"
79-
return DebugInfoParser(parser_ref)
77+
return DebugInfoParser(parser)
8078

8179
def __contains__(cls: '_DebugInfoParserMetaClass', name: object) -> bool:
8280
if not isinstance(name, str):
@@ -162,9 +160,7 @@ def register(
162160
_debug_info_parsers[len(_debug_info_parsers)] = (is_valid_cb, parse_info_cb)
163161
parser = core.BNRegisterDebugInfoParser(name, is_valid_cb, parse_info_cb, None)
164162
assert parser is not None, "core.BNRegisterDebugInfoParser is not None"
165-
parser_ref = core.BNNewDebugInfoParserReference(parser)
166-
assert parser_ref is not None, "core.BNNewDebugInfoParserReference returned None"
167-
return DebugInfoParser(parser_ref)
163+
return DebugInfoParser(parser)
168164

169165

170166
class DebugInfoParser(object, metaclass=_DebugInfoParserMetaClass):

‎python/typecontainer.py‎

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -362,10 +362,9 @@ def parse_type_string(
362362
_types.QualifiedName._from_core_struct(result_cpp.name),
363363
_types.Type.create(handle=core.BNNewTypeReference(result_cpp.type))
364364
)
365-
core.BNFreeQualifiedNameAndType(result_cpp)
366365
else:
367366
result = None
368-
core.BNFreeTypeParserResult(result_cpp)
367+
core.BNFreeQualifiedNameAndType(result_cpp)
369368

370369
errors = []
371370
for i in range(error_count.value):
@@ -427,4 +426,3 @@ def parse_types_from_source(self, source: str, file_name: str,
427426

428427
return result, errors
429428

430-

‎python/typeparser.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -649,9 +649,9 @@ def parse_type_string(
649649
types.QualifiedName._from_core_struct(result_cpp.name),
650650
types.Type.create(handle=core.BNNewTypeReference(result_cpp.type))
651651
)
652-
core.BNFreeQualifiedNameAndType(result_cpp)
653652
else:
654653
result = None
654+
core.BNFreeQualifiedNameAndType(result_cpp)
655655

656656
errors = []
657657
for i in range(error_count.value):

‎python/workflow.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -722,7 +722,7 @@ def register_activity(self, activity: Activity, subactivities: List[ActivityType
722722
handle = core.BNWorkflowRegisterActivity(self.handle, activity.handle, input_list, len(subactivities))
723723
if handle is None:
724724
return None
725-
return activity
725+
return Activity(handle=handle)
726726

727727
def contains(self, activity: ActivityType) -> bool:
728728
"""

‎rust/src/types/container.rs‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,7 @@ impl TypeContainer {
310310
if success {
311311
Ok(QualifiedNameAndType::from_owned_raw(result))
312312
} else {
313+
unsafe { BNFreeQualifiedNameAndType(&mut result) };
313314
assert!(!errors.is_null());
314315
Err(unsafe { Array::new(errors, error_count, ()) })
315316
}

‎rust/src/types/parser.rs‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@ impl TypeParser for CoreTypeParser {
201201
if result {
202202
Ok(QualifiedNameAndType::from_owned_raw(output))
203203
} else {
204+
unsafe { BNFreeQualifiedNameAndType(&mut output) };
204205
let errors: Array<TypeParserError> = unsafe { Array::new(errors, error_count, ()) };
205206
Err(errors.to_vec())
206207
}

‎typeparser.cpp‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -585,6 +585,7 @@ bool CoreTypeParser::ParseTypeString(const std::string& source, Ref<Platform> pl
585585

586586
if (!success)
587587
{
588+
BNFreeQualifiedNameAndType(&apiResult);
588589
return false;
589590
}
590591

0 commit comments

Comments
 (0)