This is an automated email from the ASF dual-hosted git repository. pnoltes pushed a commit to branch feature/674-improve-properties in repository https://gitbox.apache.org/repos/asf/celix.git
commit abb645669572ea16c5e9332ca31cb2f84c6388f3 Author: Pepijn Noltes <[email protected]> AuthorDate: Mon Jan 22 18:35:36 2024 +0100 Fix parse error in celix_version_parse --- libs/utils/gtest/src/VersionTestSuite.cc | 12 ++++++++++++ libs/utils/src/version.c | 6 +++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/libs/utils/gtest/src/VersionTestSuite.cc b/libs/utils/gtest/src/VersionTestSuite.cc index 6d650b57..df3668ec 100644 --- a/libs/utils/gtest/src/VersionTestSuite.cc +++ b/libs/utils/gtest/src/VersionTestSuite.cc @@ -355,4 +355,16 @@ TEST_F(VersionTestSuite, ParseTest) { parseStatus = celix_version_parse("invalid", &result); EXPECT_EQ(CELIX_ILLEGAL_ARGUMENT, parseStatus); EXPECT_EQ(nullptr, result); + + parseStatus = celix_version_parse("-1", &result); + EXPECT_EQ(CELIX_ILLEGAL_ARGUMENT, parseStatus); + EXPECT_EQ(nullptr, result); + + parseStatus = celix_version_parse("1.-2", &result); + EXPECT_EQ(CELIX_ILLEGAL_ARGUMENT, parseStatus); + EXPECT_EQ(nullptr, result); + + parseStatus = celix_version_parse("1.2.-3", &result); + EXPECT_EQ(CELIX_ILLEGAL_ARGUMENT, parseStatus); + EXPECT_EQ(nullptr, result); } diff --git a/libs/utils/src/version.c b/libs/utils/src/version.c index 31423401..92d53001 100644 --- a/libs/utils/src/version.c +++ b/libs/utils/src/version.c @@ -196,8 +196,12 @@ celix_status_t celix_version_parse(const char *versionStr, celix_version_t** ver while (token) { bool convertedToLong = false; long l = celix_utils_convertStringToLong(token, 0L, &convertedToLong); - if (!convertedToLong && count == 3) { //qualifier + if (!convertedToLong && count == 3) { // qualifier qualifier = token; + } else if (convertedToLong && l < 0) { + //negative version part + celix_utils_freeStringIfNotEqual(buffer, versionWrkStr); + return CELIX_ILLEGAL_ARGUMENT; } else if (convertedToLong && count < 3) { versionsParts[count] = (int)l; } else if (!convertedToLong) {
