]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[2386] Allow whitespace in the digest
authorMukund Sivaraman <muks@isc.org>
Thu, 21 Feb 2013 18:08:26 +0000 (23:38 +0530)
committerMukund Sivaraman <muks@isc.org>
Thu, 21 Feb 2013 18:08:26 +0000 (23:38 +0530)
src/lib/dns/rdata/generic/detail/ds_like.h
src/lib/dns/tests/rdata_ds_like_unittest.cc

index 38a70319984e4170766fd6a51ca009896b61b1b5..d309c2c3319c885e686b5c77519e98bcbed4c691 100644 (file)
@@ -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;
index d30c923f51423bf25eec9a79a54f7323d48e6593..32d782a9d7bb0f485a3cf8fc90ee6b04e920b879 100644 (file)
@@ -61,6 +61,14 @@ typedef testing::Types<generic::DS, generic::DLV> 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());
 }