diff options
author | Noel Grandin <noel.grandin@collabora.co.uk> | 2020-06-19 09:57:58 +0200 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2020-06-19 15:38:52 +0200 |
commit | 8df7447139b1171d8fd29f5d682b053df5936006 (patch) | |
tree | 29b966e34ac6ff5adf408b9c017670e17c389127 /tools | |
parent | 9b7a890fd59744459692d7f66402c6bdd25acec4 (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.cxx | 10 | ||||
-rw-r--r-- | tools/source/misc/json_writer.cxx | 16 |
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 |