]> git.rm.cloudns.org Git - xonotic/darkplaces.git/commitdiff
don't crash if key bindings functions are called with bogus keynums
authorhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Wed, 7 Jun 2006 08:33:57 +0000 (08:33 +0000)
committerhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Wed, 7 Jun 2006 08:33:57 +0000 (08:33 +0000)
git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@6434 d7cf8633-e32d-0410-b094-e92efae38249

keys.c

diff --git a/keys.c b/keys.c
index 9db315f565821428dbeea8a380b8ef02acb5dc98..93ddfadaf729da136fc77971f65d65a44cfdb56c 100644 (file)
--- a/keys.c
+++ b/keys.c
@@ -596,7 +596,7 @@ Key_SetBinding (int keynum, int bindmap, const char *binding)
        char *newbinding;
        size_t l;
 
-       if (keynum == -1)
+       if (keynum == -1 || keynum >= MAX_KEYS)
                return;
 
 // free old bindings
@@ -657,7 +657,7 @@ Key_In_Bind_f (void)
        }
 
        b = Key_StringToKeynum (Cmd_Argv (2));
-       if (b == -1) {
+       if (b == -1 || b >= MAX_KEYS) {
                Con_Printf("\"%s\" isn't a valid key\n", Cmd_Argv (2));
                return;
        }
@@ -752,7 +752,7 @@ Key_Bind_f (void)
                return;
        }
        b = Key_StringToKeynum (Cmd_Argv (1));
-       if (b == -1) {
+       if (b == -1 || b >= MAX_KEYS) {
                Con_Printf("\"%s\" isn't a valid key\n", Cmd_Argv (1));
                return;
        }
@@ -823,6 +823,8 @@ Key_Init (void)
 const char *Key_GetBind (int key)
 {
        const char *bind;
+       if (key < 0 || key >= MAX_KEYS)
+               return NULL;
        bind = keybindings[key_bmap][key];
        if (!bind)
                bind = keybindings[key_bmap2][key];
@@ -843,6 +845,9 @@ Key_Event (int key, char ascii, qboolean down)
        const char *bind;
        qboolean q;
 
+       if (key < 0 || key >= MAX_KEYS)
+               return;
+
        // get key binding
        bind = keybindings[key_bmap][key];
        if (!bind)
@@ -962,7 +967,7 @@ Key_Event (int key, char ascii, qboolean down)
        // ignore binds while a video is played, let the video system handle the key event
        if (cl_videoplaying)
        {
-               CL_Video_KeyEvent (key, ascii, keydown[key] != 0); 
+               CL_Video_KeyEvent (key, ascii, keydown[key] != 0);
                return;
        }