details:   http://freenginx.org/hg/nginx/rev/a287b197e342
branches:  
changeset: 9351:a287b197e342
user:      Maxim Dounin <mdou...@mdounin.ru>
date:      Thu May 08 17:29:06 2025 +0300
description:
Compatibility with -Wunterminated-string-initialization in GCC 15.

Builds with recently released GCC 15 currently fail due to
-Wunterminated-string-initialization (introduced in -Wextra), which warns
about attempts to initialize a character array with a string literal
if the trailing NUL character doesn't fit (perfectly valid in C, but
might be unintentional).

Fix is to use arrays for initialization instead of string literals, or
switch to using character arrays of unknown size where appropriate.

diffstat:

 src/event/quic/ngx_event_quic_protection.c |  19 ++++++++++++-------
 src/http/v2/ngx_http_v2_filter_module.c    |   6 +++---
 2 files changed, 15 insertions(+), 10 deletions(-)

diffs (66 lines):

diff --git a/src/event/quic/ngx_event_quic_protection.c 
b/src/event/quic/ngx_event_quic_protection.c
--- a/src/event/quic/ngx_event_quic_protection.c
+++ b/src/event/quic/ngx_event_quic_protection.c
@@ -122,9 +122,10 @@ ngx_quic_keys_set_initial_secret(ngx_qui
     ngx_quic_secret_t   *client, *server;
     ngx_quic_ciphers_t   ciphers;
 
-    static const uint8_t salt[20] =
-        "\x38\x76\x2c\xf7\xf5\x59\x34\xb3\x4d\x17"
-        "\x9a\xe6\xa4\xc8\x0c\xad\xcc\xbb\x7f\x0a";
+    static const uint8_t salt[20] = {
+        0x38, 0x76, 0x2c, 0xf7, 0xf5, 0x59, 0x34, 0xb3, 0x4d, 0x17,
+        0x9a, 0xe6, 0xa4, 0xc8, 0x0c, 0xad, 0xcc, 0xbb, 0x7f, 0x0a
+    };
 
     client = &keys->secrets[ssl_encryption_initial].client;
     server = &keys->secrets[ssl_encryption_initial].server;
@@ -936,10 +937,14 @@ ngx_quic_create_retry_packet(ngx_quic_he
     ngx_quic_ciphers_t   ciphers;
 
     /* 5.8.  Retry Packet Integrity */
-    static u_char     key_data[16] =
-        "\xbe\x0c\x69\x0b\x9f\x66\x57\x5a\x1d\x76\x6b\x54\xe3\x68\xc8\x4e";
-    static u_char     nonce[NGX_QUIC_IV_LEN] =
-        "\x46\x15\x99\xd3\x5d\x63\x2b\xf2\x23\x98\x25\xbb";
+    static u_char     key_data[16] = {
+        0xbe, 0x0c, 0x69, 0x0b, 0x9f, 0x66, 0x57, 0x5a, 0x1d, 0x76,
+        0x6b, 0x54, 0xe3, 0x68, 0xc8, 0x4e
+    };
+    static u_char     nonce[NGX_QUIC_IV_LEN] = {
+        0x46, 0x15, 0x99, 0xd3, 0x5d, 0x63, 0x2b, 0xf2, 0x23, 0x98,
+        0x25, 0xbb
+    };
     static ngx_str_t  in = ngx_string("");
 
     ad.data = res->data;
diff --git a/src/http/v2/ngx_http_v2_filter_module.c 
b/src/http/v2/ngx_http_v2_filter_module.c
--- a/src/http/v2/ngx_http_v2_filter_module.c
+++ b/src/http/v2/ngx_http_v2_filter_module.c
@@ -116,7 +116,7 @@ ngx_http_v2_header_filter(ngx_http_reque
     u_char                     addr[NGX_SOCKADDR_STRLEN];
 
 #if (NGX_HTTP_GZIP)
-    static const u_char accept_encoding[12] =
+    static const u_char accept_encoding[] =
         "\x8b\x84\x84\x2d\x69\x5b\x05\x44\x3c\x86\xaa\x6f";
 #endif
 
@@ -341,7 +341,7 @@ ngx_http_v2_header_filter(ngx_http_reque
 #if (NGX_HTTP_GZIP)
     if (r->gzip_vary) {
         if (clcf->gzip_vary) {
-            len += 1 + sizeof(accept_encoding);
+            len += 1 + sizeof(accept_encoding) - 1;
 
         } else {
             r->gzip_vary = 0;
@@ -568,7 +568,7 @@ ngx_http_v2_header_filter(ngx_http_reque
                        "http2 output header: \"vary: Accept-Encoding\"");
 
         *pos++ = ngx_http_v2_inc_indexed(NGX_HTTP_V2_VARY_INDEX);
-        pos = ngx_cpymem(pos, accept_encoding, sizeof(accept_encoding));
+        pos = ngx_cpymem(pos, accept_encoding, sizeof(accept_encoding) - 1);
     }
 #endif
 

Reply via email to