From 7b95857a7ad911e698dc18261deceffdfd7d9fdb Mon Sep 17 00:00:00 2001 From: Uwe Kleine-König Date: Tue, 28 Jan 2020 14:08:00 +0100 Subject: commands/test: Improve option parsing to handle "]" less special MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Testing for *ap[1] != ']' is bogus during option processing. Instead test if there are options left to be processed. This fixes the return value for e.g. test -z ']lala' Signed-off-by: Uwe Kleine-König Signed-off-by: Sascha Hauer --- commands/test.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'commands') diff --git a/commands/test.c b/commands/test.c index ab108fc845..9070e49074 100644 --- a/commands/test.c +++ b/commands/test.c @@ -129,8 +129,11 @@ static int do_test(int argc, char *argv[]) case OPT_ZERO: case OPT_NONZERO: adv = 2; + if (left < 2) + break; zero = 1; - if (ap[1] && *ap[1] != ']' && strlen(ap[1])) + + if (strlen(ap[1])) zero = 0; expr = (opt == OPT_ZERO) ? zero : !zero; @@ -141,7 +144,9 @@ static int do_test(int argc, char *argv[]) case OPT_EXISTS: case OPT_SYMBOLIC_LINK: adv = 2; - if (ap[1] && *ap[1] != ']' && strlen(ap[1])) { + if (left < 2) + break; + if (strlen(ap[1])) { expr = (opt == OPT_SYMBOLIC_LINK ? lstat : stat)(ap[1], &statbuf); if (expr < 0) { expr = 0; @@ -170,10 +175,8 @@ static int do_test(int argc, char *argv[]) /* three argument options */ default: adv = 3; - if (left < 3) { - expr = 1; + if (left < 3) break; - } a = simple_strtol(ap[0], NULL, 0); b = simple_strtol(ap[2], NULL, 0); -- cgit v1.2.3