diff options
author | Denis Vlasenko | 2008-06-10 20:13:40 +0000 |
---|---|---|
committer | Denis Vlasenko | 2008-06-10 20:13:40 +0000 |
commit | 43360e51781942730f91bb19821e3f8f1087e4fa (patch) | |
tree | aed87780129aa4f24a47c868c1067bf44b92a55b /shell | |
parent | 2e76c3f9016f674dad7a38ec7ba5b068d233f189 (diff) | |
download | busybox-43360e51781942730f91bb19821e3f8f1087e4fa.zip busybox-43360e51781942730f91bb19821e3f8f1087e4fa.tar.gz |
hush: fix escaping of \[*?; add testsuites for these and for globbing
Diffstat (limited to 'shell')
-rw-r--r-- | shell/hush.c | 3 | ||||
-rw-r--r-- | shell/hush_test/hush-glob/glob1.right | 2 | ||||
-rwxr-xr-x | shell/hush_test/hush-glob/glob1.tests | 2 | ||||
-rw-r--r-- | shell/hush_test/hush-parsing/escape1.right | 4 | ||||
-rwxr-xr-x | shell/hush_test/hush-parsing/escape1.tests | 4 | ||||
-rw-r--r-- | shell/hush_test/hush-parsing/escape2.right | 4 | ||||
-rwxr-xr-x | shell/hush_test/hush-parsing/escape2.tests | 4 |
7 files changed, 21 insertions, 2 deletions
diff --git a/shell/hush.c b/shell/hush.c index 82bad66..e57f6e3 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: \\<eof>\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 0000000..f29ab4e --- /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 0000000..f980ce0 --- /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 0000000..1899b87 --- /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 0000000..67cfd1f --- /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 0000000..f55fd4a --- /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 0000000..ee71801 --- /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 |