diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2012-03-08 06:50:01 +0400 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2012-03-08 06:50:01 +0400 |
commit | 07fcaab595e9029ebe37f5240a10038c493af545 (patch) | |
tree | 20e175ae2f5bd3534104e09f090524881799f95b | |
parent | d98dc92d6a8bcc68287310c3e33a77efb9fcbe3b (diff) |
test: "test !" was accessing argv past NULL - fix it. Closes 4832
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | coreutils/test.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/coreutils/test.c b/coreutils/test.c index 1f5398ad8..0bc008e7c 100644 --- a/coreutils/test.c +++ b/coreutils/test.c @@ -710,7 +710,8 @@ static number_t nexpr(enum token n) if (n == EOI) { /* special case: [ ! ], [ a -a ! ] are valid */ /* IOW, "! ARG" may miss ARG */ - unnest_msg("<nexpr:1 (!EOI)\n"); + args--; + unnest_msg("<nexpr:1 (!EOI), args:%s(%p)\n", args[0], &args[0]); return 1; } res = !nexpr(n); @@ -729,15 +730,15 @@ static number_t aexpr(enum token n) nest_msg(">aexpr(%s)\n", TOKSTR[n]); res = nexpr(n); - dbg_msg("aexpr: nexpr:%lld, next args:%s\n", res, args[1]); + dbg_msg("aexpr: nexpr:%lld, next args:%s(%p)\n", res, args[1], &args[1]); if (check_operator(*++args) == BAND) { - dbg_msg("aexpr: arg is AND, next args:%s\n", args[1]); + dbg_msg("aexpr: arg is AND, next args:%s(%p)\n", args[1], &args[1]); res = aexpr(check_operator(*++args)) && res; unnest_msg("<aexpr:%lld\n", res); return res; } args--; - unnest_msg("<aexpr:%lld, args:%s\n", res, args[0]); + unnest_msg("<aexpr:%lld, args:%s(%p)\n", res, args[0], &args[0]); return res; } @@ -748,15 +749,15 @@ static number_t oexpr(enum token n) nest_msg(">oexpr(%s)\n", TOKSTR[n]); res = aexpr(n); - dbg_msg("oexpr: aexpr:%lld, next args:%s\n", res, args[1]); + dbg_msg("oexpr: aexpr:%lld, next args:%s(%p)\n", res, args[1], &args[1]); if (check_operator(*++args) == BOR) { - dbg_msg("oexpr: next arg is OR, next args:%s\n", args[1]); + dbg_msg("oexpr: next arg is OR, next args:%s(%p)\n", args[1], &args[1]); res = oexpr(check_operator(*++args)) || res; unnest_msg("<oexpr:%lld\n", res); return res; } args--; - unnest_msg("<oexpr:%lld, args:%s\n", res, args[0]); + unnest_msg("<oexpr:%lld, args:%s(%p)\n", res, args[0], &args[0]); return res; } |