From e8e40229fd74ca99047a4406953d6a5234b63079 Mon Sep 17 00:00:00 2001 From: Jonathan Hui Date: Thu, 12 Aug 2021 20:57:34 -0700 Subject: [PATCH] [dataset-manager] avoid nullptr dereference (#6918) The CoAP response handler may pass nullptr if an error occurs. --- src/core/meshcop/dataset_manager.cpp | 6 +++--- src/core/meshcop/dataset_manager.hpp | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/core/meshcop/dataset_manager.cpp b/src/core/meshcop/dataset_manager.cpp index 96a796219..68843068c 100644 --- a/src/core/meshcop/dataset_manager.cpp +++ b/src/core/meshcop/dataset_manager.cpp @@ -340,10 +340,10 @@ void DatasetManager::HandleMgmtSetResponse(void * aContext, Error aError) { static_cast(aContext)->HandleMgmtSetResponse( - *static_cast(aMessage), *static_cast(aMessageInfo), aError); + static_cast(aMessage), static_cast(aMessageInfo), aError); } -void DatasetManager::HandleMgmtSetResponse(Coap::Message &aMessage, const Ip6::MessageInfo &aMessageInfo, Error aError) +void DatasetManager::HandleMgmtSetResponse(Coap::Message *aMessage, const Ip6::MessageInfo *aMessageInfo, Error aError) { OT_UNUSED_VARIABLE(aMessageInfo); @@ -351,7 +351,7 @@ void DatasetManager::HandleMgmtSetResponse(Coap::Message &aMessage, const Ip6::M StateTlv stateTlv; SuccessOrExit(error = aError); - VerifyOrExit(Tlv::FindTlv(aMessage, stateTlv) == kErrorNone, error = kErrorParse); + VerifyOrExit(Tlv::FindTlv(*aMessage, stateTlv) == kErrorNone, error = kErrorParse); switch (stateTlv.GetState()) { diff --git a/src/core/meshcop/dataset_manager.hpp b/src/core/meshcop/dataset_manager.hpp index 774cc425d..975012fdb 100644 --- a/src/core/meshcop/dataset_manager.hpp +++ b/src/core/meshcop/dataset_manager.hpp @@ -345,7 +345,7 @@ private: otMessage * aMessage, const otMessageInfo *aMessageInfo, Error aError); - void HandleMgmtSetResponse(Coap::Message &aMessage, const Ip6::MessageInfo &aMessageInfo, Error aError); + void HandleMgmtSetResponse(Coap::Message *aMessage, const Ip6::MessageInfo *aMessageInfo, Error aError); bool IsActiveDataset(void) const { return GetType() == Dataset::kActive; } bool IsPendingDataset(void) const { return GetType() == Dataset::kPending; }