]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[2442] reject empty text input; adjuted one test case accordingly
authorJINMEI Tatuya <jinmei@isc.org>
Wed, 5 Dec 2012 03:10:57 +0000 (19:10 -0800)
committerJINMEI Tatuya <jinmei@isc.org>
Wed, 5 Dec 2012 03:10:57 +0000 (19:10 -0800)
src/lib/dns/rdata/generic/detail/txt_like.h
src/lib/dns/tests/rdata_txt_like_unittest.cc

index b788dd80d3140807ec324c47f768bce7d7fed4a6..004229ca4c50ad5e5d318572de240c0cdc56054b 100644 (file)
@@ -113,7 +113,14 @@ private:
             string_list_.push_back(std::vector<uint8_t>());
             strToCharString(token.getStringRegion(), string_list_.back());
         }
+
+        // Let upper layer handle eol/eof.
         lexer.ungetToken();
+
+        if (string_list_.empty()) {
+            isc_throw(InvalidRdataText, "Failed to construct" <<
+                      RRType(typeCode) << " RDATA: empty input");
+        }
     }
 
 public:
index 05c4a04eb2b5f5cd56c866100cef5cc4f7a5eb9a..b6e2676f61801d558052ecc32104efe46899453b 100644 (file)
@@ -199,6 +199,14 @@ TYPED_TEST(Rdata_TXT_LIKE_Test, createMultiStringsFromText) {
     }
 }
 
+TYPED_TEST(Rdata_TXT_LIKE_Test, fromTextEmpty) {
+    // If the input text doesn't contain any character-string, it should be
+    // rejected
+    EXPECT_THROW(TypeParam(""), InvalidRdataText);
+    EXPECT_THROW(TypeParam(" "), InvalidRdataText); // even with a space
+    EXPECT_THROW(TypeParam("(\n)"), InvalidRdataText); // or multi-line with ()
+}
+
 void
 makeLargest(vector<uint8_t>& data) {
     uint8_t ch = 0;
@@ -331,8 +339,8 @@ TYPED_TEST(Rdata_TXT_LIKE_Test, compare) {
 
     EXPECT_EQ(TypeParam(txt1).compare(TypeParam(txt1)), 0);
 
-    EXPECT_LT(TypeParam("").compare(TypeParam(txt1)), 0);
-    EXPECT_GT(TypeParam(txt1).compare(TypeParam("")), 0);
+    EXPECT_LT(TypeParam("\"\"").compare(TypeParam(txt1)), 0);
+    EXPECT_GT(TypeParam(txt1).compare(TypeParam("\"\"")), 0);
 
     EXPECT_LT(TypeParam(txt1).compare(TypeParam(txt2)), 0);
     EXPECT_GT(TypeParam(txt2).compare(TypeParam(txt1)), 0);