summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Wellnhofer <wellnhofer@aevum.de>2023-03-15 15:04:01 +0100
committerNick Wellnhofer <wellnhofer@aevum.de>2023-03-15 15:32:09 +0100
commita8c3824fb1df0e713ed357bb332d63b8475551cf (patch)
treed60be1171d9a9f500cf6a96ec46f868904efcb26
parentcbf9c76fa146739fc6bb1aa0f86bd2df680429fc (diff)
downloadlibxslt-a8c3824fb1df0e713ed357bb332d63b8475551cf.tar.gz
numbers: Fix floating point overflow in xsltFormatNumberConversion
Found by OSS-Fuzz.
-rw-r--r--libxslt/numbers.c3
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;