diff --git a/shell/hush.c b/shell/hush.c index 82bad664d..e57f6e371 100644 --- a/shell/hush.c +++ b/shell/hush.c @@ -3638,7 +3638,6 @@ static int parse_stream(o_string *dest, struct p_context *ctx, debug_printf_parse("parse_stream return 1: \\\n"); return 1; } - o_addqchr(dest, '\\', dest->o_quote); o_addqchr(dest, i_getch(input), dest->o_quote); break; case '$': @@ -3653,7 +3652,7 @@ static int parse_stream(o_string *dest, struct p_context *ctx, ch = i_getch(input); if (ch == EOF || ch == '\'') break; - o_addchr(dest, ch); + o_addqchr(dest, ch, 1); } if (ch == EOF) { syntax("unterminated '"); diff --git a/shell/hush_test/hush-glob/glob1.right b/shell/hush_test/hush-glob/glob1.right new file mode 100644 index 000000000..f29ab4e65 --- /dev/null +++ b/shell/hush_test/hush-glob/glob1.right @@ -0,0 +1,2 @@ +glob1.tests +glob1.tests diff --git a/shell/hush_test/hush-glob/glob1.tests b/shell/hush_test/hush-glob/glob1.tests new file mode 100755 index 000000000..f980ce064 --- /dev/null +++ b/shell/hush_test/hush-glob/glob1.tests @@ -0,0 +1,2 @@ +echo *glob1?t[e]sts* +echo "glob1"?'t'[e]s* diff --git a/shell/hush_test/hush-parsing/escape1.right b/shell/hush_test/hush-parsing/escape1.right new file mode 100644 index 000000000..1899b87ef --- /dev/null +++ b/shell/hush_test/hush-parsing/escape1.right @@ -0,0 +1,4 @@ +\ +a\b +\\ +c\\d diff --git a/shell/hush_test/hush-parsing/escape1.tests b/shell/hush_test/hush-parsing/escape1.tests new file mode 100755 index 000000000..67cfd1fef --- /dev/null +++ b/shell/hush_test/hush-parsing/escape1.tests @@ -0,0 +1,4 @@ +echo "\\" +echo a"\\"b +echo '\\' +echo c'\\'d diff --git a/shell/hush_test/hush-parsing/escape2.right b/shell/hush_test/hush-parsing/escape2.right new file mode 100644 index 000000000..f55fd4a42 --- /dev/null +++ b/shell/hush_test/hush-parsing/escape2.right @@ -0,0 +1,4 @@ +*?[a]* +a*?[a]*b +*?[a]* +c*?[a]*d diff --git a/shell/hush_test/hush-parsing/escape2.tests b/shell/hush_test/hush-parsing/escape2.tests new file mode 100755 index 000000000..ee718018d --- /dev/null +++ b/shell/hush_test/hush-parsing/escape2.tests @@ -0,0 +1,4 @@ +echo "*?[a]*" +echo a"*?[a]*"b +echo '*?[a]*' +echo c'*?[a]*'d