This is an automated email from the ASF dual-hosted git repository. pengzheng pushed a commit to branch hotfix/version_conversion_leak in repository https://gitbox.apache.org/repos/asf/celix.git
commit 608eda6c8dc0bbaa922d1a2e3d9e71ddae8976ee Author: PengZheng <[email protected]> AuthorDate: Fri Apr 7 16:37:11 2023 +0800 Fix memory leak in version conversion #512 --- libs/utils/gtest/src/ConvertUtilsTestSuite.cc | 10 ++++++++++ libs/utils/src/celix_convert_utils.c | 4 ++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/libs/utils/gtest/src/ConvertUtilsTestSuite.cc b/libs/utils/gtest/src/ConvertUtilsTestSuite.cc index 38137bce..86ac327f 100644 --- a/libs/utils/gtest/src/ConvertUtilsTestSuite.cc +++ b/libs/utils/gtest/src/ConvertUtilsTestSuite.cc @@ -20,6 +20,7 @@ #include <gtest/gtest.h> #include "celix_convert_utils.h" +#include <string> class ConvertUtilsTestSuite : public ::testing::Test { public: @@ -228,5 +229,14 @@ TEST_F(ConvertUtilsTestSuite, ConvertToVersionTest) { EXPECT_TRUE(converted); celix_version_destroy(result); + //test for a convert with a super long invalid version string + std::string longString = "1"; + for (int i = 0; i < 128; ++i) { + longString += ".1"; + } + result = celix_utils_convertStringToVersion(longString.c_str(), nullptr, &converted); + EXPECT_FALSE(converted); + EXPECT_EQ(nullptr, result); + celix_version_destroy(defaultVersion); } \ No newline at end of file diff --git a/libs/utils/src/celix_convert_utils.c b/libs/utils/src/celix_convert_utils.c index b885cb67..22ec07d0 100644 --- a/libs/utils/src/celix_convert_utils.c +++ b/libs/utils/src/celix_convert_utils.c @@ -118,8 +118,8 @@ celix_version_t* celix_utils_convertStringToVersion(const char* val, const celix if (firstDot != NULL && lastDot != NULL && firstDot != lastDot) { char buf[64]; char* valCopy = celix_utils_writeOrCreateString(buf, sizeof(buf), "%s", val); - valCopy = celix_utils_trim(valCopy); - result = celix_version_createVersionFromString(valCopy); + char *trim = utils_stringTrim(valCopy); + result = celix_version_createVersionFromString(trim); celix_utils_freeStringIfNotEqual(buf, valCopy); } }
