This is an automated email from the ASF dual-hosted git repository. cmcfarlen pushed a commit to branch 10.0.x in repository https://gitbox.apache.org/repos/asf/trafficserver.git
commit 4d979b2c5f9117d9296d737481ec36a566e66cc5 Author: Pavel Vazharov <[email protected]> AuthorDate: Thu May 16 18:21:52 2024 +0300 Remove the need of `-Wno-stringop-overflow` warning suppression (#11357) * Remove the need of -Wno-stringop-overflow warning suppression The problem was that GCC complained for possibly incorrect usage of strncat due to the last argument being equal to the source string length. The last argument of strncat is supposed to be the remaining free space in the destination buffer. Replaced the usage of strncat with the ATS function ink_strlcat. * Fix bogus warning for strncat usage in s3_auth plugin given by GCC 11 The change is to use TSstrlcat instead of strncat. It seems to me the GCC analyzer is wrong in this case and it issues the warning because of such usage: str_concat(&left[loff], (left_size - loff), "/", 1); and the str_concat internally does std::min(dst_len, src_len) for the strncat size argument. So GCC sees the possibility that the last argument of strncat can be equal to the legnth of the source argument and issues the warning. (cherry picked from commit 7220d700a20d333ceb9e051864d97ec98878c63f) --- CMakeLists.txt | 2 +- lib/swoc/unit_tests/CMakeLists.txt | 1 - plugins/s3_auth/s3_auth.cc | 2 +- src/iocore/net/OCSPStapling.cc | 4 ++-- 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 96315cfa18..ba33bc652e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -589,7 +589,7 @@ add_compile_options(-pipe -Wall -Wextra -Wno-unused-parameter) add_compile_options( "$<$<COMPILE_LANGUAGE:CXX>:-Wno-noexcept-type;-Wsuggest-override;-Wno-vla-extension;-fno-strict-aliasing>" ) -add_compile_options("$<$<CXX_COMPILER_ID:GNU>:-Wno-format-truncation;-Wno-stringop-overflow>") +add_compile_options("$<$<CXX_COMPILER_ID:GNU>:-Wno-format-truncation>") if(NOT EXTERNAL_YAML_CPP) include(subproject_version) diff --git a/lib/swoc/unit_tests/CMakeLists.txt b/lib/swoc/unit_tests/CMakeLists.txt index bd2fe05269..d3a66ff615 100644 --- a/lib/swoc/unit_tests/CMakeLists.txt +++ b/lib/swoc/unit_tests/CMakeLists.txt @@ -39,7 +39,6 @@ if(CMAKE_COMPILER_IS_GNUCXX) -Werror -Wno-unused-parameter -Wno-format-truncation - -Wno-stringop-overflow -Wno-invalid-offsetof ) # stop the compiler from complaining about unused variable in structured binding diff --git a/plugins/s3_auth/s3_auth.cc b/plugins/s3_auth/s3_auth.cc index cbd7e3f892..6b8e868dab 100644 --- a/plugins/s3_auth/s3_auth.cc +++ b/plugins/s3_auth/s3_auth.cc @@ -758,7 +758,7 @@ str_concat(char *dst, size_t dst_len, const char *src, size_t src_len) size_t to_copy = std::min(dst_len, src_len); if (to_copy > 0) { - strncat(dst, src, to_copy); + TSstrlcat(dst, src, to_copy); } return to_copy; diff --git a/src/iocore/net/OCSPStapling.cc b/src/iocore/net/OCSPStapling.cc index 8e291879b1..2093676d17 100644 --- a/src/iocore/net/OCSPStapling.cc +++ b/src/iocore/net/OCSPStapling.cc @@ -1163,8 +1163,8 @@ make_url_for_get(TS_OCSP_REQUEST *req, const char *base_url) // Append '/' if base_url does not end with it if (url->buf()[url->size() - 1] != '/') { - strncat(url->end(), "/", 1); - url->fill(1); + written = ink_strlcat(url->end(), "/", url->write_avail()); + url->fill(written); } written = ink_strlcat(url->end(), ocsp_escaped, url->write_avail());
