You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@celix.apache.org by pn...@apache.org on 2023/12/31 00:28:22 UTC
(celix) 02/02: Fix memleak in celix_utils_findIpInSubnet when calling getifaddrs
This is an automated email from the ASF dual-hosted git repository.
pnoltes pushed a commit to branch feature/509-remove-cpputests
in repository https://gitbox.apache.org/repos/asf/celix.git
commit 4bb89900f7773b63d1069a822942e3020b66db71
Author: Pepijn Noltes <pn...@apache.org>
AuthorDate: Sun Dec 31 01:28:11 2023 +0100
Fix memleak in celix_utils_findIpInSubnet when calling getifaddrs
---
libs/utils/gtest/src/IpUtilsErrorInjectionTestSuite.cc | 10 +++-------
libs/utils/src/ip_utils.c | 2 ++
2 files changed, 5 insertions(+), 7 deletions(-)
diff --git a/libs/utils/gtest/src/IpUtilsErrorInjectionTestSuite.cc b/libs/utils/gtest/src/IpUtilsErrorInjectionTestSuite.cc
index 8bbed74a..9f0dce5b 100644
--- a/libs/utils/gtest/src/IpUtilsErrorInjectionTestSuite.cc
+++ b/libs/utils/gtest/src/IpUtilsErrorInjectionTestSuite.cc
@@ -19,8 +19,6 @@
#include <gtest/gtest.h>
-#include <errno.h>
-
#include "celix_ip_utils.h"
#include "celix_err.h"
@@ -56,25 +54,24 @@ TEST_F(IpUtilsWithErrorInjectionTestSuite, FailToDuplicateStringTest) {
char* ipAddr = nullptr;
//first call to celix_utils_strdup fails
- celix_ei_expect_celix_utils_strdup((void *) &celix_utils_findIpInSubnet, 0, nullptr);
+ celix_ei_expect_celix_utils_strdup((void*)celix_utils_findIpInSubnet, 0, nullptr);
auto status = celix_utils_findIpInSubnet("192.168.1.0/24", &ipAddr);
EXPECT_EQ(status, ENOMEM);
EXPECT_EQ(ipAddr, nullptr);
EXPECT_EQ(errCount++, celix_err_getErrorCount());
//second call to celix_utils_strdup fails (in ifa -> ifa_next loop)
- celix_ei_expect_celix_utils_strdup((void *) &celix_utils_findIpInSubnet, 0, nullptr, 2);
+ celix_ei_expect_celix_utils_strdup((void*)celix_utils_findIpInSubnet, 0, nullptr, 2);
status = celix_utils_findIpInSubnet("127.0.0.1/24", &ipAddr);
EXPECT_EQ(status, ENOMEM);
EXPECT_EQ(ipAddr, nullptr);
EXPECT_EQ(errCount++, celix_err_getErrorCount());
- celix_ei_expect_celix_utils_strdup((void *) &celix_utils_convertIpToUint, 0, nullptr);
+ celix_ei_expect_celix_utils_strdup((void*)celix_utils_convertIpToUint, 0, nullptr);
bool converted;
auto ipAsUint = celix_utils_convertIpToUint("192.168.1.0", &converted);
EXPECT_EQ(ipAsUint, 0);
EXPECT_FALSE(converted);
- EXPECT_EQ(errno, ENOMEM);
EXPECT_EQ(errCount++, celix_err_getErrorCount());
}
@@ -82,6 +79,5 @@ TEST_F(IpUtilsWithErrorInjectionTestSuite, FailToCalledTest) {
celix_ei_expect_calloc((void*)celix_utils_convertUintToIp, 0, nullptr);
auto ip = celix_utils_convertUintToIp(3232235840);
EXPECT_EQ(ip, nullptr);
- EXPECT_EQ(errno, ENOMEM);
EXPECT_EQ(1, celix_err_getErrorCount());
}
diff --git a/libs/utils/src/ip_utils.c b/libs/utils/src/ip_utils.c
index 31638201..12cde0a3 100644
--- a/libs/utils/src/ip_utils.c
+++ b/libs/utils/src/ip_utils.c
@@ -209,6 +209,7 @@ celix_status_t celix_utils_findIpInSubnet(const char* subnetCidrNotation, char**
if (ifIpAsUint >= ipRangeStart && ifIpAsUint <= ipRangeStop && inputPrefix >= ifPrefix) {
char* ip = celix_utils_strdup(if_addr);
if (!ip) {
+ freeifaddrs(ifap);
celix_err_push("Failed to duplicate IP address");
return CELIX_ENOMEM;
}
@@ -216,5 +217,6 @@ celix_status_t celix_utils_findIpInSubnet(const char* subnetCidrNotation, char**
break;
}
}
+ freeifaddrs(ifap);
return CELIX_SUCCESS;
}