diff options
author | Denys Vlasenko | 2018-04-10 14:40:23 +0200 |
---|---|---|
committer | Denys Vlasenko | 2018-04-10 14:40:23 +0200 |
commit | bcf56114fa7f037cea579cdc8d17ac1a5dab93a3 (patch) | |
tree | 2bd982c3253f2ca83a84ecc2c4632f20c620a9ad /shell | |
parent | 92a930b4e8dce1b8d884a83d7f38bb139ab8317f (diff) | |
download | busybox-bcf56114fa7f037cea579cdc8d17ac1a5dab93a3.zip busybox-bcf56114fa7f037cea579cdc8d17ac1a5dab93a3.tar.gz |
hush: fix eval 'echo ok\'
function old new delta
parse_stream 2762 2753 -9
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'shell')
-rw-r--r-- | shell/hush.c | 14 | ||||
-rw-r--r-- | shell/hush_test/hush-parsing/bkslash_eof1.right | 1 | ||||
-rwxr-xr-x | shell/hush_test/hush-parsing/bkslash_eof1.tests | 1 |
3 files changed, 11 insertions, 5 deletions
diff --git a/shell/hush.c b/shell/hush.c index 6cd85cc..5df8d47 100644 --- a/shell/hush.c +++ b/shell/hush.c @@ -5379,15 +5379,19 @@ static struct pipe *parse_stream(char **pstring, continue; /* get next char */ case '\\': /*nommu_addchr(&ctx.as_string, '\\'); - already done */ - o_addchr(&ctx.word, '\\'); ch = i_getch(input); if (ch == EOF) { -//TODO: in ". FILE" containing "cmd\" (no newline) bash ignores last "\" - syntax_error("\\<eof>"); - xfunc_die(); + /* Ignore this '\'. Testcase: eval 'echo Ok\' */ +#if !BB_MMU + /* Remove trailing '\' from ctx.as_string */ + ctx.as_string.data[--ctx.as_string.length] = '\0'; +#endif + continue; /* get next char */ } + o_addchr(&ctx.word, '\\'); /* Example: echo Hello \2>file - * we need to know that word 2 is quoted */ + * we need to know that word 2 is quoted + */ ctx.word.has_quoted_part = 1; nommu_addchr(&ctx.as_string, ch); o_addchr(&ctx.word, ch); diff --git a/shell/hush_test/hush-parsing/bkslash_eof1.right b/shell/hush_test/hush-parsing/bkslash_eof1.right new file mode 100644 index 0000000..9766475 --- /dev/null +++ b/shell/hush_test/hush-parsing/bkslash_eof1.right @@ -0,0 +1 @@ +ok diff --git a/shell/hush_test/hush-parsing/bkslash_eof1.tests b/shell/hush_test/hush-parsing/bkslash_eof1.tests new file mode 100755 index 0000000..97629cb --- /dev/null +++ b/shell/hush_test/hush-parsing/bkslash_eof1.tests @@ -0,0 +1 @@ +eval 'echo ok\' |