From 85e6371753022a473e71def8ecaca411a360c1d4 Mon Sep 17 00:00:00 2001 From: Glenn Smith Date: Wed, 6 Jan 2021 15:17:00 -0500 Subject: Check for data tag (arch/func == null) in callbacks Fixes #2195 --- python/binaryview.py | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) (limited to 'python') diff --git a/python/binaryview.py b/python/binaryview.py index fb01122b..8678f4dc 100644 --- a/python/binaryview.py +++ b/python/binaryview.py @@ -605,8 +605,15 @@ class BinaryDataNotificationCallbacks(object): ref_type = tag_ref[0].refType auto_defined = tag_ref[0].autoDefined tag = Tag(core.BNNewTagReference(tag_ref[0].tag)) - arch = binaryninja.architecture.CoreArchitecture._from_cache(tag_ref[0].arch) - func = binaryninja.function.Function(self._view, core.BNNewFunctionReference(tag_ref[0].func)) + # Null for data tags (not in any arch or function) + if ctypes.cast(tag_ref[0].arch, ctypes.c_void_p).value is None: + arch = None + else: + arch = binaryninja.architecture.CoreArchitecture._from_cache(tag_ref[0].arch) + if ctypes.cast(tag_ref[0].func, ctypes.c_void_p).value is None: + func = None + else: + func = binaryninja.function.Function(self._view, core.BNNewFunctionReference(tag_ref[0].func)) addr = tag_ref[0].addr self._notify.tag_added(self._view, tag, ref_type, auto_defined, arch, func, addr) except: @@ -617,8 +624,15 @@ class BinaryDataNotificationCallbacks(object): ref_type = tag_ref[0].refType auto_defined = tag_ref[0].autoDefined tag = Tag(core.BNNewTagReference(tag_ref[0].tag)) - arch = binaryninja.architecture.CoreArchitecture._from_cache(tag_ref[0].arch) - func = binaryninja.function.Function(self._view, core.BNNewFunctionReference(tag_ref[0].func)) + # Null for data tags (not in any arch or function) + if ctypes.cast(tag_ref[0].arch, ctypes.c_void_p).value is None: + arch = None + else: + arch = binaryninja.architecture.CoreArchitecture._from_cache(tag_ref[0].arch) + if ctypes.cast(tag_ref[0].func, ctypes.c_void_p).value is None: + func = None + else: + func = binaryninja.function.Function(self._view, core.BNNewFunctionReference(tag_ref[0].func)) addr = tag_ref[0].addr self._notify.tag_updated(self._view, tag, ref_type, auto_defined, arch, func, addr) except: @@ -629,8 +643,15 @@ class BinaryDataNotificationCallbacks(object): ref_type = tag_ref[0].refType auto_defined = tag_ref[0].autoDefined tag = Tag(core.BNNewTagReference(tag_ref[0].tag)) - arch = binaryninja.architecture.CoreArchitecture._from_cache(tag_ref[0].arch) - func = binaryninja.function.Function(self._view, core.BNNewFunctionReference(tag_ref[0].func)) + # Null for data tags (not in any arch or function) + if ctypes.cast(tag_ref[0].arch, ctypes.c_void_p).value is None: + arch = None + else: + arch = binaryninja.architecture.CoreArchitecture._from_cache(tag_ref[0].arch) + if ctypes.cast(tag_ref[0].func, ctypes.c_void_p).value is None: + func = None + else: + func = binaryninja.function.Function(self._view, core.BNNewFunctionReference(tag_ref[0].func)) addr = tag_ref[0].addr self._notify.tag_removed(self._view, tag, ref_type, auto_defined, arch, func, addr) except: -- cgit v1.3.1