From: Jim Meyering Date: Wed, 15 Oct 2008 07:19:29 +0000 (+0200) Subject: expr: don't interpret argv[0] as an operand X-Git-Tag: v7.1~181 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=514b7fbc0069bbd53087561020b1562ccbcd11ee;p=thirdparty%2Fcoreutils.git expr: don't interpret argv[0] as an operand * src/expr.c (main): Given a first argument like -22 (negative, with two or more digits), expr would decrement optind to 0 and then attempt to evaluate argv[0]. --- diff --git a/src/expr.c b/src/expr.c index dc41616022..b7bec646bc 100644 --- a/src/expr.c +++ b/src/expr.c @@ -261,6 +261,7 @@ main (int argc, char **argv) { VALUE *v; int c; + int saved_optind; initialize_main (&argc, &argv); set_program_name (argv[0]); @@ -273,6 +274,7 @@ main (int argc, char **argv) /* The argument -0 should not result in an error message. */ opterr = 0; + saved_optind = 1; while ((c = getopt_long (argc, argv, "+", long_options, NULL)) != -1) { @@ -282,7 +284,7 @@ main (int argc, char **argv) */ if ('?' == c) { - --optind; + optind = saved_optind; break; } else @@ -305,6 +307,7 @@ main (int argc, char **argv) case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS); } + saved_optind = optind; } if (argc <= optind)