From: Mukund Sivaraman Date: Thu, 21 Feb 2013 18:08:26 +0000 (+0530) Subject: [2386] Allow whitespace in the digest X-Git-Tag: bind10-1.1.0beta1-release~73^2~11 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=085fba33bd61a696dfa987a79bb90ddcb58c492a;p=thirdparty%2Fkea.git [2386] Allow whitespace in the digest --- diff --git a/src/lib/dns/rdata/generic/detail/ds_like.h b/src/lib/dns/rdata/generic/detail/ds_like.h index 38a7031998..d309c2c331 100644 --- a/src/lib/dns/rdata/generic/detail/ds_like.h +++ b/src/lib/dns/rdata/generic/detail/ds_like.h @@ -113,8 +113,21 @@ private: << digest_type); } - const std::string digest = - lexer.getNextToken(MasterToken::STRING).getString(); + std::string digest; + while (true) { + const MasterToken& token = lexer.getNextToken(); + if (token.getType() != MasterToken::STRING) { + break; + } + digest.append(token.getString()); + } + + lexer.ungetToken(); + + if (digest.size() == 0) { + isc_throw(InvalidRdataText, + "Missing " << RRType(typeCode) << " digest"); + } tag_ = tag; algorithm_ = algorithm; diff --git a/src/lib/dns/tests/rdata_ds_like_unittest.cc b/src/lib/dns/tests/rdata_ds_like_unittest.cc index d30c923f51..32d782a9d7 100644 --- a/src/lib/dns/tests/rdata_ds_like_unittest.cc +++ b/src/lib/dns/tests/rdata_ds_like_unittest.cc @@ -61,6 +61,14 @@ typedef testing::Types Implementations; TYPED_TEST_CASE(Rdata_DS_LIKE_Test, Implementations); +TYPED_TEST(Rdata_DS_LIKE_Test, createFromText) { + // It's valid for the digest's presentation format to contain + // spaces. See RFC4034 section 5.3. + EXPECT_EQ(0, this->rdata_ds_like.compare( + TypeParam("12892 5 2 F1E184C0E1D615D20EB3C223ACED3B03C773DD952D5F0EB5" + "C777 586DE18 \t DA6B5"))); +} + TYPED_TEST(Rdata_DS_LIKE_Test, toText_DS_LIKE) { EXPECT_EQ(ds_like_txt, this->rdata_ds_like.toText()); }