summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2020-06-19 09:57:58 +0200
committerStephan Bergmann <sbergman@redhat.com>2020-06-19 15:38:52 +0200
commit8df7447139b1171d8fd29f5d682b053df5936006 (patch)
tree29b966e34ac6ff5adf408b9c017670e17c389127 /tools
parent9b7a890fd59744459692d7f66402c6bdd25acec4 (diff)
asan: need to use malloc instead of new for tools::JsonWriter
because the LOK API expects memory returned from those calls to be malloc'ed Change-Id: If6fbfb60c433bd6e58bc90a9a90a90663e2e1c60 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/96676 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/qa/cppunit/test_json_writer.cxx10
-rw-r--r--tools/source/misc/json_writer.cxx16
2 files changed, 20 insertions, 6 deletions
diff --git a/tools/qa/cppunit/test_json_writer.cxx b/tools/qa/cppunit/test_json_writer.cxx
index c4e9331c8d17..e27afc95f712 100644
--- a/tools/qa/cppunit/test_json_writer.cxx
+++ b/tools/qa/cppunit/test_json_writer.cxx
@@ -7,6 +7,10 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
+#include <sal/config.h>
+
+#include <cstdlib>
+
#include <cppunit/extensions/HelperMacros.h>
#include <test/bootstrapfixture.hxx>
#include <rtl/ustring.hxx>
@@ -44,7 +48,11 @@ void JsonWriterTest::test1()
aJson.put("int", 12);
}
- std::unique_ptr<char[]> result(aJson.extractData());
+ struct Free
+ {
+ void operator()(void* p) const { std::free(p); }
+ };
+ std::unique_ptr<char, Free> result(aJson.extractData());
CPPUNIT_ASSERT_EQUAL(std::string("{ \"node\": { \"oustring\": \"val1\", \"ostring\": \"val2\", "
"\"charptr\": \"val3\", \"int\": 12}}"),
diff --git a/tools/source/misc/json_writer.cxx b/tools/source/misc/json_writer.cxx
index 81b22e92a2d1..8a57e2ac337f 100644
--- a/tools/source/misc/json_writer.cxx
+++ b/tools/source/misc/json_writer.cxx
@@ -19,9 +19,9 @@ constexpr int DEFAULT_BUFFER_SIZE = 2048;
JsonWriter::JsonWriter()
: mSpaceAllocated(DEFAULT_BUFFER_SIZE)
- , maBuffer(new char[mSpaceAllocated])
+ , mpBuffer(static_cast<char*>(malloc(mSpaceAllocated)))
, mStartNodeCount(0)
- , mPos(maBuffer.get())
+ , mPos(mpBuffer)
{
*mPos = '{';
++mPos;
@@ -29,7 +29,11 @@ JsonWriter::JsonWriter()
++mPos;
}
-JsonWriter::~JsonWriter() { assert(!maBuffer && "forgot to extract data?"); }
+JsonWriter::~JsonWriter()
+{
+ assert(!mpBuffer && "forgot to extract data?");
+ free(mpBuffer);
+}
ScopedJsonWriterNode JsonWriter::startNode(const char* pNodeName)
{
@@ -239,14 +243,16 @@ void JsonWriter::addCommaBeforeField()
char* JsonWriter::extractData()
{
assert(mStartNodeCount == 0 && "did not close all nodes");
- assert(maBuffer && "data already extracted");
+ assert(mpBuffer && "data already extracted");
// add closing brace
*mPos = '}';
++mPos;
// null-terminate
*mPos = 0;
mPos = nullptr;
- return maBuffer.release();
+ char* pRet = nullptr;
+ std::swap(pRet, mpBuffer);
+ return pRet;
}
} // namespace tools