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 <u.kleine-koenig@xxxxxxxxxxxxxx> --- commands/test.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/commands/test.c b/commands/test.c index ab108fc845d5..9070e4907496 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); -- 2.24.0 _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox