From 58f56bbec2d638e68ebebacfc7b661893b513961 Mon Sep 17 00:00:00 2001 From: Abtin Keshavarzian Date: Mon, 23 May 2022 13:37:51 -0700 Subject: [PATCH] [srp-server] check allocated `UpdateMetadata` is not `nullptr` (#7717) --- src/core/net/srp_server.cpp | 30 +++++++++++++++++++++--------- src/core/net/srp_server.hpp | 1 + 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/core/net/srp_server.cpp b/src/core/net/srp_server.cpp index 9621ff9e3..ca012ab61 100644 --- a/src/core/net/srp_server.cpp +++ b/src/core/net/srp_server.cpp @@ -1192,20 +1192,32 @@ void Server::HandleUpdate(Host &aHost, const MessageMetadata &aMetadata) } exit: - if ((error == kErrorNone) && (mServiceUpdateHandler != nullptr)) + InformUpdateHandlerOrCommit(error, aHost, aMetadata); +} + +void Server::InformUpdateHandlerOrCommit(Error aError, Host &aHost, const MessageMetadata &aMetadata) +{ + if ((aError == kErrorNone) && (mServiceUpdateHandler != nullptr)) { UpdateMetadata *update = UpdateMetadata::Allocate(GetInstance(), aHost, aMetadata); - mOutstandingUpdates.Push(*update); - mOutstandingUpdatesTimer.FireAtIfEarlier(update->GetExpireTime()); + if (update != nullptr) + { + mOutstandingUpdates.Push(*update); + mOutstandingUpdatesTimer.FireAtIfEarlier(update->GetExpireTime()); - LogInfo("SRP update handler is notified (updatedId = %u)", update->GetId()); - mServiceUpdateHandler(update->GetId(), &aHost, kDefaultEventsHandlerTimeout, mServiceUpdateHandlerContext); - } - else - { - CommitSrpUpdate(error, aHost, aMetadata); + LogInfo("SRP update handler is notified (updatedId = %u)", update->GetId()); + mServiceUpdateHandler(update->GetId(), &aHost, kDefaultEventsHandlerTimeout, mServiceUpdateHandlerContext); + ExitNow(); + } + + aError = kErrorNoBufs; } + + CommitSrpUpdate(aError, aHost, aMetadata); + +exit: + return; } void Server::SendResponse(const Dns::UpdateHeader & aHeader, diff --git a/src/core/net/srp_server.hpp b/src/core/net/srp_server.hpp index 6289f3a2a..f31bd21b1 100644 --- a/src/core/net/srp_server.hpp +++ b/src/core/net/srp_server.hpp @@ -887,6 +887,7 @@ private: ServiceUpdateId AllocateId(void) { return mServiceUpdateId++; } + void InformUpdateHandlerOrCommit(Error aError, Host &aHost, const MessageMetadata &aMetadata); void CommitSrpUpdate(Error aError, Host &aHost, const MessageMetadata &aMessageMetadata); void CommitSrpUpdate(Error aError, UpdateMetadata &aUpdateMetadata); void CommitSrpUpdate(Error aError,