Parcourir la source

[2512] Use CharStringData when constructing from parameters too

This supports handling escapes and such when coming from the
presentation format.
Mukund Sivaraman il y a 11 ans
Parent
commit
a6a6cb2e33

+ 5 - 2
src/lib/dns/rdata/generic/caa_257.cc

@@ -195,9 +195,12 @@ CAA::CAA(uint8_t flags, const std::string& tag, const std::string& value) :
                   "CAA tag field is too large: " << tag.size());
     }
 
+    MasterToken::StringRegion region;
+    region.beg = &value[0]; // note std ensures this works even if str is empty
+    region.len = value.size();
+
     detail::CharStringData value_vec;
-    value_vec.reserve(value.size());
-    value_vec.insert(value_vec.end(), value.begin(), value.end());
+    detail::stringToCharStringData(region, value_vec);
 
     impl_ = new CAAImpl(flags, tag, value_vec);
 }

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

@@ -207,6 +207,12 @@ TEST_F(Rdata_CAA_Test, createFromParams) {
     const generic::CAA rdata_caa2(0, "issue", "ca.example.net");
     EXPECT_EQ(0, rdata_caa2.compare(rdata_caa));
 
+    const generic::CAA rdata_caa4(0, "issue", "ca.e\\xample.net");
+    EXPECT_EQ(0, rdata_caa4.compare(rdata_caa));
+
+    const generic::CAA rdata_caa5(0, "issue", "ca.e\\120ample.net");
+    EXPECT_EQ(0, rdata_caa5.compare(rdata_caa));
+
     // Tag is empty
     EXPECT_THROW(const generic::CAA rdata_caa3(0, "", "ca.example.net"),
                  isc::InvalidParameter);