summaryrefslogtreecommitdiff
path: root/workflow.cpp
diff options
context:
space:
mode:
authorMark Rowe <mark@vector35.com>2026-05-11 18:49:26 -0700
committerMark Rowe <mark@vector35.com>2026-05-19 10:36:46 -0700
commitfd40266f767e51e649fb48376e25f47a60d79765 (patch)
treedb351a36617200d4ad659bb3c1aa921b8d08f204 /workflow.cpp
parent297a98bff289ecde90d808f6538c2c5edf804af6 (diff)
Fix incorrect reference counting in C++ API
Diffstat (limited to 'workflow.cpp')
-rw-r--r--workflow.cpp58
1 files changed, 22 insertions, 36 deletions
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);
}