]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Add a unit test for large EDNS option codes 8158/head
authorRemi Gacogne <remi.gacogne@powerdns.com>
Mon, 5 Aug 2019 07:48:39 +0000 (09:48 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Mon, 5 Aug 2019 07:48:39 +0000 (09:48 +0200)
pdns/test-dnsdist_cc.cc

index 100dd47109fbf539896e8d769d4cd45b1a4610b2..b81b4ab36b4b83fb3126b8aaff23892fb59a313a 100644 (file)
@@ -1451,6 +1451,7 @@ BOOST_AUTO_TEST_CASE(test_isEDNSOptionInOpt) {
   ecsOpts.source = Netmask(ComboAddress("127.0.0.1"), ECSSourcePrefixV4);
   const string ecsOptionStr = makeEDNSSubnetOptsString(ecsOpts);
   const size_t sizeOfECSContent = ecsOptionStr.size();
+  const size_t sizeOfECSOption = /* option code */ 2 + /* option length */ 2 + sizeOfECSContent;
   EDNSCookiesOpt cookiesOpt;
   cookiesOpt.client = string("deadbeef");
   cookiesOpt.server = string("deadbeef");
@@ -1563,6 +1564,28 @@ BOOST_AUTO_TEST_CASE(test_isEDNSOptionInOpt) {
     query.resize(query.size() - 1);
     BOOST_CHECK_THROW(locateEDNSOption(query, EDNSOptionCode::ECS, &optContentStart, &optContentLen), std::range_error);
   }
+
+  {
+    /* valid EDNS, one 65002 after an ECS */
+    vector<uint8_t> query;
+    DNSPacketWriter pw(query, qname, qtype, qclass, 0);
+    DNSPacketWriter::optvect_t opts;
+    opts.push_back(make_pair(EDNSOptionCode::ECS, ecsOptionStr));
+    opts.push_back(make_pair(65535, cookiesOptionStr));
+    pw.addOpt(512, 0, 0, opts);
+    pw.commit();
+
+    bool found = locateEDNSOption(query, 65535, &optContentStart, &optContentLen);
+    BOOST_CHECK_EQUAL(found, true);
+    if (found == true) {
+      BOOST_CHECK_EQUAL(optContentStart, optRDExpectedOffset + sizeof(uint16_t) /* RD len */ + sizeOfECSOption + /* option code */ 2 + /* option length */ 2);
+      BOOST_CHECK_EQUAL(optContentLen, cookiesOptionStr.size());
+    }
+
+    /* truncated packet */
+    query.resize(query.size() - 1);
+    BOOST_CHECK_THROW(locateEDNSOption(query, 65002, &optContentStart, &optContentLen), std::range_error);
+  }
 }
 
 BOOST_AUTO_TEST_SUITE_END();