From de1cf63d268b8a1c5698e64309ce67f0777d1a47 Mon Sep 17 00:00:00 2001 From: Joe Orton Date: Fri, 16 May 2025 09:58:55 +0100 Subject: [PATCH] Fix GCC warning in msc_headers_to_buffer(): In file included from /usr/include/stdio.h:970, from modsecurity.h:18, from msc_util.c:15: In function 'sprintf', inlined from 'msc_headers_to_buffer' at msc_util.c:2331:17: /usr/include/bits/stdio2.h:30:10: warning: '__sprintf_chk' argument 5 overlaps destination object 'buffer' [-Wrestrict] 30 | return __builtin___sprintf_chk (__s, __USE_FORTIFY_LEVEL - 1, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 31 | __glibc_objsize (__s), __fmt, | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 32 | __va_arg_pack ()); | ~~~~~~~~~~~~~~~~~ msc_util.c: In function 'msc_headers_to_buffer': msc_util.c:2306:64: note: destination object referenced by 'restrict'-qualified argument 1 was declared here 2306 | int msc_headers_to_buffer(const apr_array_header_t *arr, char *buffer, | ~~~~~~^~~~~~ --- apache2/msc_util.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apache2/msc_util.c b/apache2/msc_util.c index 33f36e81..471a98a8 100644 --- a/apache2/msc_util.c +++ b/apache2/msc_util.c @@ -2310,9 +2310,11 @@ int msc_headers_to_buffer(const apr_array_header_t *arr, char *buffer, int write_to_buffer = 0; int i = 0; const apr_table_entry_t *te = NULL; + char *ptr = NULL; if (buffer != NULL && buffer_length > 0) { write_to_buffer = 1; + ptr = buffer; } te = (apr_table_entry_t *)arr->elts; @@ -2328,7 +2330,9 @@ int msc_headers_to_buffer(const apr_array_header_t *arr, char *buffer, goto not_enough_memory; } - sprintf(buffer, "%s%s: %s\n", buffer, key, value); + assert(ptr && ptr < buffer + buffer_length); + sprintf(ptr, "%s: %s\n", key, value); + ptr = buffer + headers_length; /* for the next entry. */ } }