From c6e39332f675fa10483f58ac5c4df970a7b6bd15 Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Wed, 29 Apr 2026 12:18:27 -0400 Subject: delivery_init_platform: return on allocation error --- src/lib/delivery/delivery_init.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/lib/delivery') diff --git a/src/lib/delivery/delivery_init.c b/src/lib/delivery/delivery_init.c index c73e7f0..b97b93a 100644 --- a/src/lib/delivery/delivery_init.c +++ b/src/lib/delivery/delivery_init.c @@ -201,6 +201,10 @@ int delivery_init_platform(struct Delivery *ctx) { } for (size_t i = 0; i < DELIVERY_PLATFORM_MAX; i++) { ctx->system.platform[i] = calloc(DELIVERY_PLATFORM_MAXLEN, sizeof(*ctx->system.platform[0])); + if (!ctx->system.platform[i]) { + SYSERROR("Unable to allocate record %zu in platform array\n", i); + return -1; + } } ctx->system.arch = strdup(uts.machine); -- cgit From 4b75777b000602aefd4807c0aad4e27911ed58d1 Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Wed, 29 Apr 2026 12:18:59 -0400 Subject: delivery_init: return if platform cannot be established --- src/lib/delivery/delivery_init.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/lib/delivery') diff --git a/src/lib/delivery/delivery_init.c b/src/lib/delivery/delivery_init.c index b97b93a..acdddf6 100644 --- a/src/lib/delivery/delivery_init.c +++ b/src/lib/delivery/delivery_init.c @@ -294,7 +294,10 @@ int delivery_init(struct Delivery *ctx, int render_mode) { } // Configure architecture and platform information - delivery_init_platform(ctx); + if (delivery_init_platform(ctx)) { + // memory error + return -1; + } // Create STASIS directory structure delivery_init_dirs_stage1(ctx); -- cgit From 77257cff9f84d6bfe15c352a00e1231d8984b46e Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Wed, 29 Apr 2026 12:19:25 -0400 Subject: free tests on error --- src/lib/delivery/delivery_test.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/lib/delivery') diff --git a/src/lib/delivery/delivery_test.c b/src/lib/delivery/delivery_test.c index 65d0451..1ba123a 100644 --- a/src/lib/delivery/delivery_test.c +++ b/src/lib/delivery/delivery_test.c @@ -8,6 +8,7 @@ struct Tests *tests_init(const size_t num_tests) { tests->test = calloc(num_tests, sizeof(*tests->test)); if (!tests->test) { + guard_free(tests); return NULL; } tests->num_used = 0; @@ -41,6 +42,7 @@ struct Test *test_init() { result->runtime = calloc(1, sizeof(*result->runtime)); if (!result->runtime) { + guard_free(result); return NULL; } -- cgit From d9ce0e78895e5dfa1e57aca76bb93b4b76dc6e74 Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Wed, 29 Apr 2026 12:42:46 -0400 Subject: delivery_duplicate: handle platform allocation error --- src/lib/delivery/delivery.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'src/lib/delivery') diff --git a/src/lib/delivery/delivery.c b/src/lib/delivery/delivery.c index 89074c8..cbc5898 100644 --- a/src/lib/delivery/delivery.c +++ b/src/lib/delivery/delivery.c @@ -1,7 +1,7 @@ #include "delivery.h" #include "conda.h" -struct Delivery *delivery_duplicate(const struct Delivery *ctx) { +struct Delivery *delivery_duplicate(struct Delivery *ctx) { struct Delivery *result = calloc(1, sizeof(*result)); if (!result) { return NULL; @@ -106,6 +106,12 @@ struct Delivery *delivery_duplicate(const struct Delivery *ctx) { } for (size_t i = 0; i < DELIVERY_PLATFORM_MAX; i++) { result->system.platform[i] = strdup_maybe(ctx->system.platform[i]); + if (!result->system.platform[i]) { + SYSERROR("%s", "unable to allocate record in system platform array"); + guard_array_n_free(result->system.platform, DELIVERY_PLATFORM_MAX); + delivery_free(ctx); + return NULL; + } } } -- cgit From c985cdf4019db2957e3073fec11c9b7a9fe3487c Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Wed, 29 Apr 2026 12:43:44 -0400 Subject: delivery_duplicate: free context on error --- src/lib/delivery/delivery.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src/lib/delivery') diff --git a/src/lib/delivery/delivery.c b/src/lib/delivery/delivery.c index cbc5898..557a0ed 100644 --- a/src/lib/delivery/delivery.c +++ b/src/lib/delivery/delivery.c @@ -56,12 +56,16 @@ struct Delivery *delivery_duplicate(struct Delivery *ctx) { result->rules._handle = malloc(sizeof(*result->rules._handle)); if (!result->rules._handle) { SYSERROR("unable to allocate space for INIFILE handle"); + SYSERROR("%s", "unable to allocate space for INIFILE handle"); + delivery_free(ctx); return NULL; } result->rules._handle->section = malloc(ctx->rules._handle->section_count * sizeof(**ctx->rules._handle->section)); if (!result->rules._handle->section) { guard_free(result->rules._handle); SYSERROR("unable to allocate space for INIFILE section"); + SYSERROR("%s", "unable to allocate space for INIFILE section"); + delivery_free(ctx); return NULL; } memcpy(result->rules._handle, &ctx->rules._handle, sizeof(*ctx->rules._handle)); @@ -102,6 +106,8 @@ struct Delivery *delivery_duplicate(struct Delivery *ctx) { result->system.platform = malloc(DELIVERY_PLATFORM_MAX * sizeof(*result->system.platform)); if (!result->system.platform) { SYSERROR("unable to allocate space for system platform array"); + SYSERROR("%s", "unable to allocate space for system platform array"); + delivery_free(ctx); return NULL; } for (size_t i = 0; i < DELIVERY_PLATFORM_MAX; i++) { -- cgit From 050c3d13136c7f4ba056383d20105624a1af6357 Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Wed, 29 Apr 2026 12:44:03 -0400 Subject: delivery_duplicate: free INI handle --- src/lib/delivery/delivery.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src/lib/delivery') diff --git a/src/lib/delivery/delivery.c b/src/lib/delivery/delivery.c index 557a0ed..500bb88 100644 --- a/src/lib/delivery/delivery.c +++ b/src/lib/delivery/delivery.c @@ -257,6 +257,9 @@ void delivery_free(struct Delivery *ctx) { guard_free(ctx->rules.release_fmt); guard_free(ctx->rules.build_name_fmt); guard_free(ctx->rules.build_number_fmt); + if (ctx->rules._handle) { + ini_free(&ctx->rules._handle); + } guard_free(ctx->deploy.docker.test_script); guard_free(ctx->deploy.docker.registry); -- cgit From edec33cfb671f38a13e57fe03f80eec62b8377dc Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Wed, 29 Apr 2026 12:44:14 -0400 Subject: delivery_duplicate: free INI handle --- src/lib/delivery/include/delivery.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/lib/delivery') diff --git a/src/lib/delivery/include/delivery.h b/src/lib/delivery/include/delivery.h index f234750..3103a86 100644 --- a/src/lib/delivery/include/delivery.h +++ b/src/lib/delivery/include/delivery.h @@ -499,7 +499,7 @@ void delivery_rewrite_stage2(struct Delivery *ctx, char *specfile); * @param ctx Delivery context * @return a copy */ -struct Delivery *delivery_duplicate(const struct Delivery *ctx); +struct Delivery *delivery_duplicate(struct Delivery *ctx); /** * Initialize a `Tests` structure -- cgit From 6cf418547c51e885648e028e3ec9e167cc32dec3 Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Fri, 1 May 2026 18:58:47 -0400 Subject: terminate platform string after copy --- src/lib/delivery/delivery_init.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/lib/delivery') diff --git a/src/lib/delivery/delivery_init.c b/src/lib/delivery/delivery_init.c index acdddf6..5f1c605 100644 --- a/src/lib/delivery/delivery_init.c +++ b/src/lib/delivery/delivery_init.c @@ -222,6 +222,8 @@ int delivery_init_platform(struct Delivery *ctx) { SYSDEBUG("Setting platform"); strncpy(ctx->system.platform[DELIVERY_PLATFORM], uts.sysname, DELIVERY_PLATFORM_MAXLEN - 1); + ctx->system.platform[DELIVERY_PLATFORM][DELIVERY_PLATFORM_MAXLEN - 1] = '\0'; + if (!strcmp(ctx->system.platform[DELIVERY_PLATFORM], "Darwin")) { snprintf(ctx->system.platform[DELIVERY_PLATFORM_CONDA_SUBDIR], DELIVERY_PLATFORM_MAXLEN, "osx-%s", archsuffix); strncpy(ctx->system.platform[DELIVERY_PLATFORM_CONDA_INSTALLER], "MacOSX", DELIVERY_PLATFORM_MAXLEN - 1); -- cgit From 095793d256f97ef8bd0820ffee78be1f6c8c9349 Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Wed, 6 May 2026 17:16:44 -0400 Subject: terminate strings --- src/lib/delivery/delivery_install.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/lib/delivery') diff --git a/src/lib/delivery/delivery_install.c b/src/lib/delivery/delivery_install.c index 4d52b82..e699122 100644 --- a/src/lib/delivery/delivery_install.c +++ b/src/lib/delivery/delivery_install.c @@ -376,14 +376,16 @@ int delivery_install_packages(struct Delivery *ctx, char *conda_install_dir, cha if (INSTALL_PKG_CONDA_DEFERRED & type) { strncat(command_base, " --use-local", sizeof(command_base) - strlen(command_base) - 1); + command_base[sizeof(command_base) - 1] = '\0'; } else if (INSTALL_PKG_PIP_DEFERRED & type) { // Don't change the baseline package set unless we're working with a // new build. Release candidates will need to keep packages as stable // as possible between releases. if (!ctx->meta.based_on) { strncat(command_base, " --upgrade", sizeof(command_base) - strlen(command_base) - 1); + command_base[sizeof(command_base) - 1] = '\0'; } - snprintf(command_base + strlen(command_base), sizeof(command_base), " --extra-index-url 'file://%s'", ctx->storage.wheel_artifact_dir); + snprintf(command_base + strlen(command_base), sizeof(command_base) - strlen(command_base), " --extra-index-url 'file://%s'", ctx->storage.wheel_artifact_dir); } size_t args_alloc_len = STASIS_BUFSIZ; -- cgit From 5ec6f09c2abcc866b4ba34a995d5f61e7851df48 Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Wed, 6 May 2026 17:17:06 -0400 Subject: Add debug output --- src/lib/delivery/delivery_install.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src/lib/delivery') diff --git a/src/lib/delivery/delivery_install.c b/src/lib/delivery/delivery_install.c index e699122..ca41c82 100644 --- a/src/lib/delivery/delivery_install.c +++ b/src/lib/delivery/delivery_install.c @@ -404,15 +404,18 @@ int delivery_install_packages(struct Delivery *ctx, char *conda_install_dir, cha continue; } if (INSTALL_PKG_PIP_DEFERRED & type) { + SYSDEBUG("Getting requirements for test: %s", name); struct Test *info = requirement_from_test(ctx, name); if (info) { if (!strcmp(info->version, "HEAD") || is_git_sha(info->version)) { + SYSDEBUG("Using version: %s", info->version); struct StrList *tag_data = strlist_init(); if (!tag_data) { SYSERROR("Unable to allocate memory for tag data"); guard_free(args); return -1; } + SYSDEBUG("%s", "Tokenizing repository info tag: %s\n", info->repository_info_tag); strlist_append_tokenize(tag_data, info->repository_info_tag, "-"); struct WheelInfo *whl = NULL; @@ -420,13 +423,16 @@ int delivery_install_packages(struct Delivery *ctx, char *conda_install_dir, cha char *hash = NULL; if (strlist_count(tag_data) > 1) { post_commit = strlist_item(tag_data, 1); + SYSDEBUG("post_commit: %s", post_commit); hash = strlist_item(tag_data, 2); + SYSDEBUG("hash: %s", hash); } // We can't match on version here (index 0). The wheel's version is not guaranteed to be // equal to the tag; setuptools_scm auto-increments the value, the user can change it manually, // etc. errno = 0; + SYSDEBUG("%s", "Getting wheel information"); whl = wheelinfo_get(ctx->storage.wheel_artifact_dir, info->name, (char *[]) {ctx->meta.python_compact, ctx->system.arch, "none", "any", @@ -441,8 +447,10 @@ int delivery_install_packages(struct Delivery *ctx, char *conda_install_dir, cha SYSERROR("No wheel packages found that match the description of '%s'", info->name); } else { // found, replace the original version with newly detected version + SYSDEBUG("Replacing version: %s", whl->version); guard_free(info->version); info->version = strdup(whl->version); + SYSDEBUG("Version replaced with: %s", whl->version); } guard_strlist_free(&tag_data); wheelinfo_free(&whl); -- cgit From 69c99be43c918f7f0723fa6632ae1a766ed794e5 Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Sun, 10 May 2026 20:33:31 -0400 Subject: Update macro --- src/lib/delivery/delivery_install.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/lib/delivery') diff --git a/src/lib/delivery/delivery_install.c b/src/lib/delivery/delivery_install.c index ca41c82..d39fa3e 100644 --- a/src/lib/delivery/delivery_install.c +++ b/src/lib/delivery/delivery_install.c @@ -415,7 +415,7 @@ int delivery_install_packages(struct Delivery *ctx, char *conda_install_dir, cha guard_free(args); return -1; } - SYSDEBUG("%s", "Tokenizing repository info tag: %s\n", info->repository_info_tag); + SYSDEBUG("Tokenizing repository info tag: %s\n", info->repository_info_tag); strlist_append_tokenize(tag_data, info->repository_info_tag, "-"); struct WheelInfo *whl = NULL; -- cgit From 1944c5281a29fa02d21338129445dba23d01cc52 Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Mon, 11 May 2026 23:27:19 -0400 Subject: Remove linefeed from warning message --- src/lib/delivery/delivery.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/lib/delivery') diff --git a/src/lib/delivery/delivery.c b/src/lib/delivery/delivery.c index 500bb88..dc9e2ce 100644 --- a/src/lib/delivery/delivery.c +++ b/src/lib/delivery/delivery.c @@ -489,7 +489,7 @@ void delivery_defer_packages(struct Delivery *ctx, int type) { } if (!strlist_count(deferred)) { - SYSWARN("No %s packages were filtered by test definitions\n", mode); + SYSWARN("No %s packages were filtered by test definitions", mode); } else { if (DEFER_CONDA == type) { guard_strlist_free(&ctx->conda.conda_packages); -- cgit From 43b9334d4c88c0dcf9e44f5b8a20803effb5ebd5 Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Tue, 12 May 2026 10:32:30 -0400 Subject: Blank warning as new line --- src/lib/delivery/delivery_artifactory.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/lib/delivery') diff --git a/src/lib/delivery/delivery_artifactory.c b/src/lib/delivery/delivery_artifactory.c index 3c1cff3..d7a5457 100644 --- a/src/lib/delivery/delivery_artifactory.c +++ b/src/lib/delivery/delivery_artifactory.c @@ -61,7 +61,8 @@ int delivery_artifact_upload(struct Delivery *ctx) { if (!globals.jfrog.repo) { SYSWARN("Artifactory repository path is not configured!"); - SYSWARN("set STASIS_JF_REPO environment variable...\nOr append to configuration file:\n"); + SYSWARN("set STASIS_JF_REPO environment variable...\nOr append to configuration file:"); + SYSWARN(""); SYSWARN("[deploy:artifactory]\nrepo = example/generic/repo/path\n"); status++; break; -- cgit From c96bee4c1e34fb80453a79ba455ff9eb1c72b6c5 Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Tue, 12 May 2026 10:42:29 -0400 Subject: Remove linefeed from error --- src/lib/delivery/delivery_init.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/lib/delivery') diff --git a/src/lib/delivery/delivery_init.c b/src/lib/delivery/delivery_init.c index 5f1c605..48124c2 100644 --- a/src/lib/delivery/delivery_init.c +++ b/src/lib/delivery/delivery_init.c @@ -202,7 +202,7 @@ int delivery_init_platform(struct Delivery *ctx) { for (size_t i = 0; i < DELIVERY_PLATFORM_MAX; i++) { ctx->system.platform[i] = calloc(DELIVERY_PLATFORM_MAXLEN, sizeof(*ctx->system.platform[0])); if (!ctx->system.platform[i]) { - SYSERROR("Unable to allocate record %zu in platform array\n", i); + SYSERROR("Unable to allocate record %zu in platform array", i); return -1; } } -- cgit From 6d6a6a1c25672b69ed80985b54a5fd8da2125751 Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Tue, 12 May 2026 10:43:17 -0400 Subject: free platform array on error --- src/lib/delivery/delivery_init.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src/lib/delivery') diff --git a/src/lib/delivery/delivery_init.c b/src/lib/delivery/delivery_init.c index 48124c2..5bc326d 100644 --- a/src/lib/delivery/delivery_init.c +++ b/src/lib/delivery/delivery_init.c @@ -203,6 +203,7 @@ int delivery_init_platform(struct Delivery *ctx) { ctx->system.platform[i] = calloc(DELIVERY_PLATFORM_MAXLEN, sizeof(*ctx->system.platform[0])); if (!ctx->system.platform[i]) { SYSERROR("Unable to allocate record %zu in platform array", i); + guard_array_n_free(ctx->system.platform, i); return -1; } } @@ -210,6 +211,8 @@ int delivery_init_platform(struct Delivery *ctx) { ctx->system.arch = strdup(uts.machine); if (!ctx->system.arch) { // memory error + guard_array_n_free(ctx->system.platform, DELIVERY_PLATFORM_MAX); + ctx->system.platform = NULL; return -1; } -- cgit From 48066ec0b4491b6b07d90c4da82dc98f2dc62bff Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Tue, 12 May 2026 10:43:38 -0400 Subject: remove linefeed from debug message --- src/lib/delivery/delivery_install.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/lib/delivery') diff --git a/src/lib/delivery/delivery_install.c b/src/lib/delivery/delivery_install.c index d39fa3e..037098d 100644 --- a/src/lib/delivery/delivery_install.c +++ b/src/lib/delivery/delivery_install.c @@ -415,7 +415,7 @@ int delivery_install_packages(struct Delivery *ctx, char *conda_install_dir, cha guard_free(args); return -1; } - SYSDEBUG("Tokenizing repository info tag: %s\n", info->repository_info_tag); + SYSDEBUG("Tokenizing repository info tag: %s", info->repository_info_tag); strlist_append_tokenize(tag_data, info->repository_info_tag, "-"); struct WheelInfo *whl = NULL; -- cgit From 898044af3a714481ca40d244f92a31296d503d55 Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Tue, 12 May 2026 10:44:55 -0400 Subject: when no spec is present use the package name instead --- src/lib/delivery/delivery_install.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'src/lib/delivery') diff --git a/src/lib/delivery/delivery_install.c b/src/lib/delivery/delivery_install.c index 037098d..538ae15 100644 --- a/src/lib/delivery/delivery_install.c +++ b/src/lib/delivery/delivery_install.c @@ -235,12 +235,16 @@ int delivery_conda_enforce_package_version(struct Delivery *ctx, const char *env goto cleanup; } if (strstr(item, name)) { - char *spec_tmp = find_version_spec((char *) item); - while (!isalnum(*spec_tmp)) { - spec_tmp++; + const char *spec_tmp = find_version_spec((char *) item); + if (spec_tmp) { + while (!isalnum(*spec_tmp)) { + spec_tmp++; + } + spec_request = strdup(spec_tmp); + } else { + spec_request = strdup(item); } - spec_request = strdup(spec_tmp); if (!spec_request) { SYSERROR("unable to allocate memory for conda package spec request"); status = -1; -- cgit From 95786be9be8c77709c197b8efbcebd13d9ca8049 Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Tue, 12 May 2026 10:45:24 -0400 Subject: if conda fails, return --- src/lib/delivery/delivery_install.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'src/lib/delivery') diff --git a/src/lib/delivery/delivery_install.c b/src/lib/delivery/delivery_install.c index 538ae15..efdb819 100644 --- a/src/lib/delivery/delivery_install.c +++ b/src/lib/delivery/delivery_install.c @@ -265,9 +265,17 @@ int delivery_conda_enforce_package_version(struct Delivery *ctx, const char *env } snprintf(cmd, PATH_MAX, "remove --name %s %s", env_name, name); - conda_exec(cmd); + if (conda_exec(cmd)) { + SYSERROR("unable to remove package %s from %s", name, env_name); + status = -1; + goto cleanup; + } snprintf(cmd, PATH_MAX, "install --name %s %s=%s", env_name, name, spec_request); - conda_exec(cmd); + if (conda_exec(cmd)) { + SYSERROR("unable to install package %s into %s", name, env_name); + status = -1; + goto cleanup; + } cleanup: guard_free(spec_request); -- cgit From 210bcaf0c8ccaf2ff6dfbb172d6bd3df795caea1 Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Tue, 12 May 2026 10:45:39 -0400 Subject: make dep_status constant --- src/lib/delivery/delivery_test.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/lib/delivery') diff --git a/src/lib/delivery/delivery_test.c b/src/lib/delivery/delivery_test.c index 1ba123a..f59a62e 100644 --- a/src/lib/delivery/delivery_test.c +++ b/src/lib/delivery/delivery_test.c @@ -178,7 +178,7 @@ void delivery_tests_run(struct Delivery *ctx) { if (pushd(destdir)) { COE_CHECK_ABORT(1, "Unable to enter repository directory\n"); } else { - int dep_status = check_python_package_dependencies("."); + const int dep_status = check_python_package_dependencies("."); if (dep_status) { SYSERROR("Please replace all occurrences above with standard package specs:\n" "\n" -- cgit