Browse Source

[2387] Keep extracting strings until end-of-input, and throw otherwise

Mukund Sivaraman 12 years ago
parent
commit
2045020b58

+ 7 - 1
src/lib/dns/rdata/generic/detail/nsec_bitmap.cc

@@ -87,10 +87,16 @@ buildBitmapsFromLexer(const char* const rrtype_name,
     bool have_rrtypes = false;
     while (true) {
         const MasterToken& token = lexer.getNextToken();
-        if (token.getType() != MasterToken::STRING) {
+        if ((token.getType() == MasterToken::END_OF_FILE) ||
+            (token.getType() == MasterToken::END_OF_LINE)) {
             break;
         }
 
+        if (token.getType() != MasterToken::STRING) {
+             isc_throw(InvalidRdataText,
+                       "Non-string token found when parsing key data");
+        }
+
         have_rrtypes = true;
         std::string type_str;
         try {

+ 8 - 1
src/lib/dns/rdata/generic/dnskey_48.cc

@@ -163,9 +163,16 @@ DNSKEY::constructFromLexer(MasterLexer& lexer) {
     std::string keydatastr;
     while (true) {
         const MasterToken& token = lexer.getNextToken();
-        if (token.getType() != MasterToken::STRING) {
+        if ((token.getType() == MasterToken::END_OF_FILE) ||
+            (token.getType() == MasterToken::END_OF_LINE)) {
             break;
         }
+
+        if (token.getType() != MasterToken::STRING) {
+             isc_throw(InvalidRdataText,
+                       "Non-string token found when parsing key data");
+        }
+
         keydatastr.append(token.getString());
     }
 

+ 6 - 0
src/lib/dns/tests/rdata_dnskey_unittest.cc

@@ -52,6 +52,12 @@ string dnskey_txt("257 3 5 BEAAAAOhHQDBrhQbtphgq2wQUpEQ5t4DtUHxoMV"
 TEST_F(Rdata_DNSKEY_Test, fromText) {
     generic::DNSKEY rdata_dnskey(dnskey_txt);
     EXPECT_EQ(dnskey_txt, rdata_dnskey.toText());
+
+    // Space in key data is OK
+    EXPECT_NO_THROW(generic::DNSKEY("257 3 5 YmluZDEw LmlzYy5vcmc="));
+
+    // Delimited number in key data is OK
+    EXPECT_NO_THROW(generic::DNSKEY("257 3 5 YmluZDEwLmlzYy 5 vcmc="));
 }
 
 TEST_F(Rdata_DNSKEY_Test, assign) {