From 744e059f310ab7832f6781f673474e2924d02b4e Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Fri, 1 Dec 2023 03:19:04 +0000 Subject: [PATCH] example, tests: fix/silence `-Wformat-truncation=2` gcc warnings Then sync this warning option with curl. Seems like a false positive and/or couldn't figure how to fix it, so silence: ``` example/ssh2.c:227:38: error: '%s' directive output may be truncated writing likely 1 or more bytes into a region of size 0 [-Werror=format-truncation=] 227 | snprintf(fn1, fn1sz, "%s/%s", h, pubkey); | ^~ example/ssh2.c:227:34: note: assuming directive output of 1 byte 227 | snprintf(fn1, fn1sz, "%s/%s", h, pubkey); | ^~~~~~~ example/ssh2.c:227:13: note: 'snprintf' output 3 or more bytes (assuming 4) into a destination of size 2 227 | snprintf(fn1, fn1sz, "%s/%s", h, pubkey); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ example/ssh2.c:228:38: error: '%s' directive output may be truncated writing likely 1 or more bytes into a region of size 0 [-Werror=format-truncation=] 228 | snprintf(fn2, fn2sz, "%s/%s", h, privkey); | ^~ example/ssh2.c:228:34: note: assuming directive output of 1 byte 228 | snprintf(fn2, fn2sz, "%s/%s", h, privkey); | ^~~~~~~ example/ssh2.c:228:13: note: 'snprintf' output 3 or more bytes (assuming 4) into a destination of size 2 228 | snprintf(fn2, fn2sz, "%s/%s", h, privkey); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ``` Ref: https://github.com/libssh2/libssh2/actions/runs/7055480458/job/19205970397#step:10:98 Fix: ``` tests/openssh_fixture.c:116:38: error: ' 2>&1' directive output may be truncated writing 5 bytes into a region of size between 1 and 1024 [-Werror=format-truncation=] tests/openssh_fixture.c:116:11: note: 'snprintf' output between 6 and 1029 bytes into a destination of size 1024 ``` Ref: https://github.com/libssh2/libssh2/actions/runs/7055480458/job/19205969221#step:10:51 Tested via #1257 --- acinclude.m4 | 2 +- cmake/PickyWarnings.cmake | 2 +- example/ssh2.c | 8 ++++++++ tests/openssh_fixture.c | 2 +- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/acinclude.m4 b/acinclude.m4 index a41a31eafc..5b57c28e59 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -499,7 +499,7 @@ AC_DEFUN([CURL_CC_DEBUG_OPTS], CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [restrict]) CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [alloc-zero]) tmp_CFLAGS="$tmp_CFLAGS -Wformat-overflow=2" - tmp_CFLAGS="$tmp_CFLAGS -Wformat-truncation=1" # =2 causes false positives + tmp_CFLAGS="$tmp_CFLAGS -Wformat-truncation=2" fi # dnl Only gcc 10 or later diff --git a/cmake/PickyWarnings.cmake b/cmake/PickyWarnings.cmake index 97ffed740b..4795c27706 100644 --- a/cmake/PickyWarnings.cmake +++ b/cmake/PickyWarnings.cmake @@ -193,7 +193,7 @@ elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR CMAKE_C_COMPILER_I -Walloc-zero # gcc 7.0 -Wduplicated-branches # gcc 7.0 -Wformat-overflow=2 # gcc 7.0 - -Wformat-truncation=1 # gcc 7.0 (=2 causes false positives) + -Wformat-truncation=2 # gcc 7.0 -Wrestrict # gcc 7.0 ) endif() diff --git a/example/ssh2.c b/example/ssh2.c index 08e2398f93..513fdf6b62 100644 --- a/example/ssh2.c +++ b/example/ssh2.c @@ -222,10 +222,18 @@ int main(int argc, char *argv[]) fprintf(stderr, "out of memory\n"); goto shutdown; } + /* Avoid false positives */ +#if defined(__GNUC__) && __GNUC__ >= 7 +#pragma GCC diagnostic push +#pragma GCC diagnostic warning "-Wformat-truncation=1" +#endif /* Using asprintf() here would be much cleaner, but less portable */ snprintf(fn1, fn1sz, "%s/%s", h, pubkey); snprintf(fn2, fn2sz, "%s/%s", h, privkey); +#if defined(__GNUC__) && __GNUC__ >= 7 +#pragma GCC diagnostic pop +#endif if(libssh2_userauth_publickey_fromfile(session, username, fn1, fn2, diff --git a/tests/openssh_fixture.c b/tests/openssh_fixture.c index e43a5d85f1..deafc29399 100644 --- a/tests/openssh_fixture.c +++ b/tests/openssh_fixture.c @@ -85,7 +85,7 @@ static int run_command_varg(char **output, const char *command, va_list args) FILE *pipe; char command_buf[BUFSIZ]; - char buf[BUFSIZ]; + char buf[BUFSIZ + sizeof(redirect_stderr)]; int ret; size_t buf_len;