]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
SVCB: on parse error, throw instead of truncate. Fixes #10442 10511/head
authorPeter van Dijk <peter.van.dijk@powerdns.com>
Mon, 21 Jun 2021 10:18:04 +0000 (12:18 +0200)
committerPeter van Dijk <peter.van.dijk@powerdns.com>
Mon, 21 Jun 2021 10:24:19 +0000 (12:24 +0200)
pdns/dnslabeltext.rl
pdns/test-dnsrecords_cc.cc

index 373134573995617583b17c8c2029920cace85e4f..87a5799672f6eb1107deb2113e4316af98fa1f59 100644 (file)
@@ -293,6 +293,10 @@ size_t parseSVCBValueListFromParsedRFC1035CharString(const std::string &in, std:
   (void) dns_text_to_value_list_en_main;
   %% write exec;
 
+  if ( cs < dns_text_to_value_list_first_final ) {
+          throw runtime_error("Unable to parse DNS SVCB value list '"+in+"'");
+  }
+
   return counter;
 }
 
index 6a1224e2e16d25f7a9bb2bd84918e067ca423af7..6c66cb2312c42a3bbd9d53b250cbd4149a30e71d 100644 (file)
@@ -491,6 +491,13 @@ BOOST_AUTO_TEST_CASE(test_unknown_records_in) {
   }
 }
 
+// test that we reject invalid SVCB escaping
+BOOST_AUTO_TEST_CASE(test_svcb_records_in) {
+
+  BOOST_CHECK_THROW(auto invalidSVCB1=DNSRecordContent::mastermake(QType::SVCB, QClass::IN, R"FOO(1 . alpn=foo\\)FOO"), std::runtime_error);
+
+}
+
 // special record test, because EUI are odd
 BOOST_AUTO_TEST_CASE(test_eui_records_in) {