summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRusty Wagner <rusty.wagner@gmail.com>2022-02-19 15:53:47 -0500
committerRusty Wagner <rusty.wagner@gmail.com>2022-03-11 20:28:57 -0500
commita84856e299f91dfcc31ba0cd397f32e2aa13711d (patch)
treea8f5df97dc6333ec740a133d602ba09ba36776ea
parentc7ffb77e1fdc2e9bc7a2de27c2feddf15e8b54ea (diff)
Use memory tracking API when in core for rapidjson
-rw-r--r--filemetadata.cpp4
-rw-r--r--rapidjson/allocators.h30
-rw-r--r--settings.cpp10
-rw-r--r--workflow.cpp22
4 files changed, 51 insertions, 15 deletions
diff --git a/filemetadata.cpp b/filemetadata.cpp
index 2b8dd553..e240cd1b 100644
--- a/filemetadata.cpp
+++ b/filemetadata.cpp
@@ -283,7 +283,9 @@ MergeResult FileMetadata::MergeUserAnalysis(
BNMergeUserAnalysis(m_object, name.c_str(), &cb, DatabaseProgressCallback, tempList, numHashes);
MergeResult result(bnResult);
- BNFreeStringList(tempList, numHashes);
+ for (size_t i = 0; i < numHashes; i++)
+ BNFreeString(tempList[i]);
+ delete[] tempList;
return result;
}
diff --git a/rapidjson/allocators.h b/rapidjson/allocators.h
index 68fc35d1..663c62de 100644
--- a/rapidjson/allocators.h
+++ b/rapidjson/allocators.h
@@ -59,25 +59,47 @@ concept Allocator {
/*! This class is just wrapper for standard C library memory routines.
\note implements Allocator concept
*/
+#ifdef BINARYNINJACORE_LIBRARY
class CrtAllocator {
public:
static const bool kNeedFree = true;
void* Malloc(size_t size) {
if (size) // behavior of malloc(0) is implementation defined.
- return je_malloc(size);
+ return BinaryNinjaCore::bn_malloc<CrtAllocator>(size);
else
return NULL; // standardize to returning NULL.
}
void* Realloc(void* originalPtr, size_t originalSize, size_t newSize) {
(void)originalSize;
if (newSize == 0) {
- je_free(originalPtr);
+ BinaryNinjaCore::bn_free(originalPtr);
return NULL;
}
- return je_realloc(originalPtr, newSize);
+ return BinaryNinjaCore::bn_realloc<CrtAllocator>(originalPtr, newSize);
}
- static void Free(void *ptr) { je_free(ptr); }
+ static void Free(void* ptr) { BinaryNinjaCore::bn_free(ptr); }
};
+#else
+class CrtAllocator {
+public:
+ static const bool kNeedFree = true;
+ void* Malloc(size_t size) {
+ if (size) // behavior of malloc(0) is implementation defined.
+ return malloc(size);
+ else
+ return NULL; // standardize to returning NULL.
+ }
+ void* Realloc(void* originalPtr, size_t originalSize, size_t newSize) {
+ (void)originalSize;
+ if (newSize == 0) {
+ free(originalPtr);
+ return NULL;
+ }
+ return realloc(originalPtr, newSize);
+ }
+ static void Free(void* ptr) { free(ptr); }
+};
+#endif
///////////////////////////////////////////////////////////////////////////////
// MemoryPoolAllocator
diff --git a/settings.cpp b/settings.cpp
index 5c244435..14d4f0e4 100644
--- a/settings.cpp
+++ b/settings.cpp
@@ -149,7 +149,10 @@ bool Settings::UpdateProperty(
bool result =
BNSettingsUpdateStringListProperty(m_object, key.c_str(), property.c_str(), (const char**)buffer, value.size());
- BNFreeStringList(buffer, value.size());
+
+ for (size_t i = 0; i < value.size(); i++)
+ BNFreeString(buffer[i]);
+ delete[] buffer;
return result;
}
@@ -313,7 +316,10 @@ bool Settings::Set(const string& key, const vector<string>& value, Ref<BinaryVie
bool result = BNSettingsSetStringList(
m_object, view ? view->GetObject() : nullptr, scope, key.c_str(), (const char**)buffer, value.size());
- BNFreeStringList(buffer, value.size());
+
+ for (size_t i = 0; i < value.size(); i++)
+ BNFreeString(buffer[i]);
+ delete[] buffer;
return result;
}
diff --git a/workflow.cpp b/workflow.cpp
index d3a13950..a779b81f 100644
--- a/workflow.cpp
+++ b/workflow.cpp
@@ -164,7 +164,10 @@ bool Workflow::RegisterActivity(Ref<Activity> activity, const vector<string>& su
bool result = BNWorkflowRegisterActivity(
m_object, activity->GetObject(), (const char**)buffer, subactivities.size(), description.c_str());
- BNFreeStringList(buffer, subactivities.size());
+
+ for (size_t i = 0; i < subactivities.size(); i++)
+ BNFreeString(buffer[i]);
+ delete[] buffer;
return result;
}
@@ -252,7 +255,10 @@ bool Workflow::AssignSubactivities(const string& activity, const vector<string>&
buffer[i] = BNAllocString(subactivities[i].c_str());
bool result = BNWorkflowAssignSubactivities(m_object, activity.c_str(), (const char**)buffer, subactivities.size());
- BNFreeStringList(buffer, subactivities.size());
+
+ for (size_t i = 0; i < subactivities.size(); i++)
+ BNFreeString(buffer[i]);
+ delete[] buffer;
return result;
}
@@ -265,14 +271,11 @@ bool Workflow::Clear()
bool Workflow::Insert(const string& activity, const std::string& newActivity)
{
- char** buffer = new char*[1];
- if (!buffer)
- return false;
-
+ char* buffer[1];
buffer[0] = BNAllocString(newActivity.c_str());
bool result = BNWorkflowInsert(m_object, activity.c_str(), (const char**)buffer, 1);
- BNFreeStringList(buffer, 1);
+ BNFreeString(buffer[0]);
return result;
}
@@ -287,7 +290,10 @@ bool Workflow::Insert(const string& activity, const vector<string>& activities)
buffer[i] = BNAllocString(activities[i].c_str());
bool result = BNWorkflowInsert(m_object, activity.c_str(), (const char**)buffer, activities.size());
- BNFreeStringList(buffer, activities.size());
+
+ for (size_t i = 0; i < activities.size(); i++)
+ BNFreeString(buffer[i]);
+ delete[] buffer;
return result;
}