diff options
| author | Brian Potchik <brian@vector35.com> | 2018-08-10 10:23:11 -0400 |
|---|---|---|
| committer | Brian Potchik <brian@vector35.com> | 2018-08-10 10:23:11 -0400 |
| commit | 06a10105c9dd2512859597b848251f9c32037125 (patch) | |
| tree | 81c6024a897fe2ba13e677580614091fafb9f7e9 | |
| parent | a4cde026330c26bd45d87120adb7c21d7199192c (diff) | |
Fix ScriptingProvider reference counting and instance cleanup.
| -rw-r--r-- | binaryninjaapi.h | 2 | ||||
| -rw-r--r-- | scriptingprovider.cpp | 7 |
2 files changed, 9 insertions, 0 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h index e4504d1a..147a49fb 100644 --- a/binaryninjaapi.h +++ b/binaryninjaapi.h @@ -3743,6 +3743,7 @@ namespace BinaryNinja protected: ScriptingInstance(ScriptingProvider* provider); ScriptingInstance(BNScriptingInstance* instance); + virtual ~ScriptingInstance(); static void DestroyInstanceCallback(void* ctxt); static BNScriptingProviderExecuteResult ExecuteScriptInputCallback(void* ctxt, const char* input); @@ -3775,6 +3776,7 @@ namespace BinaryNinja { public: CoreScriptingInstance(BNScriptingInstance* instance); + virtual ~CoreScriptingInstance() {}; virtual BNScriptingProviderExecuteResult ExecuteScriptInput(const std::string& input) override; virtual void SetCurrentBinaryView(BinaryView* view) override; diff --git a/scriptingprovider.cpp b/scriptingprovider.cpp index 6a52e095..475d69ce 100644 --- a/scriptingprovider.cpp +++ b/scriptingprovider.cpp @@ -60,6 +60,7 @@ ScriptingInstance::ScriptingInstance(ScriptingProvider* provider) cb.setCurrentBasicBlock = SetCurrentBasicBlockCallback; cb.setCurrentAddress = SetCurrentAddressCallback; cb.setCurrentSelection = SetCurrentSelectionCallback; + AddRefForRegistration(); m_object = BNInitScriptingInstance(provider->GetObject(), &cb); } @@ -70,6 +71,12 @@ ScriptingInstance::ScriptingInstance(BNScriptingInstance* instance) } +ScriptingInstance::~ScriptingInstance() +{ + BNFreeScriptingInstance(m_object); +} + + void ScriptingInstance::DestroyInstanceCallback(void* ctxt) { ScriptingInstance* instance = (ScriptingInstance*)ctxt; |
