diff options
| author | Brian Potchik <brian@vector35.com> | 2023-08-17 17:47:55 -0400 |
|---|---|---|
| committer | Brian Potchik <brian@vector35.com> | 2023-08-17 17:47:55 -0400 |
| commit | 1174e544b0283bd30962d0a6a528af0aca43367c (patch) | |
| tree | 786db6e7c4bc309bf54a5e4e957c95510516a90e /scriptingprovider.cpp | |
| parent | df645681ec6c8c5e6121450cccd3ba8ab773f97b (diff) | |
Ensure consistent lifetimes for UI-accessible BinaryView instances in Python.
Diffstat (limited to 'scriptingprovider.cpp')
| -rw-r--r-- | scriptingprovider.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/scriptingprovider.cpp b/scriptingprovider.cpp index c3c4d615..1aefd4f7 100644 --- a/scriptingprovider.cpp +++ b/scriptingprovider.cpp @@ -63,6 +63,7 @@ ScriptingInstance::ScriptingInstance(ScriptingProvider* provider) cb.externalRefReleased = nullptr; cb.executeScriptInput = ExecuteScriptInputCallback; cb.cancelScriptInput = CancelScriptInputCallback; + cb.releaseBinaryView = ReleaseBinaryViewCallback; cb.setCurrentBinaryView = SetCurrentBinaryViewCallback; cb.setCurrentFunction = SetCurrentFunctionCallback; cb.setCurrentBasicBlock = SetCurrentBasicBlockCallback; @@ -102,6 +103,14 @@ void ScriptingInstance::CancelScriptInputCallback(void* ctxt) } +void ScriptingInstance::ReleaseBinaryViewCallback(void* ctxt, BNBinaryView* view) +{ + CallbackRef<ScriptingInstance> instance(ctxt); + Ref<BinaryView> object = view ? new BinaryView(BNNewViewReference(view)) : nullptr; + instance->ReleaseBinaryView(object); +} + + void ScriptingInstance::SetCurrentBinaryViewCallback(void* ctxt, BNBinaryView* view) { CallbackRef<ScriptingInstance> instance(ctxt); @@ -168,6 +177,10 @@ void ScriptingInstance::DestroyInstance() void ScriptingInstance::CancelScriptInput() {} + +void ScriptingInstance::ReleaseBinaryView(BinaryView*) {} + + void ScriptingInstance::SetCurrentBinaryView(BinaryView*) {} @@ -265,6 +278,12 @@ void CoreScriptingInstance::CancelScriptInput() } +void CoreScriptingInstance::ReleaseBinaryView(BinaryView* view) +{ + BNScriptingInstanceReleaseBinaryView(m_object, view ? view->GetObject() : nullptr); +} + + void CoreScriptingInstance::SetCurrentBinaryView(BinaryView* view) { BNSetScriptingInstanceCurrentBinaryView(m_object, view ? view->GetObject() : nullptr); |
