test: "test !" was accessing argv past NULL - fix it. Closes 4832
authorDenys Vlasenko <vda.linux@googlemail.com>
Thu, 8 Mar 2012 02:50:01 +0000 (03:50 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Thu, 8 Mar 2012 02:50:01 +0000 (03:50 +0100)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
coreutils/test.c

index 1f5398ad8fc3e2243263321b625e3cf7510f8e64..0bc008e7c8d5c963b3d50db6b89957b52d3a6ccb 100644 (file)
@@ -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;
 }