From 4d8873f997053aa08c5932594b4078846115b861 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Sun, 4 Oct 2009 03:14:41 +0200 Subject: [PATCH] ash: document where we accept invalid syntax. no code changes Signed-off-by: Denys Vlasenko --- shell/ash.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/shell/ash.c b/shell/ash.c index 444a6961b..9f1f8a4de 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -6371,6 +6371,16 @@ subevalvar(char *p, char *str, int strloc, int subtype, /* * Add the value of a specialized variable to the stack string. + * name parameter (examples): + * ash -c 'echo $1' name:'1=' + * ash -c 'echo $qwe' name:'qwe=' + * ash -c 'echo $$' name:'$=' + * ash -c 'echo ${$}' name:'$=' + * ash -c 'echo ${$##q}' name:'$=q' + * ash -c 'echo ${#$}' name:'$=' + * note: examples with bad shell syntax: + * ash -c 'echo ${#$1}' name:'$=1' + * ash -c 'echo ${#1#}' name:'1=#' */ static ssize_t varvalue(char *name, int varflags, int flags, struct strlist *var_str_list) @@ -6407,7 +6417,7 @@ varvalue(char *name, int varflags, int flags, struct strlist *var_str_list) return -1; numvar: len = cvtnum(num); - break; + goto check_1char_name; case '-': expdest = makestrspace(NOPTS, expdest); for (i = NOPTS - 1; i >= 0; i--) { @@ -6416,6 +6426,12 @@ varvalue(char *name, int varflags, int flags, struct strlist *var_str_list) len++; } } + check_1char_name: +#if 0 + /* handles cases similar to ${#$1} */ + if (name[2] != '\0') + raise_error_syntax("bad substitution"); +#endif break; case '@': if (sep) -- 2.25.1