summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorGlenn Smith <glenn@vector35.com>2022-07-19 18:27:50 -0400
committerGlenn Smith <glenn@vector35.com>2022-09-29 21:02:24 -0400
commit0725c6fbd58b3d40ffefdb319121a29ba4168517 (patch)
tree43321b54b45dd16154bc104886b5e3ef08017b75 /python
parent460656be13999759eb1eeb5bd9a868b34c0aea22 (diff)
Make DebugInfo::parse failable
Diffstat (limited to 'python')
-rw-r--r--python/debuginfo.py17
1 files changed, 10 insertions, 7 deletions
diff --git a/python/debuginfo.py b/python/debuginfo.py
index 7b5a6dbc..4a809643 100644
--- a/python/debuginfo.py
+++ b/python/debuginfo.py
@@ -107,16 +107,17 @@ class _DebugInfoParserMetaClass(type):
@staticmethod
def _parse_info(
debug_info: core.BNDebugInfo, view: core.BNBinaryView,
- callback: Callable[["DebugInfo", 'binaryview.BinaryView'], None]
- ) -> None:
+ callback: Callable[["DebugInfo", 'binaryview.BinaryView'], bool]
+ ) -> bool:
try:
file_metadata = filemetadata.FileMetadata(handle=core.BNGetFileForView(view))
view_obj = binaryview.BinaryView(file_metadata=file_metadata, handle=core.BNNewViewReference(view))
parser_ref = core.BNNewDebugInfoReference(debug_info)
assert parser_ref is not None, "core.BNNewDebugInfoReference returned None"
- callback(DebugInfo(parser_ref), view_obj)
+ return callback(DebugInfo(parser_ref), view_obj)
except:
log_error(traceback.format_exc())
+ return False
@classmethod
def register(
@@ -130,7 +131,7 @@ class _DebugInfoParserMetaClass(type):
ctypes.POINTER(core.BNBinaryView
))(lambda ctxt, view: cls._is_valid(view, is_valid))
parse_info_cb = ctypes.CFUNCTYPE(
- None, ctypes.c_void_p, ctypes.POINTER(core.BNDebugInfo), ctypes.POINTER(core.BNBinaryView)
+ ctypes.c_bool, ctypes.c_void_p, ctypes.POINTER(core.BNDebugInfo), ctypes.POINTER(core.BNBinaryView)
)(lambda ctxt, debug_info, view: cls._parse_info(debug_info, view, parse_info))
# Don't let our callbacks get garbage collected
@@ -216,17 +217,19 @@ class DebugInfoParser(object, metaclass=_DebugInfoParserMetaClass):
"""Returns whether this debug-info parser is valid for the provided binary view"""
return core.BNIsDebugInfoParserValidForView(self.handle, view.handle)
- def parse_debug_info(self, view: 'binaryview.BinaryView', debug_info: Optional["DebugInfo"] = None) -> "DebugInfo":
+ def parse_debug_info(self, view: 'binaryview.BinaryView', debug_info: Optional["DebugInfo"] = None) -> Optional["DebugInfo"]:
"""Returns a ``DebugInfo`` object populated with debug info by this debug-info parser. Only provide a ``DebugInfo`` object if you wish to append to the existing debug info"""
if isinstance(debug_info, DebugInfo):
parser = core.BNParseDebugInfo(self.handle, view.handle, debug_info.handle)
- assert parser is not None, "core.BNParseDebugInfo returned None"
+ if parser is None:
+ return None
parser_ref = core.BNNewDebugInfoReference(parser)
assert parser_ref is not None, "core.BNNewDebugInfoReference returned None"
return DebugInfo(parser_ref)
else:
parser = core.BNParseDebugInfo(self.handle, view.handle, None)
- assert parser is not None, "core.BNParseDebugInfo returned None"
+ if parser is None:
+ return None
return DebugInfo(parser)