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);
         }
     }

Reply via email to