GNU bug report logs -
#77835
[PATCH] Pacify GCC 15 -Wunterminated-string-initialization warnings
Previous Next
Reported by: Collin Funk <collin.funk1 <at> gmail.com>
Date: Wed, 16 Apr 2025 05:25:02 UTC
Severity: normal
Tags: patch
Done: Paul Eggert <eggert <at> cs.ucla.edu>
Bug is archived. No further changes may be made.
Full log
Message #8 received at 77835 <at> debbugs.gnu.org (full text, mbox):
> From: Collin Funk <collin.funk1 <at> gmail.com>
> Date: Tue, 15 Apr 2025 22:24:16 -0700
>
> GCC 15.0 enables -Wunterminated-string-initialization when using
> '-Wall -Wextra', which gets used when I run './configure'. This patch
> silences the warnings:
>
> fns.c: In function ‘hexbuf_digest’:
> fns.c:6019:40: warning: initializer-string for array of ‘char’ truncates NUL terminator but destination lacks ‘nonstring’ attribute (17 chars into 16 available) [-Wunterminated-string-initialization]
> 6019 | static char const hexdigit[16] = "0123456789abcdef";
> | ^~~~~~~~~~~~~~~~~~
Thanks.
> >From 1df4a867e9440885a5de846eb6fcd17e327fc328 Mon Sep 17 00:00:00 2001
> From: Collin Funk <collin.funk1 <at> gmail.com>
> Date: Tue, 15 Apr 2025 22:14:53 -0700
> Subject: [PATCH] Pacify GCC 15 -Wunterminated-string-initialization warnings
>
> * src/fns.c: Include <attribute.h>.
> (hexbuf_digest): Mark a variable with ATTRIBUTE_NONSTRING.
> * src/json.c: Include <attribute.h>.
> (json_out_string): Mark a variable with ATTRIBUTE_NONSTRING.
> ---
> src/fns.c | 3 ++-
> src/json.c | 3 ++-
> 2 files changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/src/fns.c b/src/fns.c
> index 3f109a81836..94367d69557 100644
> --- a/src/fns.c
> +++ b/src/fns.c
> @@ -19,6 +19,7 @@ Copyright (C) 1985-2025 Free Software Foundation, Inc.
>
> #include <config.h>
>
> +#include <attribute.h>
> #include <stdlib.h>
> #include <sys/random.h>
> #include <unistd.h>
> @@ -6016,7 +6017,7 @@ hexbuf_digest (char *hexbuf, void const *digest, int digest_size)
>
> for (int i = digest_size - 1; i >= 0; i--)
> {
> - static char const hexdigit[16] = "0123456789abcdef";
> + static char const hexdigit[16] ATTRIBUTE_NONSTRING = "0123456789abcdef";
> int p_i = p[i];
> hexbuf[2 * i] = hexdigit[p_i >> 4];
> hexbuf[2 * i + 1] = hexdigit[p_i & 0xf];
> diff --git a/src/json.c b/src/json.c
> index 5795c582ce0..7a34a5042c6 100644
> --- a/src/json.c
> +++ b/src/json.c
> @@ -19,6 +19,7 @@ Copyright (C) 2017-2025 Free Software Foundation, Inc.
>
> #include <config.h>
>
> +#include <attribute.h>
> #include <errno.h>
> #include <stddef.h>
> #include <stdint.h>
> @@ -323,7 +324,7 @@ json_out_string (json_out_t *jo, Lisp_Object str, int skip)
> {
> /* FIXME: this code is slow, make faster! */
>
> - static const char hexchar[16] = "0123456789ABCDEF";
> + static const char hexchar[16] ATTRIBUTE_NONSTRING = "0123456789ABCDEF";
> ptrdiff_t len = SBYTES (str);
> json_make_room (jo, len + 2);
> json_out_byte (jo, '"');
IMO, this is unnecessarily complex, and will also need us to make sure
this attribute is supported everywhere. Doesn't the below fix the
problem?
Paul, WDYT?
diff --git a/src/fns.c b/src/fns.c
index 3f109a8..6e7943f 100644
--- a/src/fns.c
+++ b/src/fns.c
@@ -6016,7 +6016,7 @@ hexbuf_digest (char *hexbuf, void const *digest, int digest_size)
for (int i = digest_size - 1; i >= 0; i--)
{
- static char const hexdigit[16] = "0123456789abcdef";
+ static char const hexdigit[17] = "0123456789abcdef";
int p_i = p[i];
hexbuf[2 * i] = hexdigit[p_i >> 4];
hexbuf[2 * i + 1] = hexdigit[p_i & 0xf];
diff --git a/src/json.c b/src/json.c
index 5795c58..94a82df 100644
--- a/src/json.c
+++ b/src/json.c
@@ -323,7 +323,7 @@ json_out_string (json_out_t *jo, Lisp_Object str, int skip)
{
/* FIXME: this code is slow, make faster! */
- static const char hexchar[16] = "0123456789ABCDEF";
+ static const char hexchar[17] = "0123456789ABCDEF";
ptrdiff_t len = SBYTES (str);
json_make_room (jo, len + 2);
json_out_byte (jo, '"');
This bug report was last modified 33 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.