1 From 69ec3da1b653024aca6515ddd4adc91919dd188e Mon Sep 17 00:00:00 2001
2 From: Nick Wellnhofer <wellnhofer@aevum.de>
3 Date: Sun, 10 Apr 2016 12:51:57 +0200
4 Subject: [PATCH] Handle negative xsl:number values
6 According to XSLT 2.0, negative values are a non-recoverable dynamic error.
7 Print an error message and treat negative values as zero.
9 Fixes an OOB array access in xsltNumberFormatAlpha.
11 libxslt/numbers.c | 17 ++++++++++++++++-
12 1 file changed, 16 insertions(+), 1 deletion(-)
14 diff --git a/libxslt/numbers.c b/libxslt/numbers.c
15 index eb087bc..a3cabcf 100644
16 --- a/libxslt/numbers.c
17 +++ b/libxslt/numbers.c
18 @@ -246,7 +246,7 @@ xsltNumberFormatAlpha(xmlBufferPtr buffer,
20 *(--pointer) = alpha_list[((int)fmod(number, alpha_size))];
22 - if (fabs(number) < 1.0)
26 xmlBufferCCat(buffer, pointer);
27 @@ -442,6 +442,21 @@ xsltNumberFormatInsertNumbers(xsltNumberDataPtr data,
28 number = numbers[(numbers_max - 1) - i];
29 /* Round to nearest like XSLT 2.0 */
30 number = floor(number + 0.5);
32 + * XSLT 1.0 isn't clear on how to handle negative numbers, but XSLT
35 + * It is a non-recoverable dynamic error if any undiscarded item
36 + * in the atomized sequence supplied as the value of the value
37 + * attribute of xsl:number cannot be converted to an integer, or
38 + * if the resulting integer is less than 0 (zero).
41 + xsltTransformError(NULL, NULL, NULL,
42 + "xsl-number : negative value\n");
43 + /* Recover by treating negative values as zero. */
46 if (i < tokens->nTokens) {
48 * The "n"th format token will be used to format the "n"th