From ffa4909b254036d8c4b754595a3aeff8fca4fc61 Mon Sep 17 00:00:00 2001 From: Tom Henderson Date: Fri, 30 Jan 2015 16:27:50 -0800 Subject: [PATCH] bug 2044: Buffer::Iterator::ReadNtohU16() and ReadNtohU32() not implemented correctly --- src/network/model/buffer.h | 4 ++-- src/network/test/buffer-test.cc | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/network/model/buffer.h b/src/network/model/buffer.h index e949b3570..ce24b8b84 100644 --- a/src/network/model/buffer.h +++ b/src/network/model/buffer.h @@ -959,7 +959,7 @@ Buffer::Iterator::ReadNtohU16 (void) } else if (m_current >= m_zeroEnd) { - buffer = &m_data[m_current]; + buffer = &m_data[m_current - (m_zeroEnd - m_zeroStart)]; } else { @@ -983,7 +983,7 @@ Buffer::Iterator::ReadNtohU32 (void) } else if (m_current >= m_zeroEnd) { - buffer = &m_data[m_current]; + buffer = &m_data[m_current - (m_zeroEnd - m_zeroStart)]; } else { diff --git a/src/network/test/buffer-test.cc b/src/network/test/buffer-test.cc index def6dbced..a628b0001 100644 --- a/src/network/test/buffer-test.cc +++ b/src/network/test/buffer-test.cc @@ -321,6 +321,25 @@ BufferTest::DoRun (void) NS_TEST_ASSERT_MSG_EQ ( evilBuffer [i], cBuf [i] , "Bad buffer peeked"); } free (cBuf); + + /// \internal See \bugid{2044} Will not pass without bug2044 fix. + buffer = Buffer (1); + buffer.AddAtEnd (2); + i = buffer.Begin (); + i.Next (1); + i.WriteU8 (0x77); + i.WriteU8 (0x66); + ENSURE_WRITTEN_BYTES (buffer, 3, 0x00, 0x77, 0x66); + i = buffer.Begin (); + i.ReadU8 (); + uint16_t val1 = i.ReadNtohU16 (); + i = buffer.Begin (); + i.ReadU8 (); + uint16_t val2 = 0; + val2 |= i.ReadU8 (); + val2 <<= 8; + val2 |= i.ReadU8 (); + NS_TEST_ASSERT_MSG_EQ (val1, val2, "Bad ReadNtohU16()"); } //----------------------------------------------------------------------------- class BufferTestSuite : public TestSuite