diff options
| author | Glenn Smith <glenn@vector35.com> | 2021-01-06 15:17:00 -0500 |
|---|---|---|
| committer | Glenn Smith <glenn@vector35.com> | 2021-01-06 15:17:00 -0500 |
| commit | 85e6371753022a473e71def8ecaca411a360c1d4 (patch) | |
| tree | 53563feb9257b285beb5c8c14ca05be17bd3b129 /python | |
| parent | 6473e803d822abdabe150ec9ad3b3038eef45de3 (diff) | |
Check for data tag (arch/func == null) in callbacks
Fixes #2195
Diffstat (limited to 'python')
| -rw-r--r-- | python/binaryview.py | 33 |
1 files changed, 27 insertions, 6 deletions
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: |
