[controller] fix 30260 (#30864)
diff --git a/src/controller/AutoCommissioner.cpp b/src/controller/AutoCommissioner.cpp
index 93247c3..82286e3 100644
--- a/src/controller/AutoCommissioner.cpp
+++ b/src/controller/AutoCommissioner.cpp
@@ -828,10 +828,10 @@
return NOCChainGenerated(report.Get<NocChain>().noc, report.Get<NocChain>().icac, report.Get<NocChain>().rcac,
report.Get<NocChain>().ipk, report.Get<NocChain>().adminSubject);
case CommissioningStage::kICDGetRegistrationInfo:
- // Noting to od. The ICD registation info is handled elsewhere.
+ // Noting to do. The ICD registation info is handled elsewhere.
break;
case CommissioningStage::kICDRegistration:
- // Noting to od. DevicePairingDelegate will handle this.
+ // Noting to do. DevicePairingDelegate will handle this.
break;
case CommissioningStage::kICDSendStayActive:
// Nothing to do.
diff --git a/src/controller/CHIPDeviceController.cpp b/src/controller/CHIPDeviceController.cpp
index 1713564..4959196 100644
--- a/src/controller/CHIPDeviceController.cpp
+++ b/src/controller/CHIPDeviceController.cpp
@@ -1177,19 +1177,25 @@
void * context, const app::Clusters::IcdManagement::Commands::RegisterClientResponse::DecodableType & data)
{
DeviceCommissioner * commissioner = static_cast<DeviceCommissioner *>(context);
+ VerifyOrReturn(commissioner != nullptr, ChipLogProgress(Controller, "Command response callback with null context. Ignoring"));
+ if (commissioner->mCommissioningStage != CommissioningStage::kICDRegistration)
+ {
+ return;
+ }
+
+ if (commissioner->mDeviceBeingCommissioned == nullptr)
+ {
+ return;
+ }
+
+ if (commissioner->mPairingDelegate != nullptr)
+ {
+ commissioner->mPairingDelegate->OnICDRegistrationComplete(commissioner->mDeviceBeingCommissioned->GetDeviceId(),
+ data.ICDCounter);
+ }
CommissioningDelegate::CommissioningReport report;
- auto pairingDelegate = commissioner->GetPairingDelegate();
- auto deviceBeingCommissioned = commissioner->mDeviceBeingCommissioned;
- if (pairingDelegate != nullptr && deviceBeingCommissioned != nullptr)
- {
- pairingDelegate->OnICDRegistrationComplete(deviceBeingCommissioned->GetDeviceId(), data.ICDCounter);
- commissioner->CommissioningStageComplete(CHIP_NO_ERROR, report);
- }
- else
- {
- commissioner->CommissioningStageComplete(CHIP_ERROR_INCORRECT_STATE, report);
- }
+ commissioner->CommissioningStageComplete(CHIP_NO_ERROR, report);
}
bool DeviceCommissioner::ExtendArmFailSafe(DeviceProxy * proxy, CommissioningStage step, uint16_t armFailSafeTimeout,