]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dns.cc: use pdns::views::UnsignedCharView
authorOtto Moerbeek <otto.moerbeek@open-xchange.com>
Wed, 19 Jun 2024 11:10:15 +0000 (13:10 +0200)
committerOtto Moerbeek <otto.moerbeek@open-xchange.com>
Thu, 4 Jul 2024 07:23:04 +0000 (09:23 +0200)
Includes minor cleanup and additions to make UnsignedCharView usable for this use case.
Supersedes #14356
Fixes
/usr/include/c++/v1/__fwd/string_view.h:22:41: warning: 'char_traits<unsigned char>' is deprecated: char_traits<T> for T not equal to char, wchar_t, char8_t, char16_t or char32_t is non-standard and is provided for a temporary period. It will be removed in LLVM 19, so please migrate off of it. [-Wdeprecated-declarations]

(cherry picked from commit 949ea9456dbe76e78aeff5f6f37f218549d1b493)

pdns/dns.cc

index 99bbd72aa65e8749e66ee8237914427ab80ba681..5e7e45e1f604037a34084805734099c8a40ea28e 100644 (file)
@@ -24,6 +24,7 @@
 #endif
 #include "dns.hh"
 #include "misc.hh"
+#include "views.hh"
 #include <stdexcept>
 #include <iostream>
 #include <boost/algorithm/string.hpp>
@@ -102,27 +103,27 @@ std::string Opcode::to_s(uint8_t opcode) {
 }
 
 // goal is to hash based purely on the question name, and turn error into 'default'
-uint32_t hashQuestion(const uint8_t* packet, uint16_t packet_len, uint32_t init, bool& ok)
+uint32_t hashQuestion(const uint8_t* packet, uint16_t packet_len, uint32_t init, bool& wasOK)
 {
   if (packet_len < sizeof(dnsheader)) {
-    ok = false;
+    wasOK = false;
     return init;
   }
-  // C++ 17 does not have std::u8string_view
-  std::basic_string_view<uint8_t> name(packet + sizeof(dnsheader), packet_len - sizeof(dnsheader));
-  std::basic_string_view<uint8_t>::size_type len = 0;
+  // NOLINTNEXTLINE(cppcoreguidelines-pro-bounds-pointer-arithmetic)
+  pdns::views::UnsignedCharView name(packet + sizeof(dnsheader), packet_len - sizeof(dnsheader));
+  pdns::views::UnsignedCharView::size_type len = 0;
 
   while (len < name.length()) {
     uint8_t labellen = name[len++];
     if (labellen == 0) {
-      ok = true;
+      wasOK = true;
       // len is name.length() at max as it was < before the increment
       return burtleCI(name.data(), len, init);
     }
     len += labellen;
   }
   // We've encountered a label that is too long
-  ok = false;
+  wasOK = false;
   return init;
 }