From 3c4ddd2802a189fccc802230ab946d50a97cb93c Mon Sep 17 00:00:00 2001 From: wangjianyu3 Date: Tue, 12 Nov 2024 16:58:01 +0800 Subject: [PATCH] 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 --- nshlib/nsh_parse.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/nshlib/nsh_parse.c b/nshlib/nsh_parse.c index a75ee5e87..96de181e3 100644 --- a/nshlib/nsh_parse.c +++ b/nshlib/nsh_parse.c @@ -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]) { @@ -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++) + sh_arg2[0] = '\0'; + + for (ret = 0; ret < argc; ret++) { - FAR char *p_arg = argv[ret]; - size_t len = strlen(p_arg); + strlcat(sh_arg2, argv[ret], sizeof(sh_arg2)); - /* Restore from split args to concat args. */ - - 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);