Browse Source

MacOS: Don't crash if no elements are returned by IOHIDDeviceCopyMatchingElements

Fixes #797
LD 6 years ago
parent
commit
791be4766a
1 changed files with 7 additions and 5 deletions
  1. 7 5
      panda/src/device/ioKitInputDevice.cxx

+ 7 - 5
panda/src/device/ioKitInputDevice.cxx

@@ -114,12 +114,14 @@ IOKitInputDevice(IOHIDDeviceRef device) :
   }
 
   CFArrayRef elements = IOHIDDeviceCopyMatchingElements(device, nullptr, 0);
-  CFIndex count = CFArrayGetCount(elements);
-  for (CFIndex i = 0; i < count; ++i) {
-    IOHIDElementRef element = (IOHIDElementRef)CFArrayGetValueAtIndex(elements, i);
-    parse_element(element);
+  if (elements) {
+    CFIndex count = CFArrayGetCount(elements);
+    for (CFIndex i = 0; i < count; ++i) {
+      IOHIDElementRef element = (IOHIDElementRef)CFArrayGetValueAtIndex(elements, i);
+      parse_element(element);
+    }
+    CFRelease(elements);
   }
-  CFRelease(elements);
 
   if (_hat_element != nullptr) {
     _hat_left_button = (int)_buttons.size();