This is an automated email from the ASF dual-hosted git repository. pkarashchenko pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx-apps.git
commit ad18a50282eb3cf0d391bc5a457e73e576cdae99 Author: Ville Juven <[email protected]> AuthorDate: Tue Mar 14 11:14:08 2023 +0200 nsh/nsh_parse.c: Fix variable expansion inside double quotes This also prevents expanding anything when inside single quotes, for full POSIX compliance. --- nshlib/nsh_parse.c | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/nshlib/nsh_parse.c b/nshlib/nsh_parse.c index f2cc78cd0..392d59eb3 100644 --- a/nshlib/nsh_parse.c +++ b/nshlib/nsh_parse.c @@ -1638,6 +1638,7 @@ static FAR char *nsh_argument(FAR struct nsh_vtbl_s *vtbl, FAR char *prev; bool escaped; #endif + bool squote; bool quoted; /* Find the beginning of the next token */ @@ -1694,6 +1695,7 @@ static FAR char *nsh_argument(FAR struct nsh_vtbl_s *vtbl, * make sure that we do not break up any quoted substrings. */ + squote = false; quoted = false; #ifdef CONFIG_NSH_QUOTE escaped = false; @@ -1747,6 +1749,24 @@ static FAR char *nsh_argument(FAR struct nsh_vtbl_s *vtbl, return NULL; } + /* Is it a single-quote ? No expansion allowed */ + + if (*pend == '\'') + { + /* Yes, do not allow any expansions whatsoever */ + + squote = true; + } + + /* Is it a double-quote ? Variable expansion is allowed */ + + if (*pend == '"') + { + /* Don't split env variable if inside double quotes */ + + isenvvar = NULL; + } + /* Is it a back-quote ? These are not removed here */ if (*pend != '`') @@ -1797,7 +1817,14 @@ static FAR char *nsh_argument(FAR struct nsh_vtbl_s *vtbl, /* Perform expansions as necessary for the argument */ - argument = nsh_argexpand(vtbl, pbegin, &allocation, isenvvar); + if (squote) + { + argument = pbegin; + } + else + { + argument = nsh_argexpand(vtbl, pbegin, &allocation, isenvvar); + } } /* If any memory was allocated for this argument, make sure that it is
