mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-28 06:13:31 +01:00
Have tor_parse_*long functions check for negative bases
One of our unit tests checks that they behave correctly (giving an error) when the base is negative. But there isn't a guarantee that strtol and friends actually handle negative bases correctly. Found by Coverity Scan; fix for CID 504.
This commit is contained in:
parent
88caa552cc
commit
56e0959d2a
@ -906,6 +906,11 @@ tor_parse_long(const char *s, int base, long min, long max,
|
|||||||
char *endptr;
|
char *endptr;
|
||||||
long r;
|
long r;
|
||||||
|
|
||||||
|
if (base < 0) {
|
||||||
|
if (ok)
|
||||||
|
*ok = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
r = strtol(s, &endptr, base);
|
r = strtol(s, &endptr, base);
|
||||||
CHECK_STRTOX_RESULT();
|
CHECK_STRTOX_RESULT();
|
||||||
}
|
}
|
||||||
@ -918,6 +923,11 @@ tor_parse_ulong(const char *s, int base, unsigned long min,
|
|||||||
char *endptr;
|
char *endptr;
|
||||||
unsigned long r;
|
unsigned long r;
|
||||||
|
|
||||||
|
if (base < 0) {
|
||||||
|
if (ok)
|
||||||
|
*ok = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
r = strtoul(s, &endptr, base);
|
r = strtoul(s, &endptr, base);
|
||||||
CHECK_STRTOX_RESULT();
|
CHECK_STRTOX_RESULT();
|
||||||
}
|
}
|
||||||
@ -942,6 +952,12 @@ tor_parse_uint64(const char *s, int base, uint64_t min,
|
|||||||
char *endptr;
|
char *endptr;
|
||||||
uint64_t r;
|
uint64_t r;
|
||||||
|
|
||||||
|
if (base < 0) {
|
||||||
|
if (ok)
|
||||||
|
*ok = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef HAVE_STRTOULL
|
#ifdef HAVE_STRTOULL
|
||||||
r = (uint64_t)strtoull(s, &endptr, base);
|
r = (uint64_t)strtoull(s, &endptr, base);
|
||||||
#elif defined(_WIN32)
|
#elif defined(_WIN32)
|
||||||
|
Loading…
Reference in New Issue
Block a user