[svn] commit: r1070 - in /trunk/src/lib/dns/cpp: buffer.h tests/buffer_unittest.cc

BIND 10 source code commits bind10-changes at lists.isc.org
Tue Mar 2 17:49:03 UTC 2010


Author: jinmei
Date: Tue Mar  2 17:49:02 2010
New Revision: 1070

Log:
fixed an off-by-one (too strict) bug, and added a corresponding test case

Modified:
    trunk/src/lib/dns/cpp/buffer.h
    trunk/src/lib/dns/cpp/tests/buffer_unittest.cc

Modified: trunk/src/lib/dns/cpp/buffer.h
==============================================================================
--- trunk/src/lib/dns/cpp/buffer.h (original)
+++ trunk/src/lib/dns/cpp/buffer.h Tue Mar  2 17:49:02 2010
@@ -358,7 +358,7 @@
     /// \param pos The beginning position in the buffer to write the data.
     void writeUint16At(uint16_t data, size_t pos)
     {
-        if (pos + sizeof(data) >= data_.size()) {
+        if (pos + sizeof(data) > data_.size()) {
             dns_throw(InvalidBufferPosition, "write at invalid position");
         }
 

Modified: trunk/src/lib/dns/cpp/tests/buffer_unittest.cc
==============================================================================
--- trunk/src/lib/dns/cpp/tests/buffer_unittest.cc (original)
+++ trunk/src/lib/dns/cpp/tests/buffer_unittest.cc Tue Mar  2 17:49:02 2010
@@ -126,12 +126,20 @@
 {
     obuffer.writeUint32(data32);
     expected_size += sizeof(data32);
+
+    // overwrite 2nd and 3rd bytes
     obuffer.writeUint16At(data16, 1);
     EXPECT_EQ(expected_size, obuffer.getLength()); // length shouldn't change
-
     const uint8_t* cp = static_cast<const uint8_t*>(obuffer.getData());
     EXPECT_EQ(2, *(cp + 1));
     EXPECT_EQ(3, *(cp + 2));
+
+    // overwrite 3rd and 4th bytes
+    obuffer.writeUint16At(data16, 2);
+    EXPECT_EQ(expected_size, obuffer.getLength());
+    cp = static_cast<const uint8_t*>(obuffer.getData());
+    EXPECT_EQ(2, *(cp + 2));
+    EXPECT_EQ(3, *(cp + 3));
 
     EXPECT_THROW(obuffer.writeUint16At(data16, 3),
                  isc::dns::InvalidBufferPosition);




More information about the bind10-changes mailing list