Skip to content

Commit 1d864e5

Browse files
bzbarsky-appleadbridge
authored andcommitted
Make setupPayloadWithOnboardingPayload return error on invalid input. (project-chip#23357)
1 parent 7d38116 commit 1d864e5

File tree

1 file changed

+26
-1
lines changed

1 file changed

+26
-1
lines changed

src/darwin/Framework/CHIP/MTRSetupPayload.mm

+26-1
Original file line numberDiff line numberDiff line change
@@ -198,11 +198,36 @@ + (NSNumber *)generateRandomSetupPasscode
198198
return @(chip::kSetupPINCodeUndefinedValue);
199199
}
200200

201+
+ (bool)isQRCode:(NSString *)onboardingPayload
202+
{
203+
return [onboardingPayload hasPrefix:@"MT:"];
204+
}
205+
201206
+ (MTRSetupPayload * _Nullable)setupPayloadWithOnboardingPayload:(NSString *)onboardingPayload
202207
error:(NSError * __autoreleasing *)error
203208
{
204209
// TODO: Do we actually need the MTROnboardingPayloadParser abstraction?
205-
return [MTROnboardingPayloadParser setupPayloadForOnboardingPayload:onboardingPayload error:error];
210+
MTRSetupPayload * payload = [MTROnboardingPayloadParser setupPayloadForOnboardingPayload:onboardingPayload error:error];
211+
if (payload == nil) {
212+
return nil;
213+
}
214+
215+
bool isQRCode = [MTRSetupPayload isQRCode:onboardingPayload];
216+
bool validPayload;
217+
if (isQRCode) {
218+
validPayload = payload->_chipSetupPayload.isValidQRCodePayload();
219+
} else {
220+
validPayload = payload->_chipSetupPayload.isValidManualCode();
221+
}
222+
223+
if (!validPayload) {
224+
if (error) {
225+
*error = [MTRError errorForCHIPErrorCode:CHIP_ERROR_INVALID_ARGUMENT];
226+
}
227+
return nil;
228+
}
229+
230+
return payload;
206231
}
207232

208233
#pragma mark - NSSecureCoding

0 commit comments

Comments
 (0)