aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNIIBE Yutaka <[email protected]>2021-08-13 05:52:03 +0000
committerNIIBE Yutaka <[email protected]>2021-08-13 05:52:03 +0000
commit3c1c98a43413e429459ca7d3615659f8149534b8 (patch)
tree2f05ddd18a00d563e783b2c5e53acdb3354b4eea
parentcore: Fix results returned by gpgme_data_* functions (diff)
downloadgpgme-3c1c98a43413e429459ca7d3615659f8149534b8.tar.gz
gpgme-3c1c98a43413e429459ca7d3615659f8149534b8.zip
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 <[email protected]>
-rw-r--r--configure.ac1
-rw-r--r--src/engine-gpg.c6
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;