mirror of
https://github.com/curl/curl.git
synced 2026-08-26 21:35:33 +03:00
build: enable missing OpenSSF-recommended warnings, with fixes
https://best.openssf.org/Compiler-Hardening-Guides/Compiler-Options-Hardening-Guide-for-C-and-C++.html as of 2023-11-29 [1]. Enable new recommended warnings (except `-Wsign-conversion`): - enable `-Wformat=2` for clang (in both cmake and autotools). - add `CURL_PRINTF()` internal attribute and mark functions accepting printf arguments with it. This is a copy of existing `CURL_TEMP_PRINTF()` but using `__printf__` to make it compatible with redefinting the `printf` symbol: https://gcc.gnu.org/onlinedocs/gcc-3.0.4/gcc_5.html#SEC94 - fix `CURL_PRINTF()` and existing `CURL_TEMP_PRINTF()` for mingw-w64 and enable it on this platform. - enable `-Wimplicit-fallthrough`. - enable `-Wtrampolines`. - add `-Wsign-conversion` commented with a FIXME. - cmake: enable `-pedantic-errors` the way we do it with autotools. Follow-up tod5c0351055#2747 - lib/curl_trc.h: use `CURL_FORMAT()`, this also fixes it to enable format checks. Previously it was always disabled due to the internal `printf` macro. Fix them: - fix bug where an `set_ipv6_v6only()` call was missed in builds with `--disable-verbose` / `CURL_DISABLE_VERBOSE_STRINGS=ON`. - add internal `FALLTHROUGH()` macro. - replace obsolete fall-through comments with `FALLTHROUGH()`. - fix fallthrough markups: Delete redundant ones (showing up as warnings in most cases). Add missing ones. Fix indentation. - silence `-Wformat-nonliteral` warnings with llvm/clang. - fix one `-Wformat-nonliteral` warning. - fix new `-Wformat` and `-Wformat-security` warnings. - fix `CURL_FORMAT_SOCKET_T` value for mingw-w64. Also move its definition to `lib/curl_setup.h` allowing use in `tests/server`. - lib: fix two wrongly passed string arguments in log outputs. Co-authored-by: Jay Satiro - fix new `-Wformat` warnings on mingw-w64. [1]56c0fde389/docs/Compiler-Hardening-Guides/Compiler-Options-Hardening-Guide-for-C-and-C%2B%2B.mdCloses #12489
This commit is contained in:
parent
ba8752e556
commit
3829759bd0
88 changed files with 531 additions and 318 deletions
|
|
@ -439,11 +439,8 @@ static int myssh_is_known(struct Curl_easy *data)
|
|||
keymatch = CURLKHMATCH_OK;
|
||||
break;
|
||||
case SSH_KNOWN_HOSTS_OTHER:
|
||||
/* fallthrough */
|
||||
case SSH_KNOWN_HOSTS_NOT_FOUND:
|
||||
/* fallthrough */
|
||||
case SSH_KNOWN_HOSTS_UNKNOWN:
|
||||
/* fallthrough */
|
||||
case SSH_KNOWN_HOSTS_ERROR:
|
||||
keymatch = CURLKHMATCH_MISSING;
|
||||
break;
|
||||
|
|
@ -459,7 +456,6 @@ static int myssh_is_known(struct Curl_easy *data)
|
|||
keymatch = CURLKHMATCH_OK;
|
||||
break;
|
||||
case SSH_SERVER_FILE_NOT_FOUND:
|
||||
/* fallthrough */
|
||||
case SSH_SERVER_NOT_KNOWN:
|
||||
keymatch = CURLKHMATCH_MISSING;
|
||||
break;
|
||||
|
|
@ -623,7 +619,7 @@ restart:
|
|||
if(rc < 0)
|
||||
return SSH_ERROR;
|
||||
|
||||
/* FALLTHROUGH */
|
||||
FALLTHROUGH();
|
||||
case 1:
|
||||
sshc->kbd_state = 1;
|
||||
|
||||
|
|
@ -698,7 +694,7 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block)
|
|||
ssh_set_blocking(sshc->ssh_session, 0);
|
||||
|
||||
state(data, SSH_S_STARTUP);
|
||||
/* FALLTHROUGH */
|
||||
FALLTHROUGH();
|
||||
|
||||
case SSH_S_STARTUP:
|
||||
rc = ssh_connect(sshc->ssh_session);
|
||||
|
|
@ -713,7 +709,7 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block)
|
|||
|
||||
state(data, SSH_HOSTKEY);
|
||||
|
||||
/* FALLTHROUGH */
|
||||
FALLTHROUGH();
|
||||
case SSH_HOSTKEY:
|
||||
|
||||
rc = myssh_is_known(data);
|
||||
|
|
@ -723,7 +719,7 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block)
|
|||
}
|
||||
|
||||
state(data, SSH_AUTHLIST);
|
||||
/* FALLTHROUGH */
|
||||
FALLTHROUGH();
|
||||
case SSH_AUTHLIST:{
|
||||
sshc->authed = FALSE;
|
||||
|
||||
|
|
@ -904,7 +900,7 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block)
|
|||
break;
|
||||
}
|
||||
state(data, SSH_AUTH_PASS);
|
||||
/* FALLTHROUGH */
|
||||
FALLTHROUGH();
|
||||
|
||||
case SSH_AUTH_PASS:
|
||||
rc = ssh_userauth_password(sshc->ssh_session, NULL, conn->passwd);
|
||||
|
|
@ -967,7 +963,7 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block)
|
|||
break;
|
||||
}
|
||||
state(data, SSH_SFTP_REALPATH);
|
||||
/* FALLTHROUGH */
|
||||
FALLTHROUGH();
|
||||
case SSH_SFTP_REALPATH:
|
||||
/*
|
||||
* Get the "home" directory
|
||||
|
|
@ -1554,7 +1550,7 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block)
|
|||
sshc->readdir_longentry = NULL;
|
||||
|
||||
state(data, SSH_SFTP_READDIR_BOTTOM);
|
||||
/* FALLTHROUGH */
|
||||
FALLTHROUGH();
|
||||
case SSH_SFTP_READDIR_BOTTOM:
|
||||
if(Curl_dyn_addn(&sshc->readdir_buf, "\n", 1))
|
||||
result = CURLE_OUT_OF_MEMORY;
|
||||
|
|
@ -1878,7 +1874,7 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block)
|
|||
break;
|
||||
}
|
||||
state(data, SSH_SCP_DOWNLOAD);
|
||||
/* FALLTHROUGH */
|
||||
FALLTHROUGH();
|
||||
|
||||
case SSH_SCP_DOWNLOAD:{
|
||||
curl_off_t bytecount;
|
||||
|
|
@ -1942,7 +1938,7 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block)
|
|||
ssh_set_blocking(sshc->ssh_session, 0);
|
||||
|
||||
state(data, SSH_SESSION_DISCONNECT);
|
||||
/* FALLTHROUGH */
|
||||
FALLTHROUGH();
|
||||
|
||||
case SSH_SESSION_DISCONNECT:
|
||||
/* during weird times when we've been prematurely aborted, the channel
|
||||
|
|
@ -1965,7 +1961,7 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block)
|
|||
data->state.most_recent_ftp_entrypath = NULL;
|
||||
|
||||
state(data, SSH_SESSION_FREE);
|
||||
/* FALLTHROUGH */
|
||||
FALLTHROUGH();
|
||||
case SSH_SESSION_FREE:
|
||||
if(sshc->ssh_session) {
|
||||
ssh_free(sshc->ssh_session);
|
||||
|
|
@ -2016,7 +2012,6 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block)
|
|||
break;
|
||||
|
||||
case SSH_QUIT:
|
||||
/* fallthrough, just stop! */
|
||||
default:
|
||||
/* internal error */
|
||||
sshc->nextstate = SSH_NO_STATE;
|
||||
|
|
@ -2607,7 +2602,7 @@ static ssize_t sftp_recv(struct Curl_easy *data, int sockindex,
|
|||
return -1;
|
||||
}
|
||||
|
||||
/* FALLTHROUGH */
|
||||
FALLTHROUGH();
|
||||
case 1:
|
||||
conn->proto.sshc.sftp_recv_state = 1;
|
||||
|
||||
|
|
|
|||
|
|
@ -589,10 +589,9 @@ static CURLcode ssh_knownhost(struct Curl_easy *data)
|
|||
|
||||
switch(rc) {
|
||||
default: /* unknown return codes will equal reject */
|
||||
/* FALLTHROUGH */
|
||||
case CURLKHSTAT_REJECT:
|
||||
state(data, SSH_SESSION_FREE);
|
||||
/* FALLTHROUGH */
|
||||
FALLTHROUGH();
|
||||
case CURLKHSTAT_DEFER:
|
||||
/* DEFER means bail out but keep the SSH_HOSTKEY state */
|
||||
result = sshc->actualcode = CURLE_PEER_FAILED_VERIFICATION;
|
||||
|
|
@ -601,9 +600,8 @@ static CURLcode ssh_knownhost(struct Curl_easy *data)
|
|||
/* remove old host+key that doesn't match */
|
||||
if(host)
|
||||
libssh2_knownhost_del(sshc->kh, host);
|
||||
/* FALLTHROUGH */
|
||||
FALLTHROUGH();
|
||||
case CURLKHSTAT_FINE:
|
||||
/* FALLTHROUGH */
|
||||
case CURLKHSTAT_FINE_ADD_TO_FILE:
|
||||
/* proceed */
|
||||
if(keycheck != LIBSSH2_KNOWNHOST_CHECK_MATCH) {
|
||||
|
|
@ -997,7 +995,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block)
|
|||
}
|
||||
|
||||
state(data, SSH_S_STARTUP);
|
||||
/* FALLTHROUGH */
|
||||
FALLTHROUGH();
|
||||
|
||||
case SSH_S_STARTUP:
|
||||
rc = session_startup(sshc->ssh_session, sock);
|
||||
|
|
@ -1016,7 +1014,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block)
|
|||
|
||||
state(data, SSH_HOSTKEY);
|
||||
|
||||
/* FALLTHROUGH */
|
||||
FALLTHROUGH();
|
||||
case SSH_HOSTKEY:
|
||||
/*
|
||||
* Before we authenticate we should check the hostkey's fingerprint
|
||||
|
|
@ -3024,7 +3022,6 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block)
|
|||
break;
|
||||
|
||||
case SSH_QUIT:
|
||||
/* fallthrough, just stop! */
|
||||
default:
|
||||
/* internal error */
|
||||
sshc->nextstate = SSH_NO_STATE;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue