diff options
author | Nick Wellnhofer <wellnhofer@aevum.de> | 2023-03-15 15:04:01 +0100 |
---|---|---|
committer | Nick Wellnhofer <wellnhofer@aevum.de> | 2023-03-15 15:32:09 +0100 |
commit | a8c3824fb1df0e713ed357bb332d63b8475551cf (patch) | |
tree | d60be1171d9a9f500cf6a96ec46f868904efcb26 | |
parent | cbf9c76fa146739fc6bb1aa0f86bd2df680429fc (diff) | |
download | libxslt-a8c3824fb1df0e713ed357bb332d63b8475551cf.tar.gz |
numbers: Fix floating point overflow in xsltFormatNumberConversion
Found by OSS-Fuzz.
-rw-r--r-- | libxslt/numbers.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/libxslt/numbers.c b/libxslt/numbers.c index d344f251..c920b12a 100644 --- a/libxslt/numbers.c +++ b/libxslt/numbers.c @@ -1300,7 +1300,8 @@ OUTPUT_NUMBER: /* Next do the integer part of the number */ number = fabs(number) * (double)format_info.multiplier; scale = pow(10.0, (double)(format_info.frac_digits + format_info.frac_hash)); - number = floor((scale * number + 0.5)) / scale; + number += .5 / scale; + number -= fmod(number, 1 / scale); if ((self->grouping != NULL) && (self->grouping[0] != 0)) { int gchar; |