From 7eab1c3aa5ab0a4463c9953072fc3a32e21a8b29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sa=C3=BAl=20Ibarra=20Corretg=C3=A9?= <saghul@jitsi.org> Date: Fri, 18 Dec 2020 09:57:29 +0100 Subject: [PATCH] ios: fix crash if device doesn't have a name We have observed this crash: ~~~ Fatal Exception: NSInvalidArgumentException 0 CoreFoundation 0x19c404654 __exceptionPreprocess 1 libobjc.A.dylib 0x19c126bcc objc_exception_throw 2 CoreFoundation 0x19c45a280 -[__NSCFString characterAtIndex:].cold.1 3 CoreFoundation 0x19c4636e8 -[__NSPlaceholderDictionary initWithObjects:forKeys:count:].cold.5 4 CoreFoundation 0x19c2f20bc -[__NSPlaceholderDictionary initWithObjects:forKeys:count:] 5 CoreFoundation 0x19c2e40c4 +[NSDictionary dictionaryWithObjects:forKeys:count:] 6 JitsiMeet 0x104d58d20 -[WebRTCModule(RTCMediaStream) enumerateDevices:] + 145 (WebRTCModule+RTCMediaStream.m:145) ~~~ --- ios/RCTWebRTC/WebRTCModule+RTCMediaStream.m | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/ios/RCTWebRTC/WebRTCModule+RTCMediaStream.m b/ios/RCTWebRTC/WebRTCModule+RTCMediaStream.m index 7635205..109fe33 100644 --- a/ios/RCTWebRTC/WebRTCModule+RTCMediaStream.m +++ b/ios/RCTWebRTC/WebRTCModule+RTCMediaStream.m @@ -123,17 +123,21 @@ RCT_EXPORT_METHOD(enumerateDevices:(RCTResponseSenderBlock)callback) mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionUnspecified]; for (AVCaptureDevice *device in videoevicesSession.devices) { - NSString *position = @""; + NSString *position = @"unknown"; if (device.position == AVCaptureDevicePositionBack) { position = @"environment"; } else if (device.position == AVCaptureDevicePositionFront) { position = @"front"; } + NSString *label = "Unknown video device"; + if (device.localizedName != nil) { + label = device.localizedName; + } [devices addObject:@{ @"facing": position, @"deviceId": device.uniqueID, @"groupId": @"", - @"label": device.localizedName, + @"label": label, @"kind": @"videoinput", }]; } @@ -142,10 +146,14 @@ RCT_EXPORT_METHOD(enumerateDevices:(RCTResponseSenderBlock)callback) mediaType:AVMediaTypeAudio position:AVCaptureDevicePositionUnspecified]; for (AVCaptureDevice *device in audioDevicesSession.devices) { + NSString *label = "Unknown audio device"; + if (device.localizedName != nil) { + label = device.localizedName; + } [devices addObject:@{ @"deviceId": device.uniqueID, @"groupId": @"", - @"label": device.localizedName, + @"label": label, @"kind": @"audioinput", }]; } -- GitLab