[svn] commit: r1668 - in /trunk/src/lib/cc: data.cc data_unittests.cc

BIND 10 source code commits bind10-changes at lists.isc.org
Thu Apr 1 09:13:52 UTC 2010


Author: jelte
Date: Thu Apr  1 09:13:52 2010
New Revision: 1668

Log:
check map tag size in create functions too, for consistency, i think we should indeed remove the direct map access and constructor, see comment in ticket 129

Modified:
    trunk/src/lib/cc/data.cc
    trunk/src/lib/cc/data_unittests.cc

Modified: trunk/src/lib/cc/data.cc
==============================================================================
--- trunk/src/lib/cc/data.cc (original)
+++ trunk/src/lib/cc/data.cc Thu Apr  1 09:13:52 2010
@@ -249,6 +249,12 @@
 
 ElementPtr
 Element::create(const std::map<std::string, ElementPtr>& m) {
+    for (std::map<std::string, ElementPtr>::const_iterator it = m.begin();
+         it != m.end(); ++it) {
+        if ((*it).first.length() > 255) {
+            isc_throw(TypeError, "Map tag is too long");
+        }
+    }
     try {
         return ElementPtr(new MapElement(m));
     } catch (std::bad_alloc) {

Modified: trunk/src/lib/cc/data_unittests.cc
==============================================================================
--- trunk/src/lib/cc/data_unittests.cc (original)
+++ trunk/src/lib/cc/data_unittests.cc Thu Apr  1 09:13:52 2010
@@ -211,8 +211,14 @@
                        "9123456789abcdefa123456789abcdefb123456789abcdef"
                        "c123456789abcdefd123456789abcdefe123456789abcdef"
                        "f123456789abcde");
+    std::map<std::string, ElementPtr> long_maptag_map;
+    
     EXPECT_EQ(255, long_maptag.length()); // check prerequisite
     el = Element::createFromString("{ \"" + long_maptag + "\": \"bar\"}");
+    EXPECT_EQ("bar", el->find(long_maptag)->stringValue());
+
+    long_maptag_map[long_maptag] = Element::create("bar");
+    el = Element::create(long_maptag_map);
     EXPECT_EQ("bar", el->find(long_maptag)->stringValue());
 
     // A one-byte longer tag should trigger an exception.
@@ -220,6 +226,10 @@
     EXPECT_THROW(Element::createFromString("{ \"" + long_maptag +
                                            "\": \"bar\"}"),
                  ParseError);
+
+    long_maptag_map[long_maptag] = Element::create("bar");
+    EXPECT_THROW(Element::create(long_maptag_map), TypeError);
+
 }
 
 TEST(Element, to_and_from_wire) {




More information about the bind10-changes mailing list