aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@users.noreply.github.com>2025-02-04 13:06:11 -0500
committerGitHub <noreply@github.com>2025-02-04 13:06:11 -0500
commit89bd28eb5ac263d1753021f25e1bc62f48e7008d (patch)
tree622918f9a81723b830ab8bcc403154271932b591 /src
parent2372e40c40ef7bc85176d8998272ad75a59fcf05 (diff)
parent825aa472739775a5e2d673043f9d846df1eac924 (diff)
downloadstasis-89bd28eb5ac263d1753021f25e1bc62f48e7008d.tar.gz
Merge pull request #86 from jhunkeler/memfixes
ASAN: Fix leaks
Diffstat (limited to 'src')
-rw-r--r--src/lib/core/junitxml.c4
-rw-r--r--src/lib/core/strlist.c1
-rw-r--r--src/lib/core/wheel.c1
-rw-r--r--src/lib/delivery/delivery.c4
-rw-r--r--src/lib/delivery/delivery_init.c8
-rw-r--r--src/lib/delivery/delivery_populate.c14
6 files changed, 27 insertions, 5 deletions
diff --git a/src/lib/core/junitxml.c b/src/lib/core/junitxml.c
index f747224..628f75f 100644
--- a/src/lib/core/junitxml.c
+++ b/src/lib/core/junitxml.c
@@ -8,6 +8,9 @@ static void testcase_result_state_free(struct JUNIT_Testcase **testcase) {
if (tc->tc_result_state_type == JUNIT_RESULT_STATE_FAILURE) {
guard_free(tc->result_state.failure->message);
guard_free(tc->result_state.failure);
+ } else if (tc->tc_result_state_type == JUNIT_RESULT_STATE_ERROR) {
+ guard_free(tc->result_state.error->message);
+ guard_free(tc->result_state.error);
} else if (tc->tc_result_state_type == JUNIT_RESULT_STATE_SKIPPED) {
guard_free(tc->result_state.skipped->message);
guard_free(tc->result_state.skipped);
@@ -31,6 +34,7 @@ void junitxml_testsuite_free(struct JUNIT_Testsuite **testsuite) {
for (size_t i = 0; i < suite->_tc_alloc; i++) {
testcase_free(&suite->testcase[i]);
}
+ guard_free(suite->testcase);
guard_free(suite);
}
diff --git a/src/lib/core/strlist.c b/src/lib/core/strlist.c
index ec7b3f4..0436f54 100644
--- a/src/lib/core/strlist.c
+++ b/src/lib/core/strlist.c
@@ -218,6 +218,7 @@ void strlist_remove(struct StrList *pStrList, size_t index) {
return;
}
if (pStrList->data[index] != NULL) {
+ guard_free(pStrList->data[index]);
for (size_t i = index; i < count; i++) {
pStrList->data[i] = pStrList->data[i + 1];
}
diff --git a/src/lib/core/wheel.c b/src/lib/core/wheel.c
index d5d5ff0..32091cd 100644
--- a/src/lib/core/wheel.c
+++ b/src/lib/core/wheel.c
@@ -121,5 +121,6 @@ void wheel_free(struct Wheel **wheel) {
guard_free(w->python_tag);
guard_free(w->abi_tag);
guard_free(w->python_tag);
+ guard_free(w->platform_tag);
guard_free(w);
}
diff --git a/src/lib/delivery/delivery.c b/src/lib/delivery/delivery.c
index aa3e51a..41be64c 100644
--- a/src/lib/delivery/delivery.c
+++ b/src/lib/delivery/delivery.c
@@ -40,6 +40,7 @@ void delivery_free(struct Delivery *ctx) {
guard_free(ctx->info.build_name);
guard_free(ctx->info.build_number);
guard_free(ctx->info.release_name);
+ guard_free(ctx->info.time_info);
guard_free(ctx->conda.installer_baseurl);
guard_free(ctx->conda.installer_name);
guard_free(ctx->conda.installer_version);
@@ -50,8 +51,10 @@ void delivery_free(struct Delivery *ctx) {
guard_free(ctx->conda.tool_build_version);
guard_strlist_free(&ctx->conda.conda_packages);
guard_strlist_free(&ctx->conda.conda_packages_defer);
+ guard_strlist_free(&ctx->conda.conda_packages_purge);
guard_strlist_free(&ctx->conda.pip_packages);
guard_strlist_free(&ctx->conda.pip_packages_defer);
+ guard_strlist_free(&ctx->conda.pip_packages_purge);
guard_strlist_free(&ctx->conda.wheels_packages);
for (size_t i = 0; i < sizeof(ctx->tests) / sizeof(ctx->tests[0]); i++) {
@@ -62,6 +65,7 @@ void delivery_free(struct Delivery *ctx) {
guard_free(ctx->tests[i].repository_info_tag);
guard_strlist_free(&ctx->tests[i].repository_remove_tags);
guard_free(ctx->tests[i].script);
+ guard_free(ctx->tests[i].script_setup);
guard_free(ctx->tests[i].build_recipe);
// test-specific runtime variables
guard_runtime_free(ctx->tests[i].runtime.environ);
diff --git a/src/lib/delivery/delivery_init.c b/src/lib/delivery/delivery_init.c
index 2fced03..fe60075 100644
--- a/src/lib/delivery/delivery_init.c
+++ b/src/lib/delivery/delivery_init.c
@@ -296,10 +296,12 @@ int bootstrap_build_info(struct Delivery *ctx) {
ctx->info.build_name = strdup(local.info.build_name);
ctx->info.build_number = strdup(local.info.build_number);
ctx->info.release_name = strdup(local.info.release_name);
- ctx->info.time_info = malloc(sizeof(*ctx->info.time_info));
if (!ctx->info.time_info) {
- SYSERROR("Unable to allocate %zu bytes for tm struct: %s", sizeof(*local.info.time_info), strerror(errno));
- return -1;
+ ctx->info.time_info = malloc(sizeof(*ctx->info.time_info));
+ if (!ctx->info.time_info) {
+ SYSERROR("Unable to allocate %zu bytes for tm struct: %s", sizeof(*local.info.time_info), strerror(errno));
+ return -1;
+ }
}
memcpy(ctx->info.time_info, local.info.time_info, sizeof(*local.info.time_info));
ctx->info.time_now = local.info.time_now;
diff --git a/src/lib/delivery/delivery_populate.c b/src/lib/delivery/delivery_populate.c
index e9aea89..63df9fd 100644
--- a/src/lib/delivery/delivery_populate.c
+++ b/src/lib/delivery/delivery_populate.c
@@ -30,11 +30,21 @@ int populate_info(struct Delivery *ctx) {
if (!ctx->info.time_str_epoch) {
// Record timestamp used for release
time(&ctx->info.time_now);
- ctx->info.time_info = localtime(&ctx->info.time_now);
+ if (!ctx->info.time_info) {
+ ctx->info.time_info = malloc(sizeof(*ctx->info.time_info));
+ if (!ctx->info.time_info) {
+ msg(STASIS_MSG_ERROR, "%s: Unable to allocate memory for time_info\n", strerror(errno));
+ return -1;
+ }
+ if (!localtime_r(&ctx->info.time_now, ctx->info.time_info)) {
+ msg(STASIS_MSG_ERROR, "%s: localtime_r failed\n", strerror(errno));
+ return -1;
+ }
+ }
ctx->info.time_str_epoch = calloc(STASIS_TIME_STR_MAX, sizeof(*ctx->info.time_str_epoch));
if (!ctx->info.time_str_epoch) {
- msg(STASIS_MSG_ERROR, "Unable to allocate memory for Unix epoch string\n");
+ msg(STASIS_MSG_ERROR, "%s: Unable to allocate memory for Unix epoch string\n", strerror(errno));
return -1;
}
snprintf(ctx->info.time_str_epoch, STASIS_TIME_STR_MAX - 1, "%li", ctx->info.time_now);