[git commit] hush: fix handling of \<eof> in double-quoted strings

Denys Vlasenko vda.linux at googlemail.com
Tue Apr 10 12:49:01 UTC 2018


commit: https://git.busybox.net/busybox/commit/?id=4709df0f152c477c191f83e18bfecabb2fb2c1f9
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

function                                             old     new   delta
encode_string                                        268     250     -18

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 shell/hush.c                                    | 11 ++++++-----
 shell/hush_test/hush-parsing/bkslash_eof2.right |  2 ++
 shell/hush_test/hush-parsing/bkslash_eof2.tests |  4 ++++
 3 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/shell/hush.c b/shell/hush.c
index 5df8d4744..98ba96e0c 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -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 "..."]
diff --git a/shell/hush_test/hush-parsing/bkslash_eof2.right b/shell/hush_test/hush-parsing/bkslash_eof2.right
new file mode 100644
index 000000000..8be75727f
--- /dev/null
+++ b/shell/hush_test/hush-parsing/bkslash_eof2.right
@@ -0,0 +1,2 @@
+hush: syntax error: unterminated "
+One:1
diff --git a/shell/hush_test/hush-parsing/bkslash_eof2.tests b/shell/hush_test/hush-parsing/bkslash_eof2.tests
new file mode 100755
index 000000000..da1f08db6
--- /dev/null
+++ b/shell/hush_test/hush-parsing/bkslash_eof2.tests
@@ -0,0 +1,4 @@
+printf 'echo "unterminated string\\' >test.tmp.sh
+. ./test.tmp.sh
+echo One:$?
+rm -f test.tmp.sh


More information about the busybox-cvs mailing list