[PATCH 1/2] ash: prevent error in backquotes in PS1 from exiting shell
Ron Yorston
rmy at pobox.com
Thu Apr 18 08:48:13 UTC 2019
Setting PS1 to:
PS1='`xxx(`'
causes the shell to terminate with the error:
sh: syntax error: unexpected end of file (expecting ")")
This happens because old-style backquotes require the input to be reread
and thus call setinputstring() a second time. Prevent the problem by
unwinding all recently opened files in expandstr().
function old new delta
unwindfiles - 22 +22
expandstr 247 262 +15
forkchild 631 625 -6
evalcommand 1694 1685 -9
ash_main 1346 1336 -10
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 1/3 up/down: 37/-25) Total: 12 bytes
Signed-off-by: Ron Yorston <rmy at pobox.com>
---
shell/ash.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/shell/ash.c b/shell/ash.c
index b707d00d0..039524010 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -13042,6 +13042,7 @@ expandstr(const char *ps, int syntax_type)
{
union node n;
int saveprompt;
+ struct parsefile *file_stop = g_parsefile;
/* XXX Fix (char *) cast. */
setinputstring((char *)ps);
@@ -13068,7 +13069,7 @@ expandstr(const char *ps, int syntax_type)
doprompt = saveprompt;
- popfile();
+ unwindfiles(file_stop);
n.narg.type = NARG;
n.narg.next = NULL;
--
2.20.1
More information about the busybox
mailing list