Console segfault fix

ed.str is deallocated when console_ui returns. Dereferencing the
returned pointer to ed.str therefore results in bad things.
This commit is contained in:
jacksonmj 2011-01-30 22:37:59 +00:00
parent f97990fedd
commit e2b916a91f
2 changed files with 4 additions and 1 deletions

View File

@ -3883,7 +3883,7 @@ char *console_ui(pixel *vid_buf,char error[255]) { //TODO: error messages, show
currentcommand->prev_command = last_command; currentcommand->prev_command = last_command;
currentcommand->command = mystrdup(ed.str); currentcommand->command = mystrdup(ed.str);
last_command = currentcommand; last_command = currentcommand;
return ed.str; return currentcommand->command;
} }
if (sdl_key==SDLK_ESCAPE || sdl_key==SDLK_BACKQUOTE) if (sdl_key==SDLK_ESCAPE || sdl_key==SDLK_BACKQUOTE)
{ {

View File

@ -1707,6 +1707,7 @@ int main(int argc, char *argv[])
//char error[255] = "error!"; //char error[255] = "error!";
sys_pause = 1; sys_pause = 1;
console = console_ui(vid_buf,error); console = console_ui(vid_buf,error);
console = mystrdup(console);
strcpy(error,""); strcpy(error,"");
if(console && strcmp(console, "")!=0 && strncmp(console, " ", 1)!=0) if(console && strcmp(console, "")!=0 && strncmp(console, " ", 1)!=0)
{ {
@ -1716,6 +1717,7 @@ int main(int argc, char *argv[])
console5 = strtok(NULL, " "); console5 = strtok(NULL, " ");
if(strcmp(console2, "quit")==0) if(strcmp(console2, "quit")==0)
{ {
free(console);
break; break;
} }
else if(strcmp(console2, "load")==0 && console3) else if(strcmp(console2, "load")==0 && console3)
@ -1955,6 +1957,7 @@ int main(int argc, char *argv[])
else else
sprintf(error, "Invalid Command", console2); sprintf(error, "Invalid Command", console2);
} }
free(console);
if(!console_mode) if(!console_mode)
hud_enable = 1; hud_enable = 1;
} }