From 43360e51781942730f91bb19821e3f8f1087e4fa Mon Sep 17 00:00:00 2001 From: Denis Vlasenko Date: Tue, 10 Jun 2008 20:13:40 +0000 Subject: [PATCH] hush: fix escaping of \[*?; add testsuites for these and for globbing --- shell/hush.c | 3 +-- shell/hush_test/hush-glob/glob1.right | 2 ++ shell/hush_test/hush-glob/glob1.tests | 2 ++ shell/hush_test/hush-parsing/escape1.right | 4 ++++ shell/hush_test/hush-parsing/escape1.tests | 4 ++++ shell/hush_test/hush-parsing/escape2.right | 4 ++++ shell/hush_test/hush-parsing/escape2.tests | 4 ++++ 7 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 shell/hush_test/hush-glob/glob1.right create mode 100755 shell/hush_test/hush-glob/glob1.tests create mode 100644 shell/hush_test/hush-parsing/escape1.right create mode 100755 shell/hush_test/hush-parsing/escape1.tests create mode 100644 shell/hush_test/hush-parsing/escape2.right create mode 100755 shell/hush_test/hush-parsing/escape2.tests 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 -- 2.25.1