summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjacksonmj <jacksonmj@jacksonmj.none>2011-01-30 22:37:59 (GMT)
committer jacksonmj <jacksonmj@jacksonmj.none>2011-01-30 22:37:59 (GMT)
commite2b916a91fcd0563853e45a8a8c509d63876e8e5 (patch)
treee5f09047773cbc91832c085670ca3e760ca190db /src
parentf97990fedd034e013d27bfb83a6196ab0d4c9a66 (diff)
downloadpowder-e2b916a91fcd0563853e45a8a8c509d63876e8e5.zip
powder-e2b916a91fcd0563853e45a8a8c509d63876e8e5.tar.gz
Console segfault fix
ed.str is deallocated when console_ui returns. Dereferencing the returned pointer to ed.str therefore results in bad things.
Diffstat (limited to 'src')
-rw-r--r--src/interface.c2
-rw-r--r--src/main.c3
2 files changed, 4 insertions, 1 deletions
diff --git a/src/interface.c b/src/interface.c
index e345007..d020bf6 100644
--- a/src/interface.c
+++ b/src/interface.c
@@ -3883,7 +3883,7 @@ char *console_ui(pixel *vid_buf,char error[255]) { //TODO: error messages, show
currentcommand->prev_command = last_command;
currentcommand->command = mystrdup(ed.str);
last_command = currentcommand;
- return ed.str;
+ return currentcommand->command;
}
if (sdl_key==SDLK_ESCAPE || sdl_key==SDLK_BACKQUOTE)
{
diff --git a/src/main.c b/src/main.c
index d20fb35..a3891d0 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1707,6 +1707,7 @@ int main(int argc, char *argv[])
//char error[255] = "error!";
sys_pause = 1;
console = console_ui(vid_buf,error);
+ console = mystrdup(console);
strcpy(error,"");
if(console && strcmp(console, "")!=0 && strncmp(console, " ", 1)!=0)
{
@@ -1716,6 +1717,7 @@ int main(int argc, char *argv[])
console5 = strtok(NULL, " ");
if(strcmp(console2, "quit")==0)
{
+ free(console);
break;
}
else if(strcmp(console2, "load")==0 && console3)
@@ -1955,6 +1957,7 @@ int main(int argc, char *argv[])
else
sprintf(error, "Invalid Command", console2);
}
+ free(console);
if(!console_mode)
hud_enable = 1;
}