From e9dccab9f4bf3311ae50f19e39e7e499b25edca2 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Sun, 5 Aug 2018 14:55:01 +0200 Subject: [PATCH] hush: fix fallout from FILE->HFILE conversion Signed-off-by: Denys Vlasenko --- shell/hush.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/shell/hush.c b/shell/hush.c index 3407711cd..c4b124825 100644 --- a/shell/hush.c +++ b/shell/hush.c @@ -1683,9 +1683,15 @@ static void close_all_HFILE_list(void) * It is disastrous if we share memory with a vforked parent. * I'm not sure we never come here after vfork. * Therefore just close fd, nothing more. + * + * ">" instead of ">=": we don't close fd#0, + * interactive shell uses hfopen(NULL) as stdin input + * which has fl->fd == 0, but fd#0 gets redirected in pipes. + * If we'd close it here, then e.g. interactive "set | sort" + * with NOFORKed sort, would have sort's input fd closed. */ - /*hfclose(fl); - unsafe */ - if (fl->fd >= 0) + if (fl->fd > 0) + /*hfclose(fl); - unsafe */ close(fl->fd); fl = fl->next_hfile; }