summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Anderson <seanga2@gmail.com>2021-03-01 00:29:51 +0300
committerTom Rini <trini@konsulko.com>2021-04-13 00:17:11 +0300
commit9539f71675c40485e448efb3c4e06afc8d102f94 (patch)
treee4a3d2be937c6593a057e8a8a077645f2af09d40
parentc146de48727da66ea7dc43f12bd41814cff2faa8 (diff)
downloadu-boot-9539f71675c40485e448efb3c4e06afc8d102f94.tar.xz
hush: Fix assignments being misinterpreted as commands
If there were no variable substitutions in a command, then initial assignments would be misinterpreted as commands, instead of being skipped over. This is demonstrated by the following example: => foo=bar echo baz Unknown command 'foo=bar' - try 'help' Signed-off-by: Sean Anderson <seanga2@gmail.com>
-rw-r--r--common/cli_hush.c2
-rw-r--r--test/cmd/test_echo.c2
2 files changed, 3 insertions, 1 deletions
diff --git a/common/cli_hush.c b/common/cli_hush.c
index 9466651d1a..6cff3b1185 100644
--- a/common/cli_hush.c
+++ b/common/cli_hush.c
@@ -1673,7 +1673,7 @@ static int run_pipe_real(struct pipe *pi)
return -1;
}
/* Process the command */
- return cmd_process(flag, child->argc, child->argv,
+ return cmd_process(flag, child->argc - i, child->argv + i,
&flag_repeat, NULL);
#endif
}
diff --git a/test/cmd/test_echo.c b/test/cmd/test_echo.c
index 9d60d7d1a0..091e4f823c 100644
--- a/test/cmd/test_echo.c
+++ b/test/cmd/test_echo.c
@@ -34,6 +34,8 @@ static struct test_data echo_data[] = {
*/
{"setenv jQx X; echo \"a)\" ${jQx} 'b)' '${jQx}' c) ${jQx}; setenv jQx",
"a) X b) ${jQx} c) X"},
+ /* Test shell variable assignments without substitutions */
+ {"foo=bar echo baz", "baz"},
/* Test handling of shell variables. */
{"setenv jQx; for jQx in 1 2 3; do echo -n \"${jQx}, \"; done; echo;",
"1, 2, 3, "},