summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorMason Reed <mason@vector35.com>2025-02-02 19:34:27 -0500
committerMason Reed <mason@vector35.com>2025-02-13 13:00:05 -0500
commitee5063327e3ddefaa59ee2ff90e6e9f54eca2076 (patch)
tree15fd185a398de6a08832839cd78f1fbe5393b86a /python
parent1014cb1872c06b7dbfbee55d4a0b4e6a5743ec6b (diff)
Fix leaking BNDataVariableAndName when calling BNGetDebugDataVariableBy functions
Diffstat (limited to 'python')
-rw-r--r--python/debuginfo.py23
1 files changed, 12 insertions, 11 deletions
diff --git a/python/debuginfo.py b/python/debuginfo.py
index f3172ae2..d187fb46 100644
--- a/python/debuginfo.py
+++ b/python/debuginfo.py
@@ -399,19 +399,20 @@ class DebugInfo(object):
return None
def get_data_variable_by_name(self, parser_name: str, name: str) -> Optional[Tuple[int, _types.Type]]:
- result = core.BNGetDebugDataVariableByName(self.handle, parser_name, name)
- if result is not None:
- core.BNFreeString(result.name)
- return (result.address, _types.Type.create(result.type))
- return None
+ name_and_var = core.BNDataVariableAndName()
+ if not core.BNGetDebugDataVariableByName(self.handle, parser_name, name, name_and_var):
+ return None
+ result = (name_and_var.address, _types.Type.create(core.BNNewTypeReference(name_and_var.type)))
+ core.BNFreeDataVariableAndName(name_and_var)
+ return result
def get_data_variable_by_address(self, parser_name: str, address: int) -> Optional[Tuple[str, _types.Type]]:
- name_and_var = core.BNGetDebugDataVariableByAddress(self.handle, parser_name, address)
- if name_and_var is not None:
- result = (str(name_and_var.name), _types.Type.create(name_and_var.type))
- core.BNFreeString(name_and_var.name)
- return result
- return None
+ name_and_var = core.BNDataVariableAndName()
+ if not core.BNGetDebugDataVariableByAddress(self.handle, parser_name, address, name_and_var):
+ return None
+ result = (str(name_and_var.name), _types.Type.create(core.BNNewTypeReference(name_and_var.type)))
+ core.BNFreeDataVariableAndName(name_and_var)
+ return result
def get_types_by_name(self, name: str) -> List[Tuple[str, _types.Type]]:
""" The first element in the Tuple returned in the list is the name of the debug info parser the type came from """