[joiner] avoid null dereference in CoAP response handler (#6510)

This commit is contained in:
Simon Lin
2021-04-27 20:12:20 -07:00
committed by GitHub
parent 7620e59e7a
commit 898a10fd79
2 changed files with 9 additions and 7 deletions
+8 -6
View File
@@ -525,19 +525,21 @@ void Joiner::HandleJoinerFinalizeResponse(void * aContext,
Error aResult)
{
static_cast<Joiner *>(aContext)->HandleJoinerFinalizeResponse(
*static_cast<Coap::Message *>(aMessage), static_cast<const Ip6::MessageInfo *>(aMessageInfo), aResult);
static_cast<Coap::Message *>(aMessage), static_cast<const Ip6::MessageInfo *>(aMessageInfo), aResult);
}
void Joiner::HandleJoinerFinalizeResponse(Coap::Message &aMessage, const Ip6::MessageInfo *aMessageInfo, Error aResult)
void Joiner::HandleJoinerFinalizeResponse(Coap::Message *aMessage, const Ip6::MessageInfo *aMessageInfo, Error aResult)
{
OT_UNUSED_VARIABLE(aMessageInfo);
uint8_t state;
VerifyOrExit(mState == kStateConnected && aResult == kErrorNone && aMessage.IsAck() &&
aMessage.GetCode() == Coap::kCodeChanged);
VerifyOrExit(mState == kStateConnected && aResult == kErrorNone);
OT_ASSERT(aMessage != nullptr);
SuccessOrExit(Tlv::Find<StateTlv>(aMessage, state));
VerifyOrExit(aMessage->IsAck() && aMessage->GetCode() == Coap::kCodeChanged);
SuccessOrExit(Tlv::Find<StateTlv>(*aMessage, state));
SetState(kStateEntrust);
mTimer.Start(kReponseTimeout);
@@ -545,7 +547,7 @@ void Joiner::HandleJoinerFinalizeResponse(Coap::Message &aMessage, const Ip6::Me
otLogInfoMeshCoP("Joiner received finalize response %d", state);
#if OPENTHREAD_CONFIG_REFERENCE_DEVICE_ENABLE
LogCertMessage("[THCI] direction=recv | type=JOIN_FIN.rsp |", aMessage);
LogCertMessage("[THCI] direction=recv | type=JOIN_FIN.rsp |", *aMessage);
#endif
exit:
+1 -1
View File
@@ -194,7 +194,7 @@ private:
otMessage * aMessage,
const otMessageInfo *aMessageInfo,
Error aResult);
void HandleJoinerFinalizeResponse(Coap::Message &aMessage, const Ip6::MessageInfo *aMessageInfo, Error aResult);
void HandleJoinerFinalizeResponse(Coap::Message *aMessage, const Ip6::MessageInfo *aMessageInfo, Error aResult);
static void HandleJoinerEntrust(void *aContext, otMessage *aMessage, const otMessageInfo *aMessageInfo);
void HandleJoinerEntrust(Coap::Message &aMessage, const Ip6::MessageInfo &aMessageInfo);