Date: Wed, 1 Mar 2006 23:52:09 +0100
From: Sam Hocevar
Subject: [SDL] [patch] aalib driver
Hi there. The attached patch fixes a buffer overflow in the aalib
driver and also adds a workaround for a conflict between arrow keys and
the numeric keypad that have the same scancode on aalib. The patch gives
precedence to the arrow keys.
--- a/src/video/aalib/SDL_aaevents.c Wed Mar 01 09:56:51 2006 +0000
+++ b/src/video/aalib/SDL_aaevents.c Thu Mar 02 03:18:21 2006 +0000
@@ -126,12 +126,6 @@
for ( i=0; i<SDL_arraysize(keymap); ++i )
keymap[i] = SDLK_UNKNOWN;
- keymap[AA_ESC] = SDLK_ESCAPE;
- keymap[AA_UP] = SDLK_UP;
- keymap[AA_DOWN] = SDLK_DOWN;
- keymap[AA_LEFT] = SDLK_LEFT;
- keymap[AA_RIGHT] = SDLK_RIGHT;
-
/* Alphabet keys */
for ( i = 0; i<26; ++i ){
keymap['a' + i] = SDLK_a+i;
@@ -179,10 +173,20 @@
keymap[293] = SDLK_KP7;
keymap[295] = SDLK_KP8;
keymap[298] = SDLK_KP9;
+
+ keymap[AA_ESC] = SDLK_ESCAPE;
+ keymap[AA_UP] = SDLK_UP;
+ keymap[AA_DOWN] = SDLK_DOWN;
+ keymap[AA_LEFT] = SDLK_LEFT;
+ keymap[AA_RIGHT] = SDLK_RIGHT;
}
static SDL_keysym *TranslateKey(int scancode, SDL_keysym *keysym)
{
+ /* Sanity check */
+ if ( scancode >= SDL_arraysize(keymap) )
+ scancode = AA_UNKNOWN;
+
/* Set the keysym information */
keysym->scancode = scancode;
keysym->sym = keymap[scancode];