summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2019-05-10 16:57:44 -0400
committerRusty Wagner <rusty@vector35.com>2019-05-10 16:57:44 -0400
commite5f190cddaaeac84f8a6ec733c2c11c17ec7f927 (patch)
tree92393a4d82c32e0abe9843f29dae769133a933a5
parent181cced4e6fe3a8b6e967cedc4ff84b53b3c8c92 (diff)
Fix some double free bugs in API
-rw-r--r--binaryninjaapi.h5
-rw-r--r--downloadprovider.cpp7
-rw-r--r--pluginmanager.cpp13
-rw-r--r--scriptingprovider.cpp7
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();
}