diff --git a/python/debuginfo.py b/python/debuginfo.py index ec676b7e0..bd8d2dbad 100644 --- a/python/debuginfo.py +++ b/python/debuginfo.py @@ -74,9 +74,7 @@ def __getitem__(cls, value: str) -> 'DebugInfoParser': parser = core.BNGetDebugInfoParserByName(str(value)) if parser is None: raise KeyError(f"'{str(value)}' is not a valid debug-info parser") - parser_ref = core.BNNewDebugInfoParserReference(parser) - assert parser_ref is not None, "core.BNNewDebugInfoParserReference returned None" - return DebugInfoParser(parser_ref) + return DebugInfoParser(parser) def __contains__(cls: '_DebugInfoParserMetaClass', name: object) -> bool: if not isinstance(name, str): @@ -162,9 +160,7 @@ def register( _debug_info_parsers[len(_debug_info_parsers)] = (is_valid_cb, parse_info_cb) parser = core.BNRegisterDebugInfoParser(name, is_valid_cb, parse_info_cb, None) assert parser is not None, "core.BNRegisterDebugInfoParser is not None" - parser_ref = core.BNNewDebugInfoParserReference(parser) - assert parser_ref is not None, "core.BNNewDebugInfoParserReference returned None" - return DebugInfoParser(parser_ref) + return DebugInfoParser(parser) class DebugInfoParser(object, metaclass=_DebugInfoParserMetaClass): diff --git a/python/typecontainer.py b/python/typecontainer.py index 6b3fe891d..f4d6b303c 100644 --- a/python/typecontainer.py +++ b/python/typecontainer.py @@ -362,10 +362,9 @@ def parse_type_string( _types.QualifiedName._from_core_struct(result_cpp.name), _types.Type.create(handle=core.BNNewTypeReference(result_cpp.type)) ) - core.BNFreeQualifiedNameAndType(result_cpp) else: result = None - core.BNFreeTypeParserResult(result_cpp) + core.BNFreeQualifiedNameAndType(result_cpp) errors = [] for i in range(error_count.value): @@ -427,4 +426,3 @@ def parse_types_from_source(self, source: str, file_name: str, return result, errors - diff --git a/python/typeparser.py b/python/typeparser.py index 4d251db3a..6f57189b4 100644 --- a/python/typeparser.py +++ b/python/typeparser.py @@ -649,9 +649,9 @@ def parse_type_string( types.QualifiedName._from_core_struct(result_cpp.name), types.Type.create(handle=core.BNNewTypeReference(result_cpp.type)) ) - core.BNFreeQualifiedNameAndType(result_cpp) else: result = None + core.BNFreeQualifiedNameAndType(result_cpp) errors = [] for i in range(error_count.value): diff --git a/python/workflow.py b/python/workflow.py index 1d85e7d09..638667109 100644 --- a/python/workflow.py +++ b/python/workflow.py @@ -722,7 +722,7 @@ def register_activity(self, activity: Activity, subactivities: List[ActivityType handle = core.BNWorkflowRegisterActivity(self.handle, activity.handle, input_list, len(subactivities)) if handle is None: return None - return activity + return Activity(handle=handle) def contains(self, activity: ActivityType) -> bool: """ diff --git a/rust/src/types/container.rs b/rust/src/types/container.rs index 5096ac78c..495a85d2c 100644 --- a/rust/src/types/container.rs +++ b/rust/src/types/container.rs @@ -310,6 +310,7 @@ impl TypeContainer { if success { Ok(QualifiedNameAndType::from_owned_raw(result)) } else { + unsafe { BNFreeQualifiedNameAndType(&mut result) }; assert!(!errors.is_null()); Err(unsafe { Array::new(errors, error_count, ()) }) } diff --git a/rust/src/types/parser.rs b/rust/src/types/parser.rs index 9bcdf41aa..308154dd0 100644 --- a/rust/src/types/parser.rs +++ b/rust/src/types/parser.rs @@ -201,6 +201,7 @@ impl TypeParser for CoreTypeParser { if result { Ok(QualifiedNameAndType::from_owned_raw(output)) } else { + unsafe { BNFreeQualifiedNameAndType(&mut output) }; let errors: Array = unsafe { Array::new(errors, error_count, ()) }; Err(errors.to_vec()) } diff --git a/typeparser.cpp b/typeparser.cpp index 18ecac084..f1a73bb45 100644 --- a/typeparser.cpp +++ b/typeparser.cpp @@ -585,6 +585,7 @@ bool CoreTypeParser::ParseTypeString(const std::string& source, Ref pl if (!success) { + BNFreeQualifiedNameAndType(&apiResult); return false; }