Add -Wtype-limits to QUIC This removes comparisons that the compiler believes are guaranteed to always have the same outcome. To ensure the compile-time property is always there I've added static_asserts(). gfe-relnote: n/a, compile-only PiperOrigin-RevId: 253692720 Change-Id: I17602bcd9e20abb19f7e84109a67a40b559bbbf6
diff --git a/quic/core/quic_framer.cc b/quic/core/quic_framer.cc index 1aec0bf..6446ef8 100644 --- a/quic/core/quic_framer.cc +++ b/quic/core/quic_framer.cc
@@ -4937,8 +4937,12 @@ return false; } if (!no_stream_frame_length) { - if ((frame.data_length > std::numeric_limits<uint16_t>::max()) || - !writer->WriteUInt16(static_cast<uint16_t>(frame.data_length))) { + static_assert( + std::numeric_limits<typeof(frame.data_length)>::max() <= + std::numeric_limits<uint16_t>::max(), + "If frame.data_length can hold more than a uint16_t than we need to " + "check that frame.data_length <= std::numeric_limits<uint16_t>::max()"); + if (!writer->WriteUInt16(static_cast<uint16_t>(frame.data_length))) { QUIC_BUG << "Writing stream frame length failed"; return false; }
diff --git a/quic/platform/api/quic_socket_address.cc b/quic/platform/api/quic_socket_address.cc index eefad84..089c91c 100644 --- a/quic/platform/api/quic_socket_address.cc +++ b/quic/platform/api/quic_socket_address.cc
@@ -38,12 +38,14 @@ QuicSocketAddress::QuicSocketAddress(const sockaddr* saddr, socklen_t len) { sockaddr_storage storage; - if (len < 0 || + static_assert(std::numeric_limits<socklen_t>::max() >= sizeof(storage), + "Cannot cast sizeof(storage) to socklen_t as it does not fit"); + if (len < static_cast<socklen_t>(sizeof(sockaddr)) || (saddr->sa_family == AF_INET && - static_cast<size_t>(len) < sizeof(sockaddr_in)) || + len < static_cast<socklen_t>(sizeof(sockaddr_in))) || (saddr->sa_family == AF_INET6 && - static_cast<size_t>(len) < sizeof(sockaddr_in6)) || - static_cast<size_t>(len) > sizeof(storage)) { + len < static_cast<socklen_t>(sizeof(sockaddr_in6))) || + len > static_cast<socklen_t>(sizeof(storage))) { QUIC_BUG << "Socket address of invalid length provided"; return; }