summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/tr.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/tr.c b/src/tr.c
index 8775613fe..474da3e21 100644
--- a/src/tr.c
+++ b/src/tr.c
@@ -871,11 +871,16 @@ non_neg_strtol (s, len, val)
for (i = 0; i < len; i++)
{
- int c = s[i] - '0';
+ unsigned int c;
- if (c >= base || c < 0)
+ if (s[i] < '0')
return 1;
- if (i > 8 && sum > (LONG_MAX - c) / base)
+
+ c = s[i] - '0';
+ if (c >= base)
+ return 1;
+
+ if (sum > (LONG_MAX - c) / base)
return 1;
sum = sum * base + c;
}