From bed71186fbc25722ae7dae377ce5c0dd9c22aaae Mon Sep 17 00:00:00 2001 From: Brian Neradt Date: Tue, 22 Feb 2022 12:04:19 -0600 Subject: [PATCH 1/2] Fix Clang 13.0.1 and GCC 12.0.1 Compiler Warnings (#8690) This cherry-picks two commits from master: Fix Clang 13.0.1 compiler warnings (#8685) This fixes a couple compiler warnings raised by Clang 13.0.1. (cherry picked from commit 96ce993fa53a05b872c5041629e3aac0bc15d56d) Fix warnings from GCC 12.0.1 (#8684) This patch fixes warnings generated by GCC 12.0.1. The warnings involved the use of the deprecated std::binary_function, std::unary_function, and std::iterator interfaces. The use of these was considered more confusing than explicitly declaring the associated types. Therefore this patch replaces the use of these deprecated interfaces with the declaration of the associated types. (cherry picked from commit 0ae34d4d1699d978f6938027efb2ecb9ae05c89a) (cherry picked from commit 1a37ae9efaf40ee19e3a735828c03ed25eac6a4f) --- example/plugins/cpp-api/boom/boom.cc | 5 ++++- include/tscore/IntrusivePtr.h | 6 +++++- include/tscpp/api/Headers.h | 10 ++++++++-- iocore/net/quic/QUICFrame.h | 5 ++++- iocore/net/quic/QUICVersionNegotiator.cc | 2 -- src/tscore/HostLookup.cc | 6 +++++- src/wccp/WccpMeta.h | 6 +++++- 7 files changed, 31 insertions(+), 9 deletions(-) diff --git a/example/plugins/cpp-api/boom/boom.cc b/example/plugins/cpp-api/boom/boom.cc index a312e7f2043..7a3a3234d66 100644 --- a/example/plugins/cpp-api/boom/boom.cc +++ b/example/plugins/cpp-api/boom/boom.cc @@ -98,13 +98,16 @@ GlobalPlugin *plugin; // Functor that decides whether the HTTP error can be rewritten or not. // Rewritable codes are: 2xx, 3xx, 4xx, 5xx and 6xx. // 1xx is NOT rewritable! -class IsRewritableCode : public std::unary_function +class IsRewritableCode { // could probably be replaced with mem_ptr_fun().. private: int current_code_; std::string current_code_string_; public: + using argument_type = std::string; + using result_type = bool; + explicit IsRewritableCode(int current_code) : current_code_(current_code) { std::ostringstream oss; diff --git a/include/tscore/IntrusivePtr.h b/include/tscore/IntrusivePtr.h index bfe63a3aee0..70cc671e394 100644 --- a/include/tscore/IntrusivePtr.h +++ b/include/tscore/IntrusivePtr.h @@ -330,9 +330,13 @@ template class IntrusivePtrDefaultPolicy static void finalize(T *t); /// Strict weak order for STL containers. - class Order : public std::binary_function, IntrusivePtr, bool> + class Order { public: + using first_argument_type = IntrusivePtr; + using second_argument_type = IntrusivePtr; + using result_type = bool; + /// Default constructor. Order() {} /// Compare by raw pointer. diff --git a/include/tscpp/api/Headers.h b/include/tscpp/api/Headers.h index 9e6daea8ef4..ffaffde81b5 100644 --- a/include/tscpp/api/Headers.h +++ b/include/tscpp/api/Headers.h @@ -109,12 +109,15 @@ class HeaderField; /** * @brief A header field value iterator iterates through all header fields. */ -class header_field_value_iterator : public std::iterator +class header_field_value_iterator { private: HeaderFieldValueIteratorState *state_; public: + using iterator_category = std::forward_iterator_tag; + using value_type = int; + /** * Constructor for header_field_value_iterator, this shouldn't need to be used directly. * @param bufp the TSMBuffer associated with the headers @@ -169,13 +172,16 @@ class header_field_value_iterator : public std::iterator +class header_field_iterator { private: HeaderFieldIteratorState *state_; header_field_iterator(void *hdr_buf, void *hdr_loc, void *field_loc); public: + using iterator_category = std::forward_iterator_tag; + using value_type = int; + ~header_field_iterator(); /** diff --git a/iocore/net/quic/QUICFrame.h b/iocore/net/quic/QUICFrame.h index 93cd692fc7c..a0b4af9077d 100644 --- a/iocore/net/quic/QUICFrame.h +++ b/iocore/net/quic/QUICFrame.h @@ -204,9 +204,12 @@ class QUICAckFrame : public QUICFrame class AckBlockSection { public: - class const_iterator : public std::iterator + class const_iterator { public: + using iterator_category = std::input_iterator_tag; + using value_type = QUICAckFrame::AckBlock; + const_iterator(uint8_t index, const std::vector *ack_blocks); const QUICAckFrame::AckBlock & diff --git a/iocore/net/quic/QUICVersionNegotiator.cc b/iocore/net/quic/QUICVersionNegotiator.cc index 43d2fbf5631..d26f4f88327 100644 --- a/iocore/net/quic/QUICVersionNegotiator.cc +++ b/iocore/net/quic/QUICVersionNegotiator.cc @@ -46,11 +46,9 @@ QUICVersionNegotiator::negotiate(const QUICPacket &packet) case QUICPacketType::VERSION_NEGOTIATION: { const QUICVersionNegotiationPacketR &vn_packet = static_cast(packet); uint16_t n_supported_version = vn_packet.nversions(); - uint16_t len = 0; for (int i = 0; i < n_supported_version; ++i) { QUICVersion version = vn_packet.supported_version(i); - len += sizeof(QUICVersion); if (QUICTypeUtil::is_supported_version(version)) { this->_status = QUICVersionNegotiationStatus::NEGOTIATED; diff --git a/src/tscore/HostLookup.cc b/src/tscore/HostLookup.cc index b695e0f47d1..440474e9456 100644 --- a/src/tscore/HostLookup.cc +++ b/src/tscore/HostLookup.cc @@ -231,7 +231,11 @@ struct CharIndexBlock { class CharIndex { public: - struct iterator : public std::iterator { + struct iterator { + using iterator_category = std::forward_iterator_tag; + using value_type = HostBranch; + using difference_type = int; + using self_type = iterator; struct State { diff --git a/src/wccp/WccpMeta.h b/src/wccp/WccpMeta.h index 464e8bafcea..11a9b09cf44 100644 --- a/src/wccp/WccpMeta.h +++ b/src/wccp/WccpMeta.h @@ -54,7 +54,11 @@ template struct TEST_IF_TRUE : public TEST_RESULT> }; // Helper for assigning a value to all instances in a container. -template struct TsAssignMember : public std::binary_function { +template struct TsAssignMember { + using first_argument_type = T; + using second_argument_type = A1; + using result_type = R; + R T::*_m; A1 _arg1; TsAssignMember(R T::*m, A1 const &arg1) : _m(m), _arg1(arg1) {} From 5d45f50e0eb99b501b0d2984b9eed2295c5fc960 Mon Sep 17 00:00:00 2001 From: Brian Neradt Date: Thu, 13 Jan 2022 15:03:39 -0600 Subject: [PATCH 2/2] LogFilter: fix NULL termination check (#8603) gcc-12 generated the following warning: proxy/logging/LogFilter.h: In function 'void wipeField(char**, char*, const char*)': proxy/logging/LogFilter.h:477:35: error: comparing the result of pointer addition '(new_param + 1)' and NULL [-Werror=address] 477 | if (new_param && (new_param + 1)) { | ~~~~~~~~~~~^~~~ That is indeed a bug. `new_param + 1` will always be non-NULL even if new_param is NULL because 1 will be added to it. The intention was to check for the string's null terminator at the offset, which is done via a dereference. (cherry picked from commit 9966c9b8210ade388598aa42ac49f960126bfff7) --- proxy/logging/LogFilter.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proxy/logging/LogFilter.h b/proxy/logging/LogFilter.h index 083dc08e6f0..749c044e5ac 100644 --- a/proxy/logging/LogFilter.h +++ b/proxy/logging/LogFilter.h @@ -474,7 +474,7 @@ wipeField(char **field, char *pattern, const char *uppercase_field) // search new param again const char *new_param = strchr(lookup_query_param + field_pos, '&'); - if (new_param && (new_param + 1)) { + if (new_param && *(new_param + 1)) { pattern_in_param_name = findPatternFromParamName(new_param + 1, pattern); } else { break;