← Commit list

1b7a9b68d

Denys Vlasenko
Denys Vlasenko
2021-06-15
SUCCESS Duration: 153s

Subject

hush: fix handling of \^C and "^C"

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

shell/ash_test/ash-misc/control_char3.right+1 -0
@@ -0,0 +1 @@
+SHELL: line 1: : not found
shell/ash_test/ash-misc/control_char3.tests+2 -0
@@ -0,0 +1,2 @@
+# (set argv0 to "SHELL" to avoid "/path/to/shell: blah" in error messages)
+$THIS_SH -c '\' SHELL
shell/ash_test/ash-misc/control_char4.right+1 -0
@@ -0,0 +1 @@
+SHELL: line 1: -: not found
shell/ash_test/ash-misc/control_char4.tests+2 -0
@@ -0,0 +1,2 @@
+# (set argv0 to "SHELL" to avoid "/path/to/shell: blah" in error messages)
+$THIS_SH -c '"-"' SHELL
shell/hush.c+11 -0
@@ -5237,6 +5237,11 @@ static int encode_string(o_string *as_string,
}
#endif
o_addQchr(dest, ch);
+ if (ch == SPECIAL_VAR_SYMBOL) {
+ /* Convert "^C" to corresponding special variable reference */
+ o_addchr(dest, SPECIAL_VAR_QUOTED_SVS);
+ o_addchr(dest, SPECIAL_VAR_SYMBOL);
+ }
goto again;
#undef as_string
}
@@ -5348,6 +5353,11 @@ static struct pipe *parse_stream(char **pstring,
if (ch == '\n')
continue; /* drop \<newline>, get next char */
nommu_addchr(&ctx.as_string, '\\');
+ if (ch == SPECIAL_VAR_SYMBOL) {
+ nommu_addchr(&ctx.as_string, ch);
+ /* Convert \^C to corresponding special variable reference */
+ goto case_SPECIAL_VAR_SYMBOL;
+ }
o_addchr(&ctx.word, '\\');
if (ch == EOF) {
/* Testcase: eval 'echo Ok\' */
@@ -5672,6 +5682,7 @@ static struct pipe *parse_stream(char **pstring,
/* Note: nommu_addchr(&ctx.as_string, ch) is already done */
switch (ch) {
+ case_SPECIAL_VAR_SYMBOL:
case SPECIAL_VAR_SYMBOL:
/* Convert raw ^C to corresponding special variable reference */
o_addchr(&ctx.word, SPECIAL_VAR_SYMBOL);
shell/hush_test/hush-misc/control_char3.right+1 -0
@@ -0,0 +1 @@
+hush: can't execute '': No such file or directory
shell/hush_test/hush-misc/control_char3.tests+2 -0
@@ -0,0 +1,2 @@
+# (set argv0 to "SHELL" to avoid "/path/to/shell: blah" in error messages)
+$THIS_SH -c '\' SHELL
shell/hush_test/hush-misc/control_char4.right+1 -0
@@ -0,0 +1 @@
+hush: can't execute '-': No such file or directory
shell/hush_test/hush-misc/control_char4.tests+2 -0
@@ -0,0 +1,2 @@
+# (set argv0 to "SHELL" to avoid "/path/to/shell: blah" in error messages)
+$THIS_SH -c '"-"' SHELL