Protect against invalid enums being returned (#36792)
* Adding type protection here
* Restyled by clang-format
* Safer way to do this
* Restyled by clang-format
* Fixing format
* Restyled by clang-format
* Adding error
* Restyled by clang-format
---------
Co-authored-by: Restyled.io <commits@restyled.io>
diff --git a/src/darwin/Framework/CHIP/MTRDevice_XPC.mm b/src/darwin/Framework/CHIP/MTRDevice_XPC.mm
index d535632..bc5fa52 100644
--- a/src/darwin/Framework/CHIP/MTRDevice_XPC.mm
+++ b/src/darwin/Framework/CHIP/MTRDevice_XPC.mm
@@ -322,7 +322,20 @@
- (MTRDeviceState)state
{
NSNumber * stateNumber = MTR_SAFE_CAST(self._internalState[kMTRDeviceInternalPropertyDeviceState], NSNumber);
- return stateNumber ? static_cast<MTRDeviceState>(stateNumber.unsignedIntegerValue) : MTRDeviceStateUnknown;
+ switch (static_cast<MTRDeviceState>(stateNumber.unsignedIntegerValue)) {
+ case MTRDeviceStateUnknown:
+ return MTRDeviceStateUnknown;
+
+ case MTRDeviceStateUnreachable:
+ return MTRDeviceStateUnreachable;
+
+ case MTRDeviceStateReachable:
+ return MTRDeviceStateReachable;
+ }
+
+ MTR_LOG_ERROR("stateNumber from internal state is an invalid value: %@", stateNumber);
+
+ return MTRDeviceStateUnknown;
}
- (BOOL)deviceCachePrimed