ソースを参照

Fix crash when joystick name unavailable on OS X

Fixes #694.
Closes #701.
Aaron Jacobs 9 年 前
コミット
49d228207f
2 ファイル変更11 行追加4 行削除
  1. 1 0
      README.md
  2. 10 4
      src/cocoa_joystick.m

+ 1 - 0
README.md

@@ -88,6 +88,7 @@ used by the tests and examples and are not required to build the library.
                    when no windows existed
  - [Cocoa] Removed support for OS X 10.6
  - [Cocoa] Bugfix: Full screen windows on secondary monitors were mispositioned
+ - [Cocoa] Bugfix: Connecting a joystick that reports no name would segfault
  - [X11] Bugfix: Monitor connection and disconnection events were not reported
  - [X11] Bugfix: Decoding of UTF-8 text from XIM could continue past the end
  - [X11] Bugfix: An XKB structure was leaked during `glfwInit`

+ 10 - 4
src/cocoa_joystick.m

@@ -29,6 +29,7 @@
 
 #include <unistd.h>
 #include <ctype.h>
+#include <string.h>
 
 #include <mach/mach.h>
 #include <mach/mach_error.h>
@@ -287,10 +288,15 @@ static void matchCallback(void* context,
 
     CFStringRef name = IOHIDDeviceGetProperty(deviceRef,
                                               CFSTR(kIOHIDProductKey));
-    CFStringGetCString(name,
-                       joystick->name,
-                       sizeof(joystick->name),
-                       kCFStringEncodingUTF8);
+    if (name)
+    {
+        CFStringGetCString(name,
+                           joystick->name,
+                           sizeof(joystick->name),
+                           kCFStringEncodingUTF8);
+    }
+    else
+        strncpy(joystick->name, "Unknown", sizeof(joystick->name));
 
     joystick->axisElements = CFArrayCreateMutable(NULL, 0, NULL);
     joystick->buttonElements = CFArrayCreateMutable(NULL, 0, NULL);