From 3c1c98a43413e429459ca7d3615659f8149534b8 Mon Sep 17 00:00:00 2001 From: NIIBE Yutaka Date: Fri, 13 Aug 2021 14:52:03 +0900 Subject: [PATCH] core: Use flexible array member if compiler has support. * configure.ac (AC_C_FLEXIBLE_ARRAY_MEMBER): Add. * src/engine-gpg.c (struct arg_and_data_s): Use FLEXIBLE_ARRAY_MEMBER. (_add_arg): Use offsetof instead of sizeof. (add_data): Likewise. -- Before this fix, GCC 11 warns (with its bound checking feature). Signed-off-by: NIIBE Yutaka --- configure.ac | 1 + src/engine-gpg.c | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/configure.ac b/configure.ac index 6cefc090..296553e3 100644 --- a/configure.ac +++ b/configure.ac @@ -543,6 +543,7 @@ AC_CHECK_HEADERS_ONCE([locale.h sys/select.h sys/uio.h argp.h stdint.h # Type checks. AC_C_INLINE +AC_C_FLEXIBLE_ARRAY_MEMBER AC_CHECK_SIZEOF(unsigned int) AC_SYS_LARGEFILE AC_TYPE_OFF_T diff --git a/src/engine-gpg.c b/src/engine-gpg.c index b51ea173..ff037920 100644 --- a/src/engine-gpg.c +++ b/src/engine-gpg.c @@ -59,7 +59,7 @@ struct arg_and_data_s int print_fd; /* Print the fd number and not the special form of it. */ int *arg_locp; /* Write back the argv idx of this argument when building command line to this location. */ - char arg[1]; /* Used if data above is not used. */ + char arg[FLEXIBLE_ARRAY_MEMBER]; /* Used if data above is not used. */ }; @@ -233,7 +233,7 @@ _add_arg (engine_gpg_t gpg, const char *prefix, const char *arg, size_t arglen, assert (gpg); assert (arg); - a = malloc (sizeof *a + prefixlen + arglen); + a = malloc (offsetof (struct arg_and_data_s, arg) + prefixlen + arglen + 1); if (!a) return gpg_error_from_syserror (); @@ -307,7 +307,7 @@ add_data (engine_gpg_t gpg, gpgme_data_t data, int dup_to, int inbound) assert (gpg); assert (data); - a = malloc (sizeof *a - 1); + a = malloc (offsetof (struct arg_and_data_s, arg)); if (!a) return gpg_error_from_syserror (); a->next = NULL;