hush: fix handling of \<eof> in double-quoted strings

function                                             old     new   delta
encode_string                                        268     250     -18

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2018-04-10 14:49:01 +02:00
parent bcf56114fa
commit 4709df0f15
3 changed files with 12 additions and 5 deletions

View File

@ -4913,11 +4913,12 @@ static int encode_string(o_string *as_string,
ch, ch, !!(dest->o_expflags & EXP_FLAG_ESC_GLOB_CHARS));
if (process_bkslash && ch == '\\') {
if (next == EOF) {
// TODO: what if in interactive shell a file with
// echo "unterminated string\<eof>
// is sourced?
syntax_error("\\<eof>");
xfunc_die();
/* Testcase: in interactive shell a file with
* echo "unterminated string\<eof>
* is sourced.
*/
syntax_error_unterm_ch('"');
return 0; /* error */
}
/* bash:
* "The backslash retains its special meaning [in "..."]

View File

@ -0,0 +1,2 @@
hush: syntax error: unterminated "
One:1

View File

@ -0,0 +1,4 @@
printf 'echo "unterminated string\\' >test.tmp.sh
. ./test.tmp.sh
echo One:$?
rm -f test.tmp.sh