From: Martijn Dekker Date: Sat, 31 Mar 2018 16:15:59 +0000 (+0200) Subject: ash: 'nolog' and 'debug' options cause "$-" to wreak havoc X-Git-Tag: 1_29_0~169 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=ad4e961352f04ba88019c4c2bb36c652ce9c51fa;p=oweals%2Fbusybox.git ash: 'nolog' and 'debug' options cause "$-" to wreak havoc Upstream commit: Date: Tue Mar 6 17:40:37 2018 +0000 expand: 'nolog' and 'debug' options cause "$-" to wreak havoc Op 29-03-17 om 20:02 schreef Martijn Dekker: > Bug: if either the 'nolog' or the 'debug' option is set, trying to > expand "$-" silently aborts parsing of an entire argument. > > $ dash -o nolog -c 'set -fuC; echo "|$- are the options|"; set +o nolog; echo "|$- are the options|"' > | > |uCf are the options| > $ dash -o debug -c 'set -fuC; echo "|$- are the options|"; set +o debug; echo "|$- are the options|"' > | > |uCf are the options| This turned out to be easy to fix. The routine producing the "$-" expansion failed to skip options for which there is no option letter, but only a long-form name. In dash, 'nolog' and 'debug' are currently the only two such options. Patch below. - Martijn Signed-off-by: Herbert Xu In bbox ash, pipefail is the option which exhibited this. Signed-off-by: Martijn Dekker Signed-off-by: Denys Vlasenko --- diff --git a/shell/ash.c b/shell/ash.c index 8fb32c1ae..2ed802d2e 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -7192,7 +7192,7 @@ varvalue(char *name, int varflags, int flags, int *quotedp) case '-': expdest = makestrspace(NOPTS, expdest); for (i = NOPTS - 1; i >= 0; i--) { - if (optlist[i]) { + if (optlist[i] && optletters(i)) { USTPUTC(optletters(i), expdest); len++; }