[libxml2] 629325 XPath rounding errors first cleanup



commit ee32ad3c0f6dfbb1b0e57db63d16f6455d6416df
Author: Phil Shafer <phil juniper net>
Date:   Wed Nov 3 20:53:55 2010 +0100

    629325 XPath rounding errors first cleanup
    
    https://bugzilla.gnome.org/show_bug.cgi?id=629325
    not a full solution as Vincent Lefevre pointed out but
    an incremental improvement over the status-quo

 xpath.c |   14 +++++++++++---
 1 files changed, 11 insertions(+), 3 deletions(-)
---
diff --git a/xpath.c b/xpath.c
index 3352a5e..4d6826d 100644
--- a/xpath.c
+++ b/xpath.c
@@ -10080,15 +10080,23 @@ xmlXPathCompNumber(xmlXPathParserContextPtr ctxt)
     }
 #endif
     if (CUR == '.') {
+	int v, frac = 0;
+	double fraction = 0;
+
         NEXT;
         if (((CUR < '0') || (CUR > '9')) && (!ok)) {
             XP_ERROR(XPATH_NUMBER_ERROR);
         }
-        while ((CUR >= '0') && (CUR <= '9')) {
-            mult /= 10;
-            ret = ret + (CUR - '0') * mult;
+        while ((CUR >= '0') && (CUR <= '9') && (frac < MAX_FRAC)) {
+	    v = (CUR - '0');
+	    fraction = fraction * 10 + v;
+	    frac = frac + 1;
             NEXT;
         }
+        fraction /= my_pow10[frac];
+        ret = ret + fraction;
+        while ((CUR >= '0') && (CUR <= '9'))
+            NEXT;
     }
     if ((CUR == 'e') || (CUR == 'E')) {
         NEXT;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]