From 7018385fe71329af2f685b7859fbf8f6cedc8325 Mon Sep 17 00:00:00 2001 From: Manuel Novoa III Date: Sun, 25 Jan 2004 19:47:10 +0000 Subject: Be stricter when converting strings to integers. Should fix the problem reported by Rob. --- coreutils/expr.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'coreutils/expr.c') diff --git a/coreutils/expr.c b/coreutils/expr.c index c2f5d4f3e..fdb4e3997 100644 --- a/coreutils/expr.c +++ b/coreutils/expr.c @@ -157,15 +157,17 @@ static void tostring (VALUE *v) static int toarith (VALUE *v) { if(v->type == string) { - int i; - - /* Don't interpret the empty string as an integer. */ - if (v->u.s == 0) - return 0; - i = atoi(v->u.s); - free (v->u.s); - v->u.i = i; - v->type = integer; + int i; + char *e; + + /* Don't interpret the empty string as an integer. */ + /* Currently does not worry about overflow or int/long differences. */ + i = (int) strtol(v->u.s, &e, 10); + if ((v->u.s == e) || *e) + return 0; + free (v->u.s); + v->u.i = i; + v->type = integer; } return 1; } -- cgit v1.2.3