diff options
| author | Rusty Wagner <rusty@vector35.com> | 2019-05-10 16:57:44 -0400 |
|---|---|---|
| committer | Rusty Wagner <rusty@vector35.com> | 2019-05-10 16:57:44 -0400 |
| commit | e5f190cddaaeac84f8a6ec733c2c11c17ec7f927 (patch) | |
| tree | 92393a4d82c32e0abe9843f29dae769133a933a5 | |
| parent | 181cced4e6fe3a8b6e967cedc4ff84b53b3c8c92 (diff) | |
Fix some double free bugs in API
| -rw-r--r-- | binaryninjaapi.h | 5 | ||||
| -rw-r--r-- | downloadprovider.cpp | 7 | ||||
| -rw-r--r-- | pluginmanager.cpp | 13 | ||||
| -rw-r--r-- | scriptingprovider.cpp | 7 |
4 files changed, 2 insertions, 30 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h index daf3db4f..064dd213 100644 --- a/binaryninjaapi.h +++ b/binaryninjaapi.h @@ -3981,7 +3981,6 @@ namespace BinaryNinja protected: DownloadInstance(DownloadProvider* provider); DownloadInstance(BNDownloadInstance* instance); - virtual ~DownloadInstance(); static void DestroyInstanceCallback(void* ctxt); static int PerformRequestCallback(void* ctxt, const char* url); @@ -4058,7 +4057,6 @@ namespace BinaryNinja protected: ScriptingInstance(ScriptingProvider* provider); ScriptingInstance(BNScriptingInstance* instance); - virtual ~ScriptingInstance(); static void DestroyInstanceCallback(void* ctxt); static BNScriptingProviderExecuteResult ExecuteScriptInputCallback(void* ctxt, const char* input); @@ -4275,7 +4273,6 @@ namespace BinaryNinja { public: Repository(BNRepository* repository); - ~Repository(); std::string GetUrl() const; std::string GetRepoPath() const; std::string GetLocalReference() const; @@ -4289,12 +4286,10 @@ namespace BinaryNinja class RepositoryManager: public CoreRefCountObject<BNRepositoryManager, BNNewRepositoryManagerReference, BNFreeRepositoryManager> { - bool m_core; public: RepositoryManager(const std::string& enabledPluginsPath); RepositoryManager(BNRepositoryManager* repoManager); RepositoryManager(); - ~RepositoryManager(); bool CheckForUpdates(); std::vector<Ref<Repository>> GetRepositories(); Ref<Repository> GetRepositoryByPath(const std::string& repoName); diff --git a/downloadprovider.cpp b/downloadprovider.cpp index 8e56bbf5..523397df 100644 --- a/downloadprovider.cpp +++ b/downloadprovider.cpp @@ -21,12 +21,6 @@ DownloadInstance::DownloadInstance(BNDownloadInstance* instance) } -DownloadInstance::~DownloadInstance() -{ - BNFreeDownloadInstance(m_object); -} - - void DownloadInstance::DestroyInstanceCallback(void* ctxt) { DownloadInstance* instance = (DownloadInstance*)ctxt; @@ -76,6 +70,7 @@ int DownloadInstance::PerformRequest(const string& url, BNDownloadInstanceOutput void DownloadInstance::DestroyInstance() { + ReleaseForRegistration(); } diff --git a/pluginmanager.cpp b/pluginmanager.cpp index 95c8ea15..be0d0d9d 100644 --- a/pluginmanager.cpp +++ b/pluginmanager.cpp @@ -108,10 +108,6 @@ Repository::Repository(BNRepository* r) m_object = r; } -Repository::~Repository() -{ - BNFreeRepository(m_object); -} string Repository::GetUrl() const { RETURN_STRING(BNRepositoryGetUrl(m_object)); @@ -158,29 +154,20 @@ string Repository::GetFullPath() const } RepositoryManager::RepositoryManager(const string& enabledPluginsPath) - :m_core(false) { m_object = BNCreateRepositoryManager(enabledPluginsPath.c_str()); } RepositoryManager::RepositoryManager(BNRepositoryManager* mgr) - :m_core(false) { m_object = mgr; } RepositoryManager::RepositoryManager() - :m_core(true) { m_object = BNGetRepositoryManager(); } -RepositoryManager::~RepositoryManager() -{ - if (!m_core) - BNFreeRepositoryManager(m_object); -} - bool RepositoryManager::CheckForUpdates() { return BNRepositoryManagerCheckForUpdates(m_object); diff --git a/scriptingprovider.cpp b/scriptingprovider.cpp index 6483c040..5e6d1a02 100644 --- a/scriptingprovider.cpp +++ b/scriptingprovider.cpp @@ -72,12 +72,6 @@ ScriptingInstance::ScriptingInstance(BNScriptingInstance* instance) } -ScriptingInstance::~ScriptingInstance() -{ - BNFreeScriptingInstance(m_object); -} - - void ScriptingInstance::DestroyInstanceCallback(void* ctxt) { ScriptingInstance* instance = (ScriptingInstance*)ctxt; @@ -136,6 +130,7 @@ void ScriptingInstance::SetCurrentSelectionCallback(void* ctxt, uint64_t begin, void ScriptingInstance::DestroyInstance() { + ReleaseForRegistration(); } |
