From 38e6862a2dc5c411b542d2496f220e50205c1ec4 Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Wed, 22 Apr 2026 11:23:50 -0400 Subject: strdup_maybe exits the program on memory error --- src/lib/delivery/delivery.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/lib/delivery/delivery.c') diff --git a/src/lib/delivery/delivery.c b/src/lib/delivery/delivery.c index 7d78878..eb74b6c 100644 --- a/src/lib/delivery/delivery.c +++ b/src/lib/delivery/delivery.c @@ -2,7 +2,12 @@ static char *strdup_maybe(const char * restrict s) { if (s != NULL) { - return strdup(s); + char *x = strdup(s); + if (!x) { + SYSERROR("%s", "strdup failed"); + exit(1); + } + return x; } return NULL; } -- cgit From 33febf2c63a7907c650bbd3730e96f0caea9198f Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Wed, 22 Apr 2026 11:24:58 -0400 Subject: delivery_defer_packages: nametmp and package_name must use the same buffer size --- src/lib/delivery/delivery.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/lib/delivery/delivery.c') diff --git a/src/lib/delivery/delivery.c b/src/lib/delivery/delivery.c index eb74b6c..a068923 100644 --- a/src/lib/delivery/delivery.c +++ b/src/lib/delivery/delivery.c @@ -368,7 +368,7 @@ void delivery_defer_packages(struct Delivery *ctx, int type) { // Compile a list of packages that are *also* to be tested. char *spec_begin = strpbrk(name, "@~=<>!"); char *spec_end = spec_begin; - char package_name[255] = {0}; + char package_name[STASIS_NAME_MAX] = {0}; if (spec_end) { // A version is present in the package name. Jump past operator(s). @@ -386,7 +386,7 @@ void delivery_defer_packages(struct Delivery *ctx, int type) { // When spec is present in name, set tests->version to the version detected in the name for (size_t x = 0; x < ctx->tests->num_used; x++) { struct Test *test = ctx->tests->test[x]; - char nametmp[1024] = {0}; + char nametmp[STASIS_NAME_MAX] = {0}; strncpy(nametmp, package_name, sizeof(nametmp) - 1); // Is the [test:NAME] in the package name? -- cgit From d1b5c231cfcc1543e64c89364e2f72172d1d501e Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Wed, 22 Apr 2026 11:25:37 -0400 Subject: delivery_duplicate: return on memory error --- src/lib/delivery/delivery.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src/lib/delivery/delivery.c') diff --git a/src/lib/delivery/delivery.c b/src/lib/delivery/delivery.c index a068923..e32a805 100644 --- a/src/lib/delivery/delivery.c +++ b/src/lib/delivery/delivery.c @@ -62,6 +62,7 @@ struct Delivery *delivery_duplicate(const struct Delivery *ctx) { memcpy(&result->rules.content, &ctx->rules.content, sizeof(ctx->rules.content)); if (ctx->rules._handle) { + /* result->rules._handle = malloc(sizeof(*result->rules._handle)); result->rules._handle->section = malloc(result->rules._handle->section_count * sizeof(*result->rules._handle->section)); memcpy(result->rules._handle, &ctx->rules._handle, sizeof(*ctx->rules._handle)); @@ -99,6 +100,10 @@ struct Delivery *delivery_duplicate(const struct Delivery *ctx) { result->system.arch = strdup_maybe(ctx->system.arch); if (ctx->system.platform) { result->system.platform = malloc(DELIVERY_PLATFORM_MAX * sizeof(*result->system.platform)); + if (!result->system.platform) { + SYSERROR("%s", "unable to allocate space for system platform array"); + return NULL; + } for (size_t i = 0; i < DELIVERY_PLATFORM_MAX; i++) { result->system.platform[i] = strdup_maybe(ctx->system.platform[i]); } -- cgit From 5cd74d0e266bdec0de6e7463126220bc8f3722e8 Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Wed, 22 Apr 2026 12:38:53 -0400 Subject: duplicate_delivery: handle error conditions * but also memcpy might not be enough here --- src/lib/delivery/delivery.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'src/lib/delivery/delivery.c') diff --git a/src/lib/delivery/delivery.c b/src/lib/delivery/delivery.c index e32a805..5403743 100644 --- a/src/lib/delivery/delivery.c +++ b/src/lib/delivery/delivery.c @@ -62,10 +62,20 @@ struct Delivery *delivery_duplicate(const struct Delivery *ctx) { memcpy(&result->rules.content, &ctx->rules.content, sizeof(ctx->rules.content)); if (ctx->rules._handle) { - /* + SYSDEBUG("%s", "duplicating INIFILE handle - BEGIN"); result->rules._handle = malloc(sizeof(*result->rules._handle)); - result->rules._handle->section = malloc(result->rules._handle->section_count * sizeof(*result->rules._handle->section)); + if (!result->rules._handle) { + SYSERROR("%s", "unable to allocate space for INIFILE handle"); + 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("%s", "unable to allocate space for INIFILE section"); + return NULL; + } memcpy(result->rules._handle, &ctx->rules._handle, sizeof(*ctx->rules._handle)); + SYSDEBUG("%s", "duplicating INIFILE handle - END"); } // Runtime -- cgit