From 1174e544b0283bd30962d0a6a528af0aca43367c Mon Sep 17 00:00:00 2001 From: Brian Potchik Date: Thu, 17 Aug 2023 17:47:55 -0400 Subject: Ensure consistent lifetimes for UI-accessible BinaryView instances in Python. --- scriptingprovider.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'scriptingprovider.cpp') 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 instance(ctxt); + Ref object = view ? new BinaryView(BNNewViewReference(view)) : nullptr; + instance->ReleaseBinaryView(object); +} + + void ScriptingInstance::SetCurrentBinaryViewCallback(void* ctxt, BNBinaryView* view) { CallbackRef 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); -- cgit v1.3.1