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
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 @@
return EXIT_FAILURE;
}
cwd = xgetcwd(cwd);
+ if (!cwd)
+ cwd = unknown;
return EXIT_SUCCESS;
}
@@ -568,6 +570,8 @@
static int builtin_pwd(struct child_prog *dummy)
{
cwd = xgetcwd(cwd);
+ if (!cwd)
+ cwd = unknown;
puts(cwd);
return EXIT_SUCCESS;
}
@@ -2307,6 +2311,8 @@
/* initialize the cwd -- this is never freed...*/
cwd = xgetcwd(0);
+ if (!cwd)
+ cwd = unknown;
#ifdef BB_FEATURE_COMMAND_EDITING
cmdedit_set_initial_prompt();
#else