diff options
author | Eric Andersen | 2001-05-11 16:58:46 +0000 |
---|---|---|
committer | Eric Andersen | 2001-05-11 16:58:46 +0000 |
commit | 5f265b755a92e7efdbd0d18694913209dfd9e055 (patch) | |
tree | e6644e9f97dab0198ad771e1d330e02a7cce8553 /shell/hush.c | |
parent | 9d94deabd398634c6d1c601ba276f5afd97b2050 (diff) | |
download | busybox-5f265b755a92e7efdbd0d18694913209dfd9e055.zip busybox-5f265b755a92e7efdbd0d18694913209dfd9e055.tar.gz |
Fix a segfault in lash, hush, and cmdedit. Each of these used
xgetcwd, but did not check the return for a NULL, and then continued
to call strlen on the NULL when the cwd had been removed from under it.
-Erik
Diffstat (limited to 'shell/hush.c')
-rw-r--r-- | shell/hush.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/shell/hush.c b/shell/hush.c index abc8f6e..9a2243a 100644 --- a/shell/hush.c +++ b/shell/hush.c @@ -429,6 +429,8 @@ static int builtin_cd(struct child_prog *child) return EXIT_FAILURE; } cwd = xgetcwd(cwd); + if (!cwd) + cwd = unknown; return EXIT_SUCCESS; } @@ -568,6 +570,8 @@ static int builtin_jobs(struct child_prog *child) static int builtin_pwd(struct child_prog *dummy) { cwd = xgetcwd(cwd); + if (!cwd) + cwd = unknown; puts(cwd); return EXIT_SUCCESS; } @@ -2307,6 +2311,8 @@ int shell_main(int argc, char **argv) /* initialize the cwd -- this is never freed...*/ cwd = xgetcwd(0); + if (!cwd) + cwd = unknown; #ifdef BB_FEATURE_COMMAND_EDITING cmdedit_set_initial_prompt(); #else |