Skip to content

Commit 3c4ddd2

Browse files
JianyuWang0623xiaoxiang781216
authored andcommitted
nshlib/pipeline: Concat variable arguments failed
1. Without this patch nsh> set var_test `uname` nsh> echo $var_test NuttX nsh> echo $var_test | cat sh [5:100] nsh> 2. With this patch nsh> set var_test `uname` nsh> echo $var_test NuttX nsh> echo $var_test | cat sh [4:100] NuttX nsh> Signed-off-by: wangjianyu3 <wangjianyu3@xiaomi.com>
1 parent 3a6ecb8 commit 3c4ddd2

File tree

1 file changed

+10
-8
lines changed

1 file changed

+10
-8
lines changed

nshlib/nsh_parse.c

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2677,6 +2677,7 @@ static int nsh_parse_command(FAR struct nsh_vtbl_s *vtbl, FAR char *cmdline)
26772677
{
26782678
FAR char *arg;
26792679
FAR char *sh_argv[4];
2680+
char sh_arg2[CONFIG_NSH_LINELEN];
26802681

26812682
if (argv[argc][g_pipeline1_len])
26822683
{
@@ -2694,20 +2695,21 @@ static int nsh_parse_command(FAR struct nsh_vtbl_s *vtbl, FAR char *cmdline)
26942695
goto dynlist_free;
26952696
}
26962697

2697-
for (ret = 0; ret < argc - 1; ret++)
2698-
{
2699-
FAR char *p_arg = argv[ret];
2700-
size_t len = strlen(p_arg);
2698+
sh_arg2[0] = '\0';
27012699

2702-
/* Restore from split args to concat args. */
2700+
for (ret = 0; ret < argc; ret++)
2701+
{
2702+
strlcat(sh_arg2, argv[ret], sizeof(sh_arg2));
27032703

2704-
DEBUGASSERT(&p_arg[len + 1] == argv[ret + 1]);
2705-
p_arg[len] = ' ';
2704+
if (ret < argc - 1)
2705+
{
2706+
strcat(sh_arg2, " ");
2707+
}
27062708
}
27072709

27082710
sh_argv[0] = "sh";
27092711
sh_argv[1] = "-c";
2710-
sh_argv[2] = argv[0];
2712+
sh_argv[2] = sh_arg2;
27112713
sh_argv[3] = NULL;
27122714

27132715
ret = pipe2(pipefd, 0);

0 commit comments

Comments
 (0)