Attached is the patch I'm proposing for ubuntu. Let me know if you would like a Salsa PR as well.
From d454f62c73e069199e4a706dcd50be580f06e5c7 Mon Sep 17 00:00:00 2001 From: Sam James <s...@gentoo.org> Date: Sun, 5 Nov 2023 22:17:02 +0000 Subject: [PATCH] libpkgconf: fix -Walloc-size
GCC 14 introduces a new -Walloc-size included in -Wextra which gives: ``` libpkgconf/personality.c:260:11: warning: allocation of insufficient size '1' for type 'pkgconf_cross_personality_t' {aka 'struct pkgconf_cross_personality_'} with size '48' [-Walloc-size] libpkgconf/queue.c:46:33: warning: allocation of insufficient size '1' for type 'pkgconf_queue_t' {aka'struct pkgconf_queue_'} with size '16' [-Walloc-size] libpkgconf/client.c:164:33: warning: allocation of insufficient size '1' for type 'pkgconf_client_t' {aka 'struct pkgconf_client_'} with size '120' [-Walloc-size] libpkgconf/path.c:105:14: warning: allocation of insufficient size '1' for type 'pkgconf_path_t' {aka 'struct pkgconf_path_'} with size '24' [-Walloc-size] libpkgconf/path.c:237:22: warning: allocation of insufficient size '1' for type 'pkgconf_path_t' {aka 'struct pkgconf_path_'} with size '24' [-Walloc-size] libpkgconf/tuple.c:239:34: warning: allocation of insufficient size '1' for type 'pkgconf_tuple_t' {aka 'struct pkgconf_tuple_'} with size '24' [-Walloc-size] libpkgconf/dependency.c:133:13: warning: allocation of insufficient size '1' for type 'pkgconf_dependency_t' {aka 'struct pkgconf_dependency_'} with size '44' [-Walloc-size] libpkgconf/dependency.c:472:17: warning: allocation of insufficient size '1' for type 'pkgconf_dependency_t' {aka 'struct pkgconf_dependency_'} with size '44' [-Walloc-size] libpkgconf/fragment.c:146:22: warning: allocation of insufficient size '1' for type 'pkgconf_fragment_t' {aka 'struct pkgconf_fragment_'} with size '24' [-Walloc-size] libpkgconf/fragment.c:195:22: warning: allocation of insufficient size '1' for type 'pkgconf_fragment_t' {aka 'struct pkgconf_fragment_'} with size '24' [-Walloc-size] libpkgconf/fragment.c:356:14: warning: allocation of insufficient size '1' for type 'pkgconf_fragment_t' {aka 'struct pkgconf_fragment_'} with size '24' [-Walloc-size] libpkgconf/pkg.c:422:13: warning: allocation of insufficient size '1' for type 'pkgconf_pkg_t' {aka 'struct pkgconf_pkg_'} with size '188' [-Walloc-size] libpkgconf/client.c:164:33: warning: allocation of insufficient size '1' for type 'pkgconf_client_t' {aka 'struct pkgconf_client_'} with size '224' [-Walloc-size] libpkgconf/personality.c:260:11: warning: allocation of insufficient size '1' for type 'pkgconf_cross_personality_t' {aka 'struct pkgconf_cross_personality_'} with size '96' [-Walloc-size] libpkgconf/dependency.c:133:13: warning: allocation of insufficient size '1' for type 'pkgconf_dependency_t' {aka 'struct pkgconf_dependency_'} with size '80' [-Walloc-size] libpkgconf/dependency.c:472:17: warning: allocation of insufficient size '1' for type 'pkgconf_dependency_t' {aka 'struct pkgconf_dependency_'} with size '80' [-Walloc-size] libpkgconf/path.c:105:14: warning: allocation of insufficient size '1' for type 'pkgconf_path_t' {aka 'struct pkgconf_path_'} with size '48' [-Walloc-size] libpkgconf/path.c:237:22: warning: allocation of insufficient size '1' for type 'pkgconf_path_t' {aka 'struct pkgconf_path_'} with size '48' [-Walloc-size] libpkgconf/queue.c:46:33: warning: allocation of insufficient size '1' for type 'pkgconf_queue_t' {aka 'struct pkgconf_queue_'} with size '32' [-Walloc-size] libpkgconf/tuple.c:239:34: warning: allocation of insufficient size '1' for type 'pkgconf_tuple_t' {aka 'struct pkgconf_tuple_'} with size '48' [-Walloc-size] libpkgconf/fragment.c:146:22: warning: allocation of insufficient size '1' for type 'pkgconf_fragment_t' {aka 'struct pkgconf_fragment_'} with size '48' [-Walloc-size] libpkgconf/fragment.c:195:22: warning: allocation of insufficient size '1' for type 'pkgconf_fragment_t' {aka 'struct pkgconf_fragment_'} with size '48' [-Walloc-size] libpkgconf/fragment.c:356:14: warning: allocation of insufficient size '1' for type 'pkgconf_fragment_t' {aka 'struct pkgconf_fragment_'} with size '48' [-Walloc-size] libpkgconf/pkg.c:422:13: warning: allocation of insufficient size '1' for type 'pkgconf_pkg_t' {aka 'struct pkgconf_pkg_'} with size '360' [-Walloc-size] ``` The calloc prototype is: ``` void *calloc(size_t nmemb, size_t size); ``` So, just swap the number of members and size arguments to match the prototype, as we're initialising 1 struct of size `sizeof(struct ...)`. GCC then sees we're not doing anything wrong. The only exception there is for argv which I fixed while at it. Signed-off-by: Sam James <s...@gentoo.org> --- libpkgconf/argvsplit.c | 2 +- libpkgconf/client.c | 2 +- libpkgconf/dependency.c | 4 ++-- libpkgconf/fragment.c | 8 ++++---- libpkgconf/path.c | 4 ++-- libpkgconf/personality.c | 2 +- libpkgconf/pkg.c | 4 ++-- libpkgconf/queue.c | 2 +- libpkgconf/tuple.c | 4 ++-- 9 files changed, 16 insertions(+), 16 deletions(-) Origin: backport, https://github.com/pkgconf/pkgconf/commit/d454f62c73e069199e4a706dcd50be580f06e5c7 Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/pkgconf/+bug/2075361 Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1077671 Last-Update: 2024-07-31 --- a/libpkgconf/argvsplit.c +++ b/libpkgconf/argvsplit.c @@ -72,7 +72,7 @@ memset(buf, 0, strlen(src) + 1); - *argv = calloc(sizeof (void *), argv_size); + *argv = calloc(argv_size, sizeof (void *)); (*argv)[argc_count] = dst_iter; while (*src_iter) --- a/libpkgconf/client.c +++ b/libpkgconf/client.c @@ -159,7 +159,7 @@ pkgconf_client_t * pkgconf_client_new(pkgconf_error_handler_func_t error_handler, void *error_handler_data, const pkgconf_cross_personality_t *personality) { - pkgconf_client_t *out = calloc(sizeof(pkgconf_client_t), 1); + pkgconf_client_t *out = calloc(1, sizeof(pkgconf_client_t)); pkgconf_client_init(out, error_handler, error_handler_data, personality); return out; } --- a/libpkgconf/dependency.c +++ b/libpkgconf/dependency.c @@ -123,7 +123,7 @@ { pkgconf_dependency_t *dep; - dep = calloc(sizeof(pkgconf_dependency_t), 1); + dep = calloc(1, sizeof(pkgconf_dependency_t)); dep->package = pkgconf_strndup(package, package_sz); if (version_sz != 0) --- a/libpkgconf/fragment.c +++ b/libpkgconf/fragment.c @@ -139,7 +139,7 @@ if (strlen(string) > 1 && !pkgconf_fragment_is_special(string)) { - frag = calloc(sizeof(pkgconf_fragment_t), 1); + frag = calloc(1, sizeof(pkgconf_fragment_t)); frag->type = *(string + 1); frag->data = pkgconf_fragment_copy_munged(client, string + 2); @@ -188,7 +188,7 @@ } } - frag = calloc(sizeof(pkgconf_fragment_t), 1); + frag = calloc(1, sizeof(pkgconf_fragment_t)); frag->type = 0; frag->data = strdup(string); @@ -349,7 +349,7 @@ else if (!is_private && !pkgconf_fragment_can_merge_back(base, client->flags, is_private) && (pkgconf_fragment_lookup(list, base) != NULL)) return; - frag = calloc(sizeof(pkgconf_fragment_t), 1); + frag = calloc(1, sizeof(pkgconf_fragment_t)); frag->type = base->type; frag->merged = base->merged; @@ -423,7 +423,7 @@ if (frag->data == NULL) return NULL; - out = dst = calloc(outlen, 1); + out = dst = calloc(1, outlen); for (; *src; src++) { --- a/libpkgconf/path.c +++ b/libpkgconf/path.c @@ -102,7 +102,7 @@ return; #endif - node = calloc(sizeof(pkgconf_path_t), 1); + node = calloc(1, sizeof(pkgconf_path_t)); node->path = strdup(path); #ifdef PKGCONF_CACHE_INODES @@ -234,7 +234,7 @@ { pkgconf_path_t *srcpath = n->data, *path; - path = calloc(sizeof(pkgconf_path_t), 1); + path = calloc(1, sizeof(pkgconf_path_t)); path->path = strdup(srcpath->path); #ifdef PKGCONF_CACHE_INODES --- a/libpkgconf/personality.c +++ b/libpkgconf/personality.c @@ -227,7 +227,7 @@ if (f == NULL) return NULL; - p = calloc(sizeof(pkgconf_cross_personality_t), 1); + p = calloc(1, sizeof(pkgconf_cross_personality_t)); if (triplet != NULL) p->name = strdup(triplet); pkgconf_parser_parse(f, p, personality_parser_ops, personality_warn_func, pathbuf); --- a/libpkgconf/pkg.c +++ b/libpkgconf/pkg.c @@ -227,7 +227,7 @@ static char * convert_path_to_value(const char *path) { - char *buf = calloc((strlen(path) + 1) * 2, 1); + char *buf = calloc(1, (strlen(path) + 1) * 2); char *bptr = buf; const char *i; @@ -397,7 +397,7 @@ pkgconf_pkg_t *pkg; char *idptr; - pkg = calloc(sizeof(pkgconf_pkg_t), 1); + pkg = calloc(1, sizeof(pkgconf_pkg_t)); pkg->owner = client; pkg->filename = strdup(filename); pkg->pc_filedir = pkg_get_parent_dir(pkg); --- a/libpkgconf/queue.c +++ b/libpkgconf/queue.c @@ -48,7 +48,7 @@ void pkgconf_queue_push(pkgconf_list_t *list, const char *package) { - pkgconf_queue_t *pkgq = calloc(sizeof(pkgconf_queue_t), 1); + pkgconf_queue_t *pkgq = calloc(1, sizeof(pkgconf_queue_t)); pkgq->package = strdup(package); pkgconf_node_insert_tail(&pkgq->iter, pkgq, list); --- a/libpkgconf/tuple.c +++ b/libpkgconf/tuple.c @@ -139,7 +139,7 @@ static char * dequote(const char *value) { - char *buf = calloc((strlen(value) + 1) * 2, 1); + char *buf = calloc(1, (strlen(value) + 1) * 2); char *bptr = buf; const char *i; char quote = 0; @@ -180,7 +180,7 @@ pkgconf_tuple_add(const pkgconf_client_t *client, pkgconf_list_t *list, const char *key, const char *value, bool parse) { char *dequote_value; - pkgconf_tuple_t *tuple = calloc(sizeof(pkgconf_tuple_t), 1); + pkgconf_tuple_t *tuple = calloc(1, sizeof(pkgconf_tuple_t)); pkgconf_tuple_find_delete(list, key);