lineedit: fix crash when icanon set with -echo

When icanon is set with -echo (e.g. ssh from an emacs shell) then
S.state will remain null but later it will be deferenced causing ash to
crash. Fix: additional check on state.

Signed-off-by: Akos Somfai <akos.somfai@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Akos Somfai 2023-04-03 22:52:06 +02:00 committed by Denys Vlasenko
parent 384cd2e436
commit 38d2d26a5f

View File

@ -254,7 +254,7 @@ static NOINLINE const char *get_homedir_or_NULL(void)
const char *home; const char *home;
# if ENABLE_SHELL_ASH || ENABLE_SHELL_HUSH # if ENABLE_SHELL_ASH || ENABLE_SHELL_HUSH
home = state->sh_get_var ? state->sh_get_var("HOME") : getenv("HOME"); home = state && state->sh_get_var ? state->sh_get_var("HOME") : getenv("HOME");
# else # else
home = getenv("HOME"); home = getenv("HOME");
# endif # endif
@ -2038,7 +2038,7 @@ static void parse_and_put_prompt(const char *prmt_ptr)
if (!cwd_buf) { if (!cwd_buf) {
const char *home; const char *home;
# if EDITING_HAS_sh_get_var # if EDITING_HAS_sh_get_var
cwd_buf = state->sh_get_var cwd_buf = state && state->sh_get_var
? xstrdup(state->sh_get_var("PWD")) ? xstrdup(state->sh_get_var("PWD"))
: xrealloc_getcwd_or_warn(NULL); : xrealloc_getcwd_or_warn(NULL);
# else # else