[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