diff --git a/src/core/coap/coap_message.cpp b/src/core/coap/coap_message.cpp index cc82145e8..a5071f21e 100644 --- a/src/core/coap/coap_message.cpp +++ b/src/core/coap/coap_message.cpp @@ -373,7 +373,8 @@ exit: Error Message::ParseHeader(void) { - Error error = kErrorNone; + Error error = kErrorNone; + uint16_t offset = GetOffset(); Option::Iterator iterator; OT_ASSERT(GetReserved() >= @@ -381,10 +382,13 @@ Error Message::ParseHeader(void) GetHelpData().Clear(); - GetHelpData().mHeaderOffset = GetOffset(); - IgnoreError(Read(GetHelpData().mHeaderOffset, GetHelpData().mHeader)); + GetHelpData().mHeaderOffset = offset; + + SuccessOrExit(error = Read(offset, &GetHelpData().mHeader, kMinHeaderLength)); + offset += kMinHeaderLength; VerifyOrExit(GetTokenLength() <= kMaxTokenLength, error = kErrorParse); + SuccessOrExit(error = Read(offset, GetHelpData().mHeader.mToken, GetTokenLength())); SuccessOrExit(error = iterator.Init(*this));