From 06c8bf8c337fe3042f276a087c00a9ab81138693 Mon Sep 17 00:00:00 2001 From: falkTX Date: Wed, 4 Aug 2021 11:23:39 +0100 Subject: [PATCH] Fix a memory leak in CarlaString class Signed-off-by: falkTX --- source/utils/CarlaString.hpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/source/utils/CarlaString.hpp b/source/utils/CarlaString.hpp index 98bb078cf..964a62164 100644 --- a/source/utils/CarlaString.hpp +++ b/source/utils/CarlaString.hpp @@ -58,12 +58,21 @@ public: /* * Simple char string. */ - explicit CarlaString(char* const strBuf) noexcept + explicit CarlaString(char* const strBuf, const bool reallocData = true) noexcept : fBuffer(_null()), fBufferLen(0), fBufferAlloc(false) { - _dup(strBuf); + if (reallocData || strBuf == nullptr) + { + _dup(strBuf); + } + else + { + fBuffer = strBuf; + fBufferLen = std::strlen(strBuf); + fBufferAlloc = true; + } } /* @@ -909,7 +918,7 @@ CarlaString operator+(const CarlaString& strBefore, const char* const strBufAfte std::memcpy(newBuf, strBefore.buffer(), strBeforeLen); std::memcpy(newBuf + strBeforeLen, strBufAfter, strBufAfterLen + 1); - return CarlaString(newBuf); + return CarlaString(newBuf, false); } static inline @@ -929,7 +938,7 @@ CarlaString operator+(const char* const strBufBefore, const CarlaString& strAfte std::memcpy(newBuf, strBufBefore, strBufBeforeLen); std::memcpy(newBuf + strBufBeforeLen, strAfter.buffer(), strAfterLen + 1); - return CarlaString(newBuf); + return CarlaString(newBuf, false); } // -----------------------------------------------------------------------