diff --git a/src/core/coap/coap.cpp b/src/core/coap/coap.cpp index d4b143c56..ab2624944 100644 --- a/src/core/coap/coap.cpp +++ b/src/core/coap/coap.cpp @@ -439,6 +439,11 @@ void CoapBase::Receive(ot::Message &aMessage, const Ip6::MessageInfo &aMessageIn if (message.ParseHeader() != OT_ERROR_NONE) { otLogDebgCoap("Failed to parse CoAP header"); + + if (!aMessageInfo.GetSockAddr().IsMulticast() && message.IsConfirmable()) + { + SendReset(message, aMessageInfo); + } } else if (message.IsRequest()) { diff --git a/src/core/coap/coap_message.cpp b/src/core/coap/coap_message.cpp index 250872a2e..a32722a5d 100644 --- a/src/core/coap/coap_message.cpp +++ b/src/core/coap/coap_message.cpp @@ -255,6 +255,8 @@ otError Message::ParseHeader(void) GetHelpData().mHeaderOffset = GetOffset(); Read(GetHelpData().mHeaderOffset, sizeof(GetHelpData().mHeader), &GetHelpData().mHeader); + VerifyOrExit(GetTokenLength() <= kMaxTokenLength, error = OT_ERROR_PARSE); + SuccessOrExit(error = iterator.Init(this)); for (const otCoapOption *option = iterator.GetFirstOption(); option != NULL; option = iterator.GetNextOption()) {