mirror of
https://github.com/espressif/openthread.git
synced 2026-08-01 16:47:47 +00:00
[coap] validate token length on received messages (#4584)
Per RFC 7252: - Treat invalid token length as a message format error. - Rejecting a Confirmable message is effected by sending a matching Reset message and otherwise ignoring it.
This commit is contained in:
@@ -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())
|
||||
{
|
||||
|
||||
@@ -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())
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user