From c4feef569ca5df04b6d5171a6d272f69abb2ba5d Mon Sep 17 00:00:00 2001 From: Abtin Keshavarzian Date: Fri, 21 Apr 2017 20:50:32 -0700 Subject: [PATCH] `NcpBuffer`: Fixing bug with handling of longer frame segments (#1643) --- src/ncp/ncp_buffer.cpp | 8 ++++---- src/ncp/ncp_buffer.hpp | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/ncp/ncp_buffer.cpp b/src/ncp/ncp_buffer.cpp index ca27ca3f0..8269eb983 100644 --- a/src/ncp/ncp_buffer.cpp +++ b/src/ncp/ncp_buffer.cpp @@ -121,7 +121,7 @@ uint8_t *NcpFrameBuffer::Next(uint8_t *aBufPtr) const } // Returns an advanced (moved forward) version of the given buffer pointer by the given offset. -uint8_t *NcpFrameBuffer::Advance(uint8_t *aBufPtr, uint8_t aOffset) const +uint8_t *NcpFrameBuffer::Advance(uint8_t *aBufPtr, uint16_t aOffset) const { aBufPtr += aOffset; @@ -365,7 +365,7 @@ ThreadError NcpFrameBuffer::OutFramePrepareSegment(void) // Find tail/end of current segment. mReadSegmentTail = Advance(mReadSegmentHead, - kSegmentHeaderSize + static_cast(header & kSegmentHeaderLengthMask)); + kSegmentHeaderSize + (header & kSegmentHeaderLengthMask)); // Update the current read pointer to skip the segment header. mReadPointer = Advance(mReadSegmentHead, kSegmentHeaderSize); @@ -588,7 +588,7 @@ ThreadError NcpFrameBuffer::OutFrameRemove(void) } // Move the pointer to next segment. - bufPtr = Advance(bufPtr, kSegmentHeaderSize + static_cast(header & kSegmentHeaderLengthMask)); + bufPtr = Advance(bufPtr, kSegmentHeaderSize + (header & kSegmentHeaderLengthMask)); } mReadFrameStart = bufPtr; @@ -658,7 +658,7 @@ uint16_t NcpFrameBuffer::OutFrameGetLength(void) frameLength += (header & kSegmentHeaderLengthMask); // Move the pointer to next segment. - bufPtr = Advance(bufPtr, kSegmentHeaderSize + static_cast(header & kSegmentHeaderLengthMask)); + bufPtr = Advance(bufPtr, kSegmentHeaderSize + (header & kSegmentHeaderLengthMask)); } // Remember the calculated frame length for current frame. diff --git a/src/ncp/ncp_buffer.hpp b/src/ncp/ncp_buffer.hpp index cb5b349f1..26dc5df1a 100644 --- a/src/ncp/ncp_buffer.hpp +++ b/src/ncp/ncp_buffer.hpp @@ -306,7 +306,7 @@ private: // Private methods uint8_t * Next(uint8_t *aBufferPtr) const; - uint8_t * Advance(uint8_t *aBufPtr, uint8_t aOffset) const; + uint8_t * Advance(uint8_t *aBufPtr, uint16_t aOffset) const; uint16_t GetDistance(uint8_t *aStartPtr, uint8_t *aEndPtr) const; uint16_t ReadUint16At(uint8_t *aBufPtr);