summaryrefslogtreecommitdiff
path: root/python/scriptingprovider.py
diff options
context:
space:
mode:
authorBrian Potchik <brian@vector35.com>2023-08-17 17:47:55 -0400
committerBrian Potchik <brian@vector35.com>2023-08-17 17:47:55 -0400
commit1174e544b0283bd30962d0a6a528af0aca43367c (patch)
tree786db6e7c4bc309bf54a5e4e957c95510516a90e /python/scriptingprovider.py
parentdf645681ec6c8c5e6121450cccd3ba8ab773f97b (diff)
Ensure consistent lifetimes for UI-accessible BinaryView instances in Python.
Diffstat (limited to 'python/scriptingprovider.py')
-rw-r--r--python/scriptingprovider.py8
1 files changed, 8 insertions, 0 deletions
diff --git a/python/scriptingprovider.py b/python/scriptingprovider.py
index 10f97f0e..5e746558 100644
--- a/python/scriptingprovider.py
+++ b/python/scriptingprovider.py
@@ -138,6 +138,7 @@ class ScriptingInstance:
self._cb.executeScriptInput = self._cb.executeScriptInput.__class__(self._execute_script_input)
self._cb.executeScriptInputFromFilename = self._cb.executeScriptInputFromFilename.__class__(self._execute_script_input_from_filename)
self._cb.cancelScriptInput = self._cb.cancelScriptInput.__class__(self._cancel_script_input)
+ self._cb.releaseBinaryView = self._cb.releaseBinaryView.__class__(self._release_binary_view)
self._cb.setCurrentBinaryView = self._cb.setCurrentBinaryView.__class__(self._set_current_binary_view)
self._cb.setCurrentFunction = self._cb.setCurrentFunction.__class__(self._set_current_function)
self._cb.setCurrentBasicBlock = self._cb.setCurrentBasicBlock.__class__(self._set_current_basic_block)
@@ -189,10 +190,17 @@ class ScriptingInstance:
log_error(traceback.format_exc())
return ScriptingProviderExecuteResult.ScriptExecutionCancelled
+ def _release_binary_view(self, ctxt, view):
+ try:
+ binaryview.BinaryView._cache_remove(view)
+ except:
+ log_error(traceback.format_exc())
+
def _set_current_binary_view(self, ctxt, view):
try:
if view:
view = binaryview.BinaryView(handle=core.BNNewViewReference(view))
+ binaryview.BinaryView._cache_insert(view)
else:
view = None
self.perform_set_current_binary_view(view)