summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--activity.cpp2
-rw-r--r--binaryninjaapi.h2
-rw-r--r--binaryview.cpp6
-rw-r--r--debuginfo.cpp5
-rw-r--r--externallibrary.cpp7
-rw-r--r--firmwareninja.cpp17
-rw-r--r--pluginmanager.cpp2
-rw-r--r--typecontainer.cpp11
-rw-r--r--typeparser.cpp4
-rw-r--r--workflow.cpp58
10 files changed, 54 insertions, 60 deletions
diff --git a/activity.cpp b/activity.cpp
index 0bb5858f..2b5ef140 100644
--- a/activity.cpp
+++ b/activity.cpp
@@ -19,7 +19,7 @@ Activity::Activity(const string& configuration, const std::function<void(Ref<Ana
Activity::Activity(BNActivity* activity)
{
// LogError("API-Side Activity Constructed!");
- m_object = BNNewActivityReference(activity);
+ m_object = activity;
}
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index 249d5ae6..158b1a21 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -12069,6 +12069,7 @@ namespace BinaryNinja {
Ref<BinaryView> m_view;
Ref<Function> m_function;
+ std::string PostRawRequest(const char* request);
bool PostRequest(const std::string& command);
public:
@@ -21276,7 +21277,6 @@ namespace BinaryNinja {
{
public:
FirmwareNinjaReferenceNode(BNFirmwareNinjaReferenceNode* node);
- ~FirmwareNinjaReferenceNode();
/*! Returns true if the reference tree node contains a function
diff --git a/binaryview.cpp b/binaryview.cpp
index c1886ab9..6c4312c0 100644
--- a/binaryview.cpp
+++ b/binaryview.cpp
@@ -5728,7 +5728,7 @@ Ref<ExternalLibrary> BinaryView::GetExternalLibrary(const std::string& name)
BNExternalLibrary* lib = BNBinaryViewGetExternalLibrary(m_object, name.c_str());
if (!lib)
return nullptr;
- return new ExternalLibrary(BNNewExternalLibraryReference(lib));
+ return new ExternalLibrary(lib);
}
@@ -5759,7 +5759,7 @@ Ref<ExternalLocation> BinaryView::AddExternalLocation(Ref<Symbol> sourceSymbol,
if (!loc)
return nullptr;
- return new ExternalLocation(BNNewExternalLocationReference(loc));
+ return new ExternalLocation(loc);
}
@@ -5774,7 +5774,7 @@ Ref<ExternalLocation> BinaryView::GetExternalLocation(Ref<Symbol> sourceSymbol)
BNExternalLocation* loc = BNBinaryViewGetExternalLocation(m_object, sourceSymbol->GetObject());
if (!loc)
return nullptr;
- return new ExternalLocation(BNNewExternalLocationReference(loc));
+ return new ExternalLocation(loc);
}
diff --git a/debuginfo.cpp b/debuginfo.cpp
index e0ab328c..3a337bc7 100644
--- a/debuginfo.cpp
+++ b/debuginfo.cpp
@@ -371,7 +371,7 @@ Ref<DebugInfoParser> DebugInfoParser::GetByName(const string& name)
{
BNDebugInfoParser* parser = BNGetDebugInfoParserByName(name.c_str());
if (parser)
- return new DebugInfoParser(BNNewDebugInfoParserReference(parser));
+ return new DebugInfoParser(parser);
return nullptr;
}
@@ -472,6 +472,5 @@ bool CustomDebugInfoParser::ParseCallback(void* ctxt, BNDebugInfo* debugInfo, BN
CustomDebugInfoParser::CustomDebugInfoParser(const string& name) :
- DebugInfoParser(
- BNNewDebugInfoParserReference(BNRegisterDebugInfoParser(name.c_str(), IsValidCallback, ParseCallback, this)))
+ DebugInfoParser(BNRegisterDebugInfoParser(name.c_str(), IsValidCallback, ParseCallback, this))
{}
diff --git a/externallibrary.cpp b/externallibrary.cpp
index a2e0573a..f1b34f1a 100644
--- a/externallibrary.cpp
+++ b/externallibrary.cpp
@@ -44,7 +44,7 @@ Ref<ProjectFile> ExternalLibrary::GetBackingFile() const
BNProjectFile* file = BNExternalLibraryGetBackingFile(m_object);
if (!file)
return nullptr;
- return new ProjectFile(BNNewProjectFileReference(file));
+ return new ProjectFile(file);
}
@@ -81,7 +81,10 @@ std::optional<std::string> ExternalLocation::GetTargetSymbol()
{
if (BNExternalLocationHasTargetSymbol(m_object))
{
- return BNExternalLocationGetTargetSymbol(m_object);
+ char* sym = BNExternalLocationGetTargetSymbol(m_object);
+ std::string result = sym;
+ BNFreeString(sym);
+ return result;
}
return {};
}
diff --git a/firmwareninja.cpp b/firmwareninja.cpp
index 501ef2c5..d39923b5 100644
--- a/firmwareninja.cpp
+++ b/firmwareninja.cpp
@@ -63,7 +63,7 @@ FirmwareNinjaRelationship::FirmwareNinjaRelationship(Ref<BinaryView> view, BNFir
if (handle)
m_object = handle;
else
- m_object = BNNewFirmwareNinjaRelationshipReference(BNCreateFirmwareNinjaRelationship(view->GetObject()));
+ m_object = BNCreateFirmwareNinjaRelationship(view->GetObject());
}
@@ -204,7 +204,7 @@ Ref<ProjectFile> FirmwareNinjaRelationship::GetSecondaryExternalProjectFile() co
if (!bnProjectFile)
return nullptr;
- return new ProjectFile(BNNewProjectFileReference(bnProjectFile));
+ return new ProjectFile(bnProjectFile);
}
@@ -305,12 +305,6 @@ FirmwareNinjaReferenceNode::FirmwareNinjaReferenceNode(BNFirmwareNinjaReferenceN
}
-FirmwareNinjaReferenceNode::~FirmwareNinjaReferenceNode()
-{
- BNFreeFirmwareNinjaReferenceNode(m_object);
-}
-
-
bool FirmwareNinjaReferenceNode::IsFunction()
{
return BNFirmwareNinjaReferenceNodeIsFunction(m_object);
@@ -366,6 +360,7 @@ std::vector<Ref<FirmwareNinjaReferenceNode>> FirmwareNinjaReferenceNode::GetChil
BNNewFirmwareNinjaReferenceNodeReference(bnChildren[i])));
}
+ BNFreeFirmwareNinjaReferenceNodes(bnChildren, count);
return result;
}
@@ -623,7 +618,7 @@ Ref<FirmwareNinjaReferenceNode> FirmwareNinja::GetReferenceTree(
if (!bnReferenceTree)
return nullptr;
- return new FirmwareNinjaReferenceNode(BNNewFirmwareNinjaReferenceNodeReference(bnReferenceTree));
+ return new FirmwareNinjaReferenceNode(bnReferenceTree);
}
@@ -641,7 +636,7 @@ Ref<FirmwareNinjaReferenceNode> FirmwareNinja::GetReferenceTree(
if (!bnReferenceTree)
return nullptr;
- return new FirmwareNinjaReferenceNode(BNNewFirmwareNinjaReferenceNodeReference(bnReferenceTree));
+ return new FirmwareNinjaReferenceNode(bnReferenceTree);
}
@@ -658,7 +653,7 @@ Ref<FirmwareNinjaReferenceNode> FirmwareNinja::GetReferenceTree(
if (!bnReferenceTree)
return nullptr;
- return new FirmwareNinjaReferenceNode(BNNewFirmwareNinjaReferenceNodeReference(bnReferenceTree));
+ return new FirmwareNinjaReferenceNode(bnReferenceTree);
}
diff --git a/pluginmanager.cpp b/pluginmanager.cpp
index 1ce77606..57eac985 100644
--- a/pluginmanager.cpp
+++ b/pluginmanager.cpp
@@ -297,7 +297,7 @@ bool Extension::AreDependenciesBeingInstalled() const
string Extension::GetCreationDate()
{
- return BNPluginGetCurrentVersionCreationDate(m_object);
+ RETURN_STRING(BNPluginGetCurrentVersionCreationDate(m_object));
}
string Extension::GetProjectData()
diff --git a/typecontainer.cpp b/typecontainer.cpp
index 3ecf6aa5..cbff21ee 100644
--- a/typecontainer.cpp
+++ b/typecontainer.cpp
@@ -80,6 +80,10 @@ TypeContainer::TypeContainer(const TypeContainer& other)
TypeContainer& TypeContainer::operator=(const TypeContainer& other)
{
+ if (this == &other)
+ return *this;
+ if (m_object)
+ BNFreeTypeContainer(m_object);
m_object = BNDuplicateTypeContainer(other.m_object);
return *this;
}
@@ -87,7 +91,11 @@ TypeContainer& TypeContainer::operator=(const TypeContainer& other)
TypeContainer& TypeContainer::operator=(TypeContainer&& other)
{
- m_object = std::move(other.m_object);
+ if (this == &other)
+ return *this;
+ if (m_object)
+ BNFreeTypeContainer(m_object);
+ m_object = other.m_object;
other.m_object = nullptr;
return *this;
}
@@ -370,6 +378,7 @@ bool TypeContainer::ParseTypeString(
if (!success)
{
+ BNFreeQualifiedNameAndType(&apiResult);
return false;
}
diff --git a/typeparser.cpp b/typeparser.cpp
index 8fe20a1f..18ecac08 100644
--- a/typeparser.cpp
+++ b/typeparser.cpp
@@ -97,7 +97,9 @@ std::string TypeParser::FormatParseErrors(const std::vector<TypeParserError>& er
BNFreeString(apiError.fileName);
}
- return string;
+ std::string result = string ? string : "";
+ BNFreeString(string);
+ return result;
}
diff --git a/workflow.cpp b/workflow.cpp
index 5be636d2..bf5b5579 100644
--- a/workflow.cpp
+++ b/workflow.cpp
@@ -375,11 +375,7 @@ bool WorkflowMachine::PostRequest(const std::string& command)
rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
request.Accept(writer);
- string jsonResult;
- if (m_function)
- jsonResult = BNPostWorkflowRequestForFunction(m_function->GetObject(), buffer.GetString());
- else
- jsonResult = BNPostWorkflowRequestForBinaryView(m_view->GetObject(), buffer.GetString());
+ string jsonResult = PostRawRequest(buffer.GetString());
rapidjson::Document response(rapidjson::kObjectType);
response.Parse(jsonResult.c_str());
@@ -402,13 +398,23 @@ WorkflowMachine::WorkflowMachine(Ref<Function> function): m_function(function)
}
-bool WorkflowMachine::PostJsonRequest(const std::string& request)
+string WorkflowMachine::PostRawRequest(const char* request)
{
- string jsonResult;
+ char* result;
if (m_function)
- jsonResult = BNPostWorkflowRequestForFunction(m_function->GetObject(), request.c_str());
+ result = BNPostWorkflowRequestForFunction(m_function->GetObject(), request);
else
- jsonResult = BNPostWorkflowRequestForBinaryView(m_view->GetObject(), request.c_str());
+ result = BNPostWorkflowRequestForBinaryView(m_view->GetObject(), request);
+
+ string jsonResult(result);
+ BNFreeString(result);
+ return jsonResult;
+}
+
+
+bool WorkflowMachine::PostJsonRequest(const std::string& request)
+{
+ string jsonResult = PostRawRequest(request.c_str());
rapidjson::Document response(rapidjson::kObjectType);
response.Parse(jsonResult.c_str());
@@ -450,11 +456,7 @@ WorkflowMachine::Status WorkflowMachine::GetStatus()
rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
request.Accept(writer);
- string jsonResult;
- if (m_function)
- jsonResult = BNPostWorkflowRequestForFunction(m_function->GetObject(), buffer.GetString());
- else
- jsonResult = BNPostWorkflowRequestForBinaryView(m_view->GetObject(), buffer.GetString());
+ string jsonResult = PostRawRequest(buffer.GetString());
rapidjson::Document response(rapidjson::kObjectType);
response.Parse(jsonResult.c_str());
@@ -532,11 +534,7 @@ bool WorkflowMachine::SetLogEnabled(bool enable, bool global)
rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
request.Accept(writer);
- string jsonResult;
- if (m_function)
- jsonResult = BNPostWorkflowRequestForFunction(m_function->GetObject(), buffer.GetString());
- else
- jsonResult = BNPostWorkflowRequestForBinaryView(m_view->GetObject(), buffer.GetString());
+ string jsonResult = PostRawRequest(buffer.GetString());
rapidjson::Document response(rapidjson::kObjectType);
response.Parse(jsonResult.c_str());
@@ -558,11 +556,7 @@ std::optional<bool> WorkflowMachine::QueryOverride(const string& activity)
rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
request.Accept(writer);
- string jsonResult;
- if (m_function)
- jsonResult = BNPostWorkflowRequestForFunction(m_function->GetObject(), buffer.GetString());
- else
- jsonResult = BNPostWorkflowRequestForBinaryView(m_view->GetObject(), buffer.GetString());
+ string jsonResult = PostRawRequest(buffer.GetString());
rapidjson::Document response(rapidjson::kObjectType);
response.Parse(jsonResult.c_str());
@@ -585,11 +579,7 @@ bool WorkflowMachine::SetOverride(const string& activity, bool enable)
rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
request.Accept(writer);
- string jsonResult;
- if (m_function)
- jsonResult = BNPostWorkflowRequestForFunction(m_function->GetObject(), buffer.GetString());
- else
- jsonResult = BNPostWorkflowRequestForBinaryView(m_view->GetObject(), buffer.GetString());
+ string jsonResult = PostRawRequest(buffer.GetString());
rapidjson::Document response(rapidjson::kObjectType);
response.Parse(jsonResult.c_str());
@@ -611,11 +601,7 @@ bool WorkflowMachine::ClearOverride(const string& activity)
rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
request.Accept(writer);
- string jsonResult;
- if (m_function)
- jsonResult = BNPostWorkflowRequestForFunction(m_function->GetObject(), buffer.GetString());
- else
- jsonResult = BNPostWorkflowRequestForBinaryView(m_view->GetObject(), buffer.GetString());
+ string jsonResult = PostRawRequest(buffer.GetString());
rapidjson::Document response(rapidjson::kObjectType);
response.Parse(jsonResult.c_str());
@@ -720,7 +706,7 @@ Ref<Activity> Workflow::RegisterActivity(Ref<Activity> activity, const vector<st
if (!activityObject)
return nullptr;
- return new Activity(BNNewActivityReference(activityObject));
+ return new Activity(activityObject);
}
@@ -763,7 +749,7 @@ size_t Workflow::Size() const
Ref<Activity> Workflow::GetActivity(const string& activity)
{
BNActivity* activityObject = BNWorkflowGetActivity(m_object, activity.c_str());
- return new Activity(BNNewActivityReference(activityObject));
+ return new Activity(activityObject);
}