diff options
author | Rich Felker <dalias@aerifal.cx> | 2014-09-16 16:08:53 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2014-09-16 16:08:53 -0400 |
commit | e2e1bb81485a37321d928a8d8b63f40b9d8fa228 (patch) | |
tree | 9b62eab14fa49e9a1f7cf9bc350a53d79eca60f0 /src/internal | |
parent | ec1aed0a144b3e00e16eeb142c9d13362d6048e7 (diff) | |
download | musl-e2e1bb81485a37321d928a8d8b63f40b9d8fa228.tar.gz musl-e2e1bb81485a37321d928a8d8b63f40b9d8fa228.tar.bz2 musl-e2e1bb81485a37321d928a8d8b63f40b9d8fa228.tar.xz musl-e2e1bb81485a37321d928a8d8b63f40b9d8fa228.zip |
fix overflow corner case in strtoul-family functions
incorrect behavior occurred only in cases where the input overflows
unsigned long long, not just the (possibly lower) range limit for the
result type. in this case, processing of the '-' sign character was
not suppressed, and the function returned a value of 1 despite setting
errno to ERANGE.
Diffstat (limited to 'src/internal')
-rw-r--r-- | src/internal/intscan.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/src/internal/intscan.c b/src/internal/intscan.c index 69350efa..65d497ec 100644 --- a/src/internal/intscan.c +++ b/src/internal/intscan.c @@ -83,6 +83,7 @@ unsigned long long __intscan(FILE *f, unsigned base, int pok, unsigned long long for (; val[c]<base; c=shgetc(f)); errno = ERANGE; y = lim; + if (lim&1) neg = 0; } done: shunget(f); |