[klibc] [klibc:update-dash] expand: 'nolog' and 'debug' options cause "$-" to wreak havoc

klibc-bot for Martijn Dekker martijn at inlv.org
Thu Jan 24 19:15:50 PST 2019


Commit-ID:  a311e6839f6e8e9797d0a0bd8e1222d22e10a018
Gitweb:     http://git.kernel.org/?p=libs/klibc/klibc.git;a=commit;h=a311e6839f6e8e9797d0a0bd8e1222d22e10a018
Author:     Martijn Dekker <martijn at inlv.org>
AuthorDate: Tue, 6 Mar 2018 17:40:37 +0000
Committer:  Ben Hutchings <ben at decadent.org.uk>
CommitDate: Fri, 25 Jan 2019 02:57:21 +0000

[klibc] 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 <herbert at gondor.apana.org.au>
Signed-off-by: Ben Hutchings <ben at decadent.org.uk>

---
 usr/dash/expand.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/usr/dash/expand.c b/usr/dash/expand.c
index 153f6b7a..e86bd29d 100644
--- a/usr/dash/expand.c
+++ b/usr/dash/expand.c
@@ -927,7 +927,7 @@ numvar:
 	case '-':
 		p = makestrspace(NOPTS, expdest);
 		for (i = NOPTS - 1; i >= 0; i--) {
-			if (optlist[i]) {
+			if (optlist[i] && optletters[i]) {
 				USTPUTC(optletters[i], p);
 				len++;
 			}


More information about the klibc mailing list