153aa9179Sopenharmony_ciFrom 608c65bb8ebfc12763aee1cc1f3778e17d71596e Mon Sep 17 00:00:00 2001
253aa9179Sopenharmony_ciFrom: Nick Wellnhofer <wellnhofer@aevum.de>
353aa9179Sopenharmony_ciDate: Wed, 18 Jan 2023 15:15:41 +0100
453aa9179Sopenharmony_ciSubject: [PATCH] xpath: number('-') should return NaN
553aa9179Sopenharmony_ci
653aa9179Sopenharmony_ciFixes https://gitlab.gnome.org/GNOME/libxslt/-/issues/81
753aa9179Sopenharmony_ci
853aa9179Sopenharmony_ciReference:https://github.com/GNOME/libxml2/commit/608c65bb8ebfc12763aee1cc1f3778e17d71596e
953aa9179Sopenharmony_ciConflict:NA
1053aa9179Sopenharmony_ci---
1153aa9179Sopenharmony_ci result/XPath/expr/functions | 4 ++++
1253aa9179Sopenharmony_ci test/XPath/expr/functions   | 1 +
1353aa9179Sopenharmony_ci xpath.c                     | 6 +++---
1453aa9179Sopenharmony_ci 3 files changed, 8 insertions(+), 3 deletions(-)
1553aa9179Sopenharmony_ci
1653aa9179Sopenharmony_cidiff --git a/result/XPath/expr/functions b/result/XPath/expr/functions
1753aa9179Sopenharmony_ciindex e09eb4a..4ff9c58 100644
1853aa9179Sopenharmony_ci--- a/result/XPath/expr/functions
1953aa9179Sopenharmony_ci+++ b/result/XPath/expr/functions
2053aa9179Sopenharmony_ci@@ -19,6 +19,10 @@ Object is a number : NaN
2153aa9179Sopenharmony_ci Expression: -number('abc')
2253aa9179Sopenharmony_ci Object is a number : NaN
2353aa9179Sopenharmony_ci 
2453aa9179Sopenharmony_ci+========================
2553aa9179Sopenharmony_ci+Expression: number('-')
2653aa9179Sopenharmony_ci+Object is a number : NaN
2753aa9179Sopenharmony_ci+
2853aa9179Sopenharmony_ci ========================
2953aa9179Sopenharmony_ci Expression: floor(0.1)
3053aa9179Sopenharmony_ci Object is a number : 0
3153aa9179Sopenharmony_cidiff --git a/test/XPath/expr/functions b/test/XPath/expr/functions
3253aa9179Sopenharmony_ciindex 00b9461..6008a07 100644
3353aa9179Sopenharmony_ci--- a/test/XPath/expr/functions
3453aa9179Sopenharmony_ci+++ b/test/XPath/expr/functions
3553aa9179Sopenharmony_ci@@ -3,6 +3,7 @@ false()
3653aa9179Sopenharmony_ci number("1.5")
3753aa9179Sopenharmony_ci number('abc')
3853aa9179Sopenharmony_ci -number('abc')
3953aa9179Sopenharmony_ci+number('-')
4053aa9179Sopenharmony_ci floor(0.1)
4153aa9179Sopenharmony_ci floor(-0.1)
4253aa9179Sopenharmony_ci floor(-0)
4353aa9179Sopenharmony_cidiff --git a/xpath.c b/xpath.c
4453aa9179Sopenharmony_ciindex 85d7919..fbec21b 100644
4553aa9179Sopenharmony_ci--- a/xpath.c
4653aa9179Sopenharmony_ci+++ b/xpath.c
4753aa9179Sopenharmony_ci@@ -9987,13 +9987,13 @@ xmlXPathStringEvalNumber(const xmlChar *str) {
4853aa9179Sopenharmony_ci #endif
4953aa9179Sopenharmony_ci     if (cur == NULL) return(0);
5053aa9179Sopenharmony_ci     while (IS_BLANK_CH(*cur)) cur++;
5153aa9179Sopenharmony_ci-    if ((*cur != '.') && ((*cur < '0') || (*cur > '9')) && (*cur != '-')) {
5253aa9179Sopenharmony_ci-        return(xmlXPathNAN);
5353aa9179Sopenharmony_ci-    }
5453aa9179Sopenharmony_ci     if (*cur == '-') {
5553aa9179Sopenharmony_ci 	isneg = 1;
5653aa9179Sopenharmony_ci 	cur++;
5753aa9179Sopenharmony_ci     }
5853aa9179Sopenharmony_ci+    if ((*cur != '.') && ((*cur < '0') || (*cur > '9'))) {
5953aa9179Sopenharmony_ci+        return(xmlXPathNAN);
6053aa9179Sopenharmony_ci+    }
6153aa9179Sopenharmony_ci 
6253aa9179Sopenharmony_ci #ifdef __GNUC__
6353aa9179Sopenharmony_ci     /*
6453aa9179Sopenharmony_ci-- 
6553aa9179Sopenharmony_ci2.27.0
6653aa9179Sopenharmony_ci
67