]> granicus.if.org Git - pdns/commitdiff
Add PoCs for the previous memory leak issue
authorRemi Gacogne <remi.gacogne@powerdns.com>
Mon, 28 May 2018 13:40:37 +0000 (15:40 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 2 Nov 2018 15:54:57 +0000 (16:54 +0100)
(cherry picked from commit 05d5d55c2035d1845e7d3b0d62273e8a4177b358)

pdns/test-dnsrecords_cc.cc

index 778fd867a7a38f2bcff204cfff6ba544dab9b0ac..f4237cc81ff9db907b477b13a0e8b576b83c0741 100644 (file)
@@ -378,4 +378,84 @@ BOOST_AUTO_TEST_CASE(test_opt_record_out) {
   BOOST_CHECK_EQUAL(makeHexDump(std::string(pak.begin(),pak.end())), makeHexDump(packet));
 }
 
+// special record test, because EUI are odd
+BOOST_AUTO_TEST_CASE(test_eui_records_in) {
+
+  auto validEUI48=DNSRecordContent::mastermake(QType::EUI48, QClass::IN, "00-00-5e-00-53-2a");
+
+  BOOST_CHECK_THROW(auto invalidEUI48=DNSRecordContent::mastermake(QType::EUI48, QClass::IN, "00-00-5e-00-53-"), MOADNSException);
+
+  auto validEUI64=DNSRecordContent::mastermake(QType::EUI64, QClass::IN, "00-00-5e-ef-10-00-00-2a");
+
+  BOOST_CHECK_THROW(auto invalidEUI64=DNSRecordContent::mastermake(QType::EUI64, QClass::IN, "00-00-5e-ef-10-00-00-"), MOADNSException);
+}
+
+// special record test, because LOC is weird
+BOOST_AUTO_TEST_CASE(test_loc_records_in) {
+
+  auto validLOC=DNSRecordContent::mastermake(QType::LOC, QClass::IN, "52 22 23.000 N 4 53 32.000 E -2.00m 0.00m 10000m 10m");
+
+  BOOST_CHECK_THROW(auto invalidLOC=DNSRecordContent::mastermake(QType::LOC, QClass::IN, "52 22 23.000 N"), MOADNSException);
+
+  vector<uint8_t> packet;
+  DNSPacketWriter writer(packet, DNSName("powerdns.com."), QType::LOC, QClass::IN, 0);
+  writer.getHeader()->qr = 1;
+  writer.startRecord(DNSName("powerdns.com."), QType::LOC, 100, QClass::IN, DNSResourceRecord::ANSWER);
+  validLOC->toPacket(writer);
+  writer.commit();
+
+  MOADNSParser parser(false, reinterpret_cast<const char*>(packet.data()), packet.size());
+
+  BOOST_CHECK_THROW(MOADNSParser failParser(false, reinterpret_cast<const char*>(packet.data()), packet.size()-1), MOADNSException);
+}
+
+// special record test, because NSEC records are odd
+BOOST_AUTO_TEST_CASE(test_nsec_records_in) {
+
+  {
+    auto validNSEC=DNSRecordContent::mastermake(QType::NSEC, QClass::IN, "host.example.com. A MX RRSIG NSEC TYPE1234");
+
+    vector<uint8_t> packet;
+    DNSPacketWriter writer(packet, DNSName("powerdns.com."), QType::NSEC, QClass::IN, 0);
+    writer.getHeader()->qr = 1;
+    writer.startRecord(DNSName("powerdns.com."), QType::NSEC, 100, QClass::IN, DNSResourceRecord::ANSWER);
+    validNSEC->toPacket(writer);
+    writer.commit();
+
+    MOADNSParser parser(false, reinterpret_cast<const char*>(packet.data()), packet.size());
+
+    BOOST_CHECK_THROW(MOADNSParser failParser(false, reinterpret_cast<const char*>(packet.data()), packet.size()-1), MOADNSException);
+  }
+
+  {
+    auto validNSEC3=DNSRecordContent::mastermake(QType::NSEC3, QClass::IN, "1 1 12 aabbccdd 2vptu5timamqttgl4luu9kg21e0aor3s A RRSIG");
+
+    vector<uint8_t> packet;
+    DNSPacketWriter writer(packet, DNSName("powerdns.com."), QType::NSEC3, QClass::IN, 0);
+    writer.getHeader()->qr = 1;
+    writer.startRecord(DNSName("powerdns.com."), QType::NSEC3, 100, QClass::IN, DNSResourceRecord::ANSWER);
+    validNSEC3->toPacket(writer);
+    writer.commit();
+
+    MOADNSParser parser(false, reinterpret_cast<const char*>(packet.data()), packet.size());
+
+    BOOST_CHECK_THROW(MOADNSParser failParser(false, reinterpret_cast<const char*>(packet.data()), packet.size()-1), MOADNSException);
+  }
+
+  {
+    auto validNSEC3PARAM=DNSRecordContent::mastermake(QType::NSEC3PARAM, QClass::IN, "1 0 12 aabbccdd");
+
+    vector<uint8_t> packet;
+    DNSPacketWriter writer(packet, DNSName("powerdns.com."), QType::NSEC3PARAM, QClass::IN, 0);
+    writer.getHeader()->qr = 1;
+    writer.startRecord(DNSName("powerdns.com."), QType::NSEC3PARAM, 100, QClass::IN, DNSResourceRecord::ANSWER);
+    validNSEC3PARAM->toPacket(writer);
+    writer.commit();
+
+    MOADNSParser parser(false, reinterpret_cast<const char*>(packet.data()), packet.size());
+
+    BOOST_CHECK_THROW(MOADNSParser failParser(false, reinterpret_cast<const char*>(packet.data()), packet.size()-1), MOADNSException);
+  }
+}
+
 BOOST_AUTO_TEST_SUITE_END()