keyboard: Avoid access beyond end off buffer
authorRob Bradford <rob@linux.intel.com>
Tue, 9 Oct 2012 17:44:34 +0000 (18:44 +0100)
committerKristian Høgsberg <krh@bitplanet.net>
Wed, 10 Oct 2012 02:56:46 +0000 (22:56 -0400)
If the for loop does not match on a button it will fall through and try and
dereference into the array using the terminating value of the loop. This
terminating value of the loop is the dimension of the array and thus beyond
its bounds.

Cc: Jan Arne Petersen <jpetersen@openismus.com>
Signed-off-by: Rob Bradford <rob@linux.intel.com>
clients/keyboard.c

index 8820a22..19eb034 100644 (file)
@@ -313,12 +313,12 @@ button_handler(struct widget *widget,
        col = x / key_width + row * columns;
        for (i = 0; i < sizeof(keys) / sizeof(*keys); ++i) {
                col -= keys[i].width;
-               if (col < 0)
+               if (col < 0) {
+                       keyboard_handle_key(keyboard, &keys[i]);
                        break;
+               }
        }
 
-       keyboard_handle_key(keyboard, &keys[i]);
-
        widget_schedule_redraw(widget);
 }