fix integer overflow in subnormal_power10 (#355)
detected by oss-fuzz https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=18714
This commit is contained in:
parent
c97eb41dc6
commit
cf493254b7
|
@ -185,7 +185,13 @@ static inline uint32_t parse_eight_digits_unrolled(const char *chars) {
|
||||||
//
|
//
|
||||||
// This function computes base * 10 ^ (- negative_exponent ).
|
// This function computes base * 10 ^ (- negative_exponent ).
|
||||||
// It is only even going to be used when negative_exponent is tiny.
|
// It is only even going to be used when negative_exponent is tiny.
|
||||||
static double subnormal_power10(double base, int negative_exponent) {
|
static double subnormal_power10(double base, int64_t negative_exponent) {
|
||||||
|
// avoid integer overflows in the pow expression, those values would
|
||||||
|
// become zero anyway.
|
||||||
|
if(negative_exponent < -1000) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
// this is probably not going to be fast
|
// this is probably not going to be fast
|
||||||
return base * 1e-308 * pow(10, negative_exponent + 308);
|
return base * 1e-308 * pow(10, negative_exponent + 308);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue