Skip to content

Commit 2c11741

Browse files
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 <[email protected]>
1 parent 29c6fd8 commit 2c11741

File tree

1 file changed

+14
-1
lines changed

1 file changed

+14
-1
lines changed

src/darwin/Framework/CHIP/MTRDevice_XPC.mm

+14-1
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,20 @@ - (oneway void)device:(NSNumber *)nodeID internalStateUpdated:(NSDictionary *)di
322322
- (MTRDeviceState)state
323323
{
324324
NSNumber * stateNumber = MTR_SAFE_CAST(self._internalState[kMTRDeviceInternalPropertyDeviceState], NSNumber);
325-
return stateNumber ? static_cast<MTRDeviceState>(stateNumber.unsignedIntegerValue) : MTRDeviceStateUnknown;
325+
switch (static_cast<MTRDeviceState>(stateNumber.unsignedIntegerValue)) {
326+
case MTRDeviceStateUnknown:
327+
return MTRDeviceStateUnknown;
328+
329+
case MTRDeviceStateUnreachable:
330+
return MTRDeviceStateUnreachable;
331+
332+
case MTRDeviceStateReachable:
333+
return MTRDeviceStateReachable;
334+
}
335+
336+
MTR_LOG_ERROR("stateNumber from internal state is an invalid value: %@", stateNumber);
337+
338+
return MTRDeviceStateUnknown;
326339
}
327340

328341
- (BOOL)deviceCachePrimed

0 commit comments

Comments
 (0)