fix for bug #107254.
authorbillh <billh@e2bd861d-eb25-0410-b326-f6ed22b6b98c>
Fri, 28 Feb 2003 14:34:01 +0000 (14:34 +0000)
committerbillh <billh@e2bd861d-eb25-0410-b326-f6ed22b6b98c>
Fri, 28 Feb 2003 14:34:01 +0000 (14:34 +0000)
git-svn-id: http://svn.gnome.org/svn/at-spi/trunk@405 e2bd861d-eb25-0410-b326-f6ed22b6b98c

registryd/deviceeventcontroller.c

index ef04e36..fd06a66 100644 (file)
@@ -27,7 +27,7 @@
 
 #undef  SPI_XKB_DEBUG
 #undef  SPI_DEBUG
-#undef  SPI_KEYEVENT_DEBUG
+#define  SPI_KEYEVENT_DEBUG
 
 #include <string.h>
 #include <ctype.h>
@@ -1216,8 +1216,10 @@ spi_keystroke_from_x_key_event (XKeyEvent *x_key_event)
   Accessibility_DeviceEvent key_event;
   KeySym keysym;
   const int cbuf_bytes = 20;
-  char cbuf [cbuf_bytes];
-  
+  char cbuf [cbuf_bytes+1];
+  int nbytes;
+
+  if (!x_key_event) g_error ("invalid key event!");
   keysym = XLookupKeysym (x_key_event, 0);
   key_event.id = (CORBA_long)(keysym);
   key_event.hw_code = (CORBA_short) x_key_event->keycode;
@@ -1312,10 +1314,12 @@ spi_keystroke_from_x_key_event (XKeyEvent *x_key_event)
         key_event.event_string = CORBA_string_dup ("Right");
        break;
       default:
-        if (XLookupString (x_key_event, cbuf, cbuf_bytes, &keysym, NULL) > 0)
+       nbytes = XLookupString (x_key_event, cbuf, cbuf_bytes, &keysym, NULL);
+        if (nbytes > 0)
           {
+           cbuf[nbytes] = '\0'; /* OK since length is cbuf_bytes+1 */
             key_event.event_string = CORBA_string_dup (cbuf);
-           if (isgraph (keysym))
+           if (keysym && g_ascii_isprint (keysym))
              {
                key_event.is_text = CORBA_TRUE; /* FIXME: incorrect for some composed chars? */
              }