Skip to content

Commit

Permalink
nshlib/pipeline: Concat variable arguments failed
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
JianyuWang0623 authored and xiaoxiang781216 committed Nov 14, 2024
1 parent 3a6ecb8 commit 3c4ddd2
Showing 1 changed file with 10 additions and 8 deletions.
18 changes: 10 additions & 8 deletions nshlib/nsh_parse.c
Original file line number Diff line number Diff line change
Expand Up @@ -2677,6 +2677,7 @@ static int nsh_parse_command(FAR struct nsh_vtbl_s *vtbl, FAR char *cmdline)
{
FAR char *arg;
FAR char *sh_argv[4];
char sh_arg2[CONFIG_NSH_LINELEN];

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

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

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

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

sh_argv[0] = "sh";
sh_argv[1] = "-c";
sh_argv[2] = argv[0];
sh_argv[2] = sh_arg2;
sh_argv[3] = NULL;

ret = pipe2(pipefd, 0);
Expand Down

0 comments on commit 3c4ddd2

Please sign in to comment.