From 430280109b4a27240be737258f118dd3a1ed8199 Mon Sep 17 00:00:00 2001 From: Peter van Dijk Date: Fri, 15 Nov 2024 12:47:13 +0100 Subject: [PATCH] SVCB parser: allow quotes around port= --- modules/tinydnsbackend/data | 1 + modules/tinydnsbackend/data.cdb | Bin 1356496 -> 1356573 bytes pdns/rcpgenerator.cc | 10 ++++++++-- .../tinydns-data-check/expected_result | 6 +++--- .../tests/svcb-servicemode/expected_result | 1 + .../svcb-servicemode/expected_result.dnssec | 1 + regression-tests/zones/example.com | 1 + 7 files changed, 15 insertions(+), 5 deletions(-) diff --git a/modules/tinydnsbackend/data b/modules/tinydnsbackend/data index dca063c8af..06c8f61611 100644 --- a/modules/tinydnsbackend/data +++ b/modules/tinydnsbackend/data @@ -20109,6 +20109,7 @@ :bar.svcb.example.com:28:\040\001\015\270\000\000\000\000\000\000\000\000\000\003\000\004:120 :bar.svcb.example.com:64:\000\001\000\000\001\000\003\002h2:120 :bar.svcb.example.com:64:\000\003\000\000\001\000\003\002h3\000\003\000\002\005\334:120 +:bar.svcb.example.com:64:\000\004\000\000\001\000\003\002h3\000\003\000\002\005\335:120 :baz.svcb.example.com:64:\000\000\004foo1\004svcb\007example\003net\000:120 :dsdelegation.example.com:43:m\341\010\001\312\361\352\256\315\253\347afpx\217\220\042EK\365\375\237\332:120 :escapedtext.example.com:16:\005begin\022the\040\042middle\042\040p\134art\007the\040end:120 diff --git a/modules/tinydnsbackend/data.cdb b/modules/tinydnsbackend/data.cdb index ecb1694777a9a64bfd3e358e69d2ccd098119c27..98225edd8ca8b4720e734abe1417e0dab172b592 100644 GIT binary patch delta 5543 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 M_Y8QvND}D(0Lrv|(EtDd delta 5479 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 diff --git a/pdns/rcpgenerator.cc b/pdns/rcpgenerator.cc index 6a4569100c..3da0baa20e 100644 --- a/pdns/rcpgenerator.cc +++ b/pdns/rcpgenerator.cc @@ -335,7 +335,7 @@ void RecordTextReader::xfrSVCBValueList(vector &val) { d_pos += ctr; } -void RecordTextReader::xfrSvcParamKeyVals(set& val) +void RecordTextReader::xfrSvcParamKeyVals(set& val) // NOLINT(readability-function-cognitive-complexity) { while (d_pos != d_end) { skipSpaces(); @@ -469,7 +469,13 @@ void RecordTextReader::xfrSvcParamKeyVals(set& val) port = (v.at(0) << 8); port += v.at(1); } else { - xfr16BitInt(port); + string portstring; + xfrRFC1035CharString(portstring); + try { + pdns::checked_stoi_into(port, portstring); + } catch (const std::exception &e) { + throw RecordTextException(e.what()); + } } val.insert(SvcParam(key, port)); break; diff --git a/regression-tests.nobackend/tinydns-data-check/expected_result b/regression-tests.nobackend/tinydns-data-check/expected_result index 29e484430f..c65a7f4d26 100644 --- a/regression-tests.nobackend/tinydns-data-check/expected_result +++ b/regression-tests.nobackend/tinydns-data-check/expected_result @@ -1,4 +1,4 @@ -2ed2eb54a4cb3fd105aa78e6d4c99685 ../regression-tests/zones/example.com +f3e86fd522b08d4812505da489ecb5b0 ../regression-tests/zones/example.com f8f0d7b157495ec8ee70851e3d5cb65e ../regression-tests/zones/test.com e5e3ee998d151fe194b98997eaa36c53 ../regression-tests/zones/test.dyndns dee3e8b568549d9450134b555ca73990 ../regression-tests/zones/sub.test.dyndns @@ -15,5 +15,5 @@ a98864b315f16bcf49ce577426063c42 ../regression-tests/zones/cdnskey-cds-test.com 9aeed2c26d0c3ba3baf22dfa9568c451 ../regression-tests/zones/2.0.192.in-addr.arpa 99c73e8b5db5781fec1ac3fa6a2662a9 ../regression-tests/zones/cryptokeys.org 1f9e19be0cff67330f3a0a5347654f91 ../regression-tests/zones/hiddencryptokeys.org -e85d67cb577cf1de3127e439e7529311 ../modules/tinydnsbackend/data -7715e725358f969aa92e46ae9be0c464 ../modules/tinydnsbackend/data.cdb +16ca9f82f476f5910ed89830dc0f183b ../modules/tinydnsbackend/data +022f54332046eb386d636bd9141a4e77 ../modules/tinydnsbackend/data.cdb diff --git a/regression-tests/tests/svcb-servicemode/expected_result b/regression-tests/tests/svcb-servicemode/expected_result index c4a8c4303a..3956637ce2 100644 --- a/regression-tests/tests/svcb-servicemode/expected_result +++ b/regression-tests/tests/svcb-servicemode/expected_result @@ -1,5 +1,6 @@ 0 bar.svcb.example.com. 120 IN SVCB 1 . alpn=h2 0 bar.svcb.example.com. 120 IN SVCB 3 . alpn=h3 port=1500 +0 bar.svcb.example.com. 120 IN SVCB 4 . alpn=h3 port=1501 2 . 32768 IN OPT 2 bar.svcb.example.com. 120 IN A 192.0.2.1 2 bar.svcb.example.com. 120 IN AAAA 2001:db8::3:1 diff --git a/regression-tests/tests/svcb-servicemode/expected_result.dnssec b/regression-tests/tests/svcb-servicemode/expected_result.dnssec index 7920485fa5..666a28619e 100644 --- a/regression-tests/tests/svcb-servicemode/expected_result.dnssec +++ b/regression-tests/tests/svcb-servicemode/expected_result.dnssec @@ -1,6 +1,7 @@ 0 bar.svcb.example.com. 120 IN RRSIG SVCB 13 4 120 [expiry] [inception] [keytag] example.com. ... 0 bar.svcb.example.com. 120 IN SVCB 1 . alpn=h2 0 bar.svcb.example.com. 120 IN SVCB 3 . alpn=h3 port=1500 +0 bar.svcb.example.com. 120 IN SVCB 4 . alpn=h3 port=1501 2 . 32768 IN OPT 2 bar.svcb.example.com. 120 IN A 192.0.2.1 2 bar.svcb.example.com. 120 IN AAAA 2001:db8::3:1 diff --git a/regression-tests/zones/example.com b/regression-tests/zones/example.com index cd5657a853..96993cecb0 100644 --- a/regression-tests/zones/example.com +++ b/regression-tests/zones/example.com @@ -20222,6 +20222,7 @@ foo1.svcb IN A 192.0.2.2 ; Should show up in additional bar.svcb IN SVCB 1 . alpn=h2 bar.svcb IN SVCB 3 . alpn=h3 port=1500 +bar.svcb IN SVCB 4 . alpn=h3 port="1501" bar.svcb IN AAAA 2001:db8::3:1 bar.svcb IN AAAA 2001:db8::3:4 bar.svcb IN A 192.0.2.1 -- 2.47.2