From ce1658d243a4dcf56c0088b0c12cf04f7c7afba8 Mon Sep 17 00:00:00 2001 From: Justin Wood Date: Fri, 12 Jul 2024 08:15:28 -1000 Subject: [PATCH 1/2] Fixing nil check crashes --- src/darwin/Framework/CHIP/MTRBaseDevice.mm | 39 +++++++++++++++++----- src/darwin/Framework/CHIP/MTRDevice.mm | 10 ++++-- 2 files changed, 37 insertions(+), 12 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRBaseDevice.mm b/src/darwin/Framework/CHIP/MTRBaseDevice.mm index 331d61129b9daf..e93c5992a4121b 100644 --- a/src/darwin/Framework/CHIP/MTRBaseDevice.mm +++ b/src/darwin/Framework/CHIP/MTRBaseDevice.mm @@ -283,7 +283,7 @@ - (void)invalidateCASESession ErrorCallback errorCallback, MTRDeviceResubscriptionScheduledHandler _Nullable resubscriptionScheduledHandler, MTRSubscriptionEstablishedHandler _Nullable subscriptionEstablishedHandler, OnDoneHandler _Nullable onDoneHandler) : MTRBaseSubscriptionCallback(attributeReportCallback, eventReportCallback, errorCallback, resubscriptionScheduledHandler, - subscriptionEstablishedHandler, onDoneHandler) + subscriptionEstablishedHandler, onDoneHandler) { } @@ -2290,8 +2290,12 @@ + (MTRAttributeRequestPath *)requestPathWithEndpointID:(NSNumber * _Nullable)end - (BOOL)isEqualToAttributeRequestPath:(MTRAttributeRequestPath *)path { - return [_endpoint isEqualToNumber:path.endpoint] && [_cluster isEqualToNumber:path.cluster] && - [_attribute isEqualToNumber:path.attribute]; + if (!path) + return NO; + + return (path.endpoint && [_endpoint isEqualToNumber:path.endpoint]) + && (path.cluster && [_cluster isEqualToNumber:path.cluster]) + && (path.attribute && [_attribute isEqualToNumber:path.attribute]); } - (BOOL)isEqual:(id)object @@ -2362,8 +2366,12 @@ + (MTREventRequestPath *)requestPathWithEndpointID:(NSNumber * _Nullable)endpoin - (BOOL)isEqualToEventRequestPath:(MTREventRequestPath *)path { - return - [_endpoint isEqualToNumber:path.endpoint] && [_cluster isEqualToNumber:path.cluster] && [_event isEqualToNumber:path.event]; + if (!path) + return NO; + + return (path.endpoint && [_endpoint isEqualToNumber:path.endpoint]) + && (path.cluster && [_cluster isEqualToNumber:path.cluster]) + && (path.event && [_event isEqualToNumber:path.event]); } - (BOOL)isEqual:(id)object @@ -2432,7 +2440,11 @@ ConcreteClusterPath path(static_cast([endpointID unsignedShort - (BOOL)isEqualToClusterPath:(MTRClusterPath *)clusterPath { - return [_endpoint isEqualToNumber:clusterPath.endpoint] && [_cluster isEqualToNumber:clusterPath.cluster]; + if (!clusterPath) + return NO; + + return (clusterPath.endpoint && [_endpoint isEqualToNumber:clusterPath.endpoint]) + && (clusterPath.cluster && [_cluster isEqualToNumber:clusterPath.cluster]); } - (BOOL)isEqual:(id)object @@ -2520,7 +2532,10 @@ ConcreteDataAttributePath path(static_cast([endpointID unsigne - (BOOL)isEqualToAttributePath:(MTRAttributePath *)attributePath { - return [self isEqualToClusterPath:attributePath] && [_attribute isEqualToNumber:attributePath.attribute]; + if (!attributePath) + return NO; + + return [self isEqualToClusterPath:attributePath] && attributePath.attribute && [_attribute isEqualToNumber:attributePath.attribute]; } - (BOOL)isEqual:(id)object @@ -2613,7 +2628,10 @@ ConcreteEventPath path(static_cast([endpointID unsignedShortVa - (BOOL)isEqualToEventPath:(MTREventPath *)eventPath { - return [self isEqualToClusterPath:eventPath] && [_event isEqualToNumber:eventPath.event]; + if (!eventPath) + return NO; + + return [self isEqualToClusterPath:eventPath] && eventPath.event && [_event isEqualToNumber:eventPath.event]; } - (BOOL)isEqual:(id)object @@ -2703,7 +2721,10 @@ ConcreteCommandPath path(static_cast([endpointID unsignedShort - (BOOL)isEqualToCommandPath:(MTRCommandPath *)commandPath { - return [self isEqualToClusterPath:commandPath] && [_command isEqualToNumber:commandPath.command]; + if (!commandPath) + return NO; + + return [self isEqualToClusterPath:commandPath] && commandPath.command && [_command isEqualToNumber:commandPath.command]; } - (BOOL)isEqual:(id)object diff --git a/src/darwin/Framework/CHIP/MTRDevice.mm b/src/darwin/Framework/CHIP/MTRDevice.mm index 298b31a5406bce..676d3a83b74028 100644 --- a/src/darwin/Framework/CHIP/MTRDevice.mm +++ b/src/darwin/Framework/CHIP/MTRDevice.mm @@ -177,8 +177,8 @@ - (void)_deviceInternalStateChanged:(MTRDevice *)device; UnsolicitedMessageFromPublisherHandler unsolicitedMessageFromPublisherHandler, ReportBeginHandler reportBeginHandler, ReportEndHandler reportEndHandler) : MTRBaseSubscriptionCallback(attributeReportCallback, eventReportCallback, errorCallback, resubscriptionCallback, - subscriptionEstablishedHandler, onDoneHandler, unsolicitedMessageFromPublisherHandler, reportBeginHandler, - reportEndHandler) + subscriptionEstablishedHandler, onDoneHandler, unsolicitedMessageFromPublisherHandler, reportBeginHandler, + reportEndHandler) { } @@ -336,7 +336,11 @@ - (id)copyWithZone:(NSZone *)zone - (BOOL)isEqualToClusterData:(MTRDeviceClusterData *)otherClusterData { - return [_dataVersion isEqual:otherClusterData.dataVersion] && [_attributes isEqual:otherClusterData.attributes]; + if (!otherClusterData) + return NO; + + return (otherClusterData.dataVersion && [_dataVersion isEqual:otherClusterData.dataVersion]) + && (otherClusterData.attributes && [_attributes isEqual:otherClusterData.attributes]); } - (BOOL)isEqual:(id)object From 0d29207177c13133a09af25975a92fe969bd26e4 Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Fri, 12 Jul 2024 18:16:25 +0000 Subject: [PATCH 2/2] Restyled by clang-format --- src/darwin/Framework/CHIP/MTRBaseDevice.mm | 2 +- src/darwin/Framework/CHIP/MTRDevice.mm | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRBaseDevice.mm b/src/darwin/Framework/CHIP/MTRBaseDevice.mm index e93c5992a4121b..da40f1ca24d9ac 100644 --- a/src/darwin/Framework/CHIP/MTRBaseDevice.mm +++ b/src/darwin/Framework/CHIP/MTRBaseDevice.mm @@ -283,7 +283,7 @@ - (void)invalidateCASESession ErrorCallback errorCallback, MTRDeviceResubscriptionScheduledHandler _Nullable resubscriptionScheduledHandler, MTRSubscriptionEstablishedHandler _Nullable subscriptionEstablishedHandler, OnDoneHandler _Nullable onDoneHandler) : MTRBaseSubscriptionCallback(attributeReportCallback, eventReportCallback, errorCallback, resubscriptionScheduledHandler, - subscriptionEstablishedHandler, onDoneHandler) + subscriptionEstablishedHandler, onDoneHandler) { } diff --git a/src/darwin/Framework/CHIP/MTRDevice.mm b/src/darwin/Framework/CHIP/MTRDevice.mm index 676d3a83b74028..713eca60bae43b 100644 --- a/src/darwin/Framework/CHIP/MTRDevice.mm +++ b/src/darwin/Framework/CHIP/MTRDevice.mm @@ -177,8 +177,8 @@ - (void)_deviceInternalStateChanged:(MTRDevice *)device; UnsolicitedMessageFromPublisherHandler unsolicitedMessageFromPublisherHandler, ReportBeginHandler reportBeginHandler, ReportEndHandler reportEndHandler) : MTRBaseSubscriptionCallback(attributeReportCallback, eventReportCallback, errorCallback, resubscriptionCallback, - subscriptionEstablishedHandler, onDoneHandler, unsolicitedMessageFromPublisherHandler, reportBeginHandler, - reportEndHandler) + subscriptionEstablishedHandler, onDoneHandler, unsolicitedMessageFromPublisherHandler, reportBeginHandler, + reportEndHandler) { }