From: Paul Selkirk Date: Mon, 6 May 2013 18:27:56 +0000 (-0400) Subject: [2521] DHCDID RDATA cannot be empty X-Git-Tag: bind10-1.2.0beta1-release~473^2~4 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=caefbb6f9016955ad62391d799fd69886aa363b4;p=thirdparty%2Fkea.git [2521] DHCDID RDATA cannot be empty --- diff --git a/src/lib/dns/rdata/in_1/dhcid_49.cc b/src/lib/dns/rdata/in_1/dhcid_49.cc index f8b3b85f24..b6b0bf509d 100644 --- a/src/lib/dns/rdata/in_1/dhcid_49.cc +++ b/src/lib/dns/rdata/in_1/dhcid_49.cc @@ -48,10 +48,11 @@ DHCID::constructFromLexer(MasterLexer& lexer) { } lexer.ungetToken(); - // missing digest data is okay - if (digest_txt.size() > 0) { - decodeBase64(digest_txt, digest_); + if (digest_txt.size() == 0) { + isc_throw(InvalidRdataText, "Missing DHCID RDATA"); } + + decodeBase64(digest_txt, digest_); } /// \brief Constructor from string. @@ -89,7 +90,9 @@ DHCID::DHCID(const std::string& dhcid_str) { /// The \c lexer should point to the beginning of valid textual representation /// of a DHCID RDATA. /// -/// \throw MasterLexer::LexerError General parsing error such as missing field. +/// \throw InvalidRdataText on empty string. +/// \throw BadValue if the text is not valid base-64. +/// \throw MasterLexer::LexerError General parsing error. /// /// \param lexer A \c MasterLexer object parsing a master file for the /// RDATA to be created diff --git a/src/lib/dns/tests/rdata_dhcid_unittest.cc b/src/lib/dns/tests/rdata_dhcid_unittest.cc index 8494e38b6b..e837056e3e 100644 --- a/src/lib/dns/tests/rdata_dhcid_unittest.cc +++ b/src/lib/dns/tests/rdata_dhcid_unittest.cc @@ -45,8 +45,8 @@ protected: rdata_str, rdata_dhcid, false, false); } - void checkFromText_InvalidLength(const string& rdata_str) { - checkFromText( + void checkFromText_InvalidText(const string& rdata_str) { + checkFromText( rdata_str, rdata_dhcid, true, true); } @@ -74,9 +74,6 @@ protected: TEST_F(Rdata_DHCID_Test, fromText) { EXPECT_EQ(dhcid_txt, rdata_dhcid.toText()); - // missing digest data is okay - EXPECT_NO_THROW(const in::DHCID digest("")); - // Space in digest data is OK checkFromText_None( "0LIg0LvQtdGB0YMg 0YDQvtC00LjQu9Cw 0YHRjCDRkdC70L7R h9C60LA="); @@ -95,6 +92,10 @@ TEST_F(Rdata_DHCID_Test, fromText) { } TEST_F(Rdata_DHCID_Test, badText) { + // missing digest data + checkFromText_InvalidText(""); + + // invalid base64 checkFromText_BadValue("EEeeeeeeEEEeeeeeeGaaahAAAAAAAAHHHHHHHHHHH!="); // unterminated multi-line base64