]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - cmd.c
fix segfault with long aliases
[xonotic/darkplaces.git] / cmd.c
diff --git a/cmd.c b/cmd.c
index e9e3a971ae6c42129c0c652b9596d0544d2c5e89..4e1fb7297885840f42bbb706e960eede4c06a445 100644 (file)
--- a/cmd.c
+++ b/cmd.c
@@ -24,11 +24,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 #define        MAX_ALIAS_NAME  32
 // this is the largest script file that can be executed in one step
 // LordHavoc: inreased this from 8192 to 32768
-#define CMDBUFSIZE 32768
+// div0: increased this from 32k to 128k
+#define CMDBUFSIZE 131072
 // maximum number of parameters to a command
 #define        MAX_ARGS 80
 // maximum tokenizable commandline length (counting NUL terminations)
-#define CMD_TOKENIZELENGTH (MAX_INPUTLINE + 80)
+#define CMD_TOKENIZELENGTH (MAX_INPUTLINE + MAX_ARGS)
 
 typedef struct cmdalias_s
 {
@@ -168,6 +169,11 @@ void Cbuf_Execute (void)
                                break;
                }
 
+               /* should never happen
+               if(i >= MAX_INPUTLINE)
+                       i = MAX_INPUTLINE - 1;
+               */
+
                memcpy (line, text, i);
                line[i] = 0;
 
@@ -181,7 +187,7 @@ void Cbuf_Execute (void)
                {
                        i++;
                        cmd_text.cursize -= i;
-                       memcpy (cmd_text.data, text+i, cmd_text.cursize);
+                       memmove (cmd_text.data, text+i, cmd_text.cursize);
                }
 
 // execute the command line
@@ -305,7 +311,7 @@ static void Cmd_Exec_f (void)
                Con_Printf("couldn't exec %s\n",Cmd_Argv(1));
                return;
        }
-       Con_DPrintf("execing %s\n",Cmd_Argv(1));
+       Con_Printf("execing %s\n",Cmd_Argv(1));
 
        // if executing default.cfg for the first time, lock the cvar defaults
        // it may seem backwards to insert this text BEFORE the default.cfg
@@ -412,7 +418,7 @@ static void Cmd_Toggle_f(void)
                }
                else
                { // Invalid CVar
-                       Con_Printf("ERROR : CVar '%s' not found\n", Cmd_Argv(2) );
+                       Con_Printf("ERROR : CVar '%s' not found\n", Cmd_Argv(1) );
                }
        }
 }
@@ -823,12 +829,12 @@ Called for aliases and fills in the alias into the cbuffer
 */
 static void Cmd_ExecuteAlias (cmdalias_t *alias)
 {
-       static char buffer[ MAX_INPUTLINE + 2 ];
-       static char buffer2[ MAX_INPUTLINE * 2 + 2 ];
+       static char buffer[ MAX_INPUTLINE ];
+       static char buffer2[ MAX_INPUTLINE ];
        Cmd_PreprocessString( alias->value, buffer, sizeof(buffer) - 2, alias );
        // insert at start of command buffer, so that aliases execute in order
        // (fixes bug introduced by Black on 20050705)
-       
+
        // Note: Cbuf_PreprocessString will be called on this string AGAIN! So we
        // have to make sure that no second variable expansion takes place, otherwise
        // alias parameters containing dollar signs can have bad effects.