From: Remi Gacogne Date: Mon, 28 May 2018 13:40:37 +0000 (+0200) Subject: Add PoCs for the previous memory leak issue X-Git-Tag: dnsdist-1.3.3~6^2~10 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f8ad00513cfbeab557ccd15afb4d7fb3ba883197;p=pdns Add PoCs for the previous memory leak issue (cherry picked from commit 05d5d55c2035d1845e7d3b0d62273e8a4177b358) --- diff --git a/pdns/test-dnsrecords_cc.cc b/pdns/test-dnsrecords_cc.cc index 778fd867a..f4237cc81 100644 --- a/pdns/test-dnsrecords_cc.cc +++ b/pdns/test-dnsrecords_cc.cc @@ -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 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(packet.data()), packet.size()); + + BOOST_CHECK_THROW(MOADNSParser failParser(false, reinterpret_cast(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 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(packet.data()), packet.size()); + + BOOST_CHECK_THROW(MOADNSParser failParser(false, reinterpret_cast(packet.data()), packet.size()-1), MOADNSException); + } + + { + auto validNSEC3=DNSRecordContent::mastermake(QType::NSEC3, QClass::IN, "1 1 12 aabbccdd 2vptu5timamqttgl4luu9kg21e0aor3s A RRSIG"); + + vector 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(packet.data()), packet.size()); + + BOOST_CHECK_THROW(MOADNSParser failParser(false, reinterpret_cast(packet.data()), packet.size()-1), MOADNSException); + } + + { + auto validNSEC3PARAM=DNSRecordContent::mastermake(QType::NSEC3PARAM, QClass::IN, "1 0 12 aabbccdd"); + + vector 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(packet.data()), packet.size()); + + BOOST_CHECK_THROW(MOADNSParser failParser(false, reinterpret_cast(packet.data()), packet.size()-1), MOADNSException); + } +} + BOOST_AUTO_TEST_SUITE_END()