Fixed bug 112995
authorWilliam M. Brack <wbrack@src.gnome.org>
Thu, 15 May 2003 03:53:33 +0000 (03:53 +0000)
committerWilliam M. Brack <wbrack@src.gnome.org>
Thu, 15 May 2003 03:53:33 +0000 (03:53 +0000)
ChangeLog
libxslt/xsltutils.c
tests/docs/bug-120.xml [new file with mode: 0644]
tests/general/bug-120.out [new file with mode: 0644]
tests/general/bug-120.xsl [new file with mode: 0644]

index 9ef052e..ac9b98c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Thu May 15 11:45:00 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+       * libxslt/xsltutils.c: fixing bug #112995, a problem with
+         NaN within the sort element. Also added regression test.
+
 Tue May 13 18:22:38 EDT 2003 Daniel Veillard <daniel@veillard.com>
 
        * doc/Makefile.am: fixing bug #112803 , make sure to avoid
index 5c76c13..48afe89 100644 (file)
@@ -847,7 +847,17 @@ xsltDefaultSortFunction(xsltTransformContextPtr ctxt, xmlNodePtr *sorts,
                    tst = 1;
                else {
                    if (number) {
-                       if (results[j]->floatval == results[j + incr]->floatval)
+                       /* We arbitrarily make NaN bigger than number
+                          (thinking that alpha is usually > number) */
+                       if (xmlXPathIsNaN(results[j]->floatval)) {
+                           if (xmlXPathIsNaN(results[j + incr]->floatval))
+                               tst = 0;
+                           else
+                               tst = 1;
+                       } else if (xmlXPathIsNaN(results[j + incr]->floatval))
+                           tst = -1;
+                       else if (results[j]->floatval ==
+                               results[j + incr]->floatval)
                            tst = 0;
                        else if (results[j]->floatval > 
                                results[j + incr]->floatval)
diff --git a/tests/docs/bug-120.xml b/tests/docs/bug-120.xml
new file mode 100644 (file)
index 0000000..e2c80ae
--- /dev/null
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<a>
+   <b>3</b>
+   <b/>
+   <b>1</b>
+   <b>4</b>
+   <b/>
+   <b/>
+   <b>-1</b>
+   <b>some alpha</b>
+   <b/>
+   <b>-99999999</b>
+   <b/>
+</a>
+
diff --git a/tests/general/bug-120.out b/tests/general/bug-120.out
new file mode 100644 (file)
index 0000000..3fc36a1
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<a>
+   Ascending numeric
+   <b>-99999999</b><b>-1</b><b>1</b><b>3</b><b>4</b><b/><b/><b/><b>some alpha</b><b/><b/>
+   Descending numeric
+   <b/><b/><b/><b>some alpha</b><b/><b/><b>4</b><b>3</b><b>1</b><b>-1</b><b>-99999999</b>
+   Ascending alpha
+   <b/><b/><b/><b/><b/><b>-1</b><b>-99999999</b><b>1</b><b>3</b><b>4</b><b>some alpha</b></a>
diff --git a/tests/general/bug-120.xsl b/tests/general/bug-120.xsl
new file mode 100644 (file)
index 0000000..9b456c0
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
+version="1.0">
+<xsl:output indent="yes"/>
+
+<xsl:template match="a">
+   <a>
+   Ascending numeric
+   <xsl:for-each select="b">
+     <xsl:sort select="." data-type="number"/>
+     <xsl:copy-of select="."/>
+   </xsl:for-each>
+   Descending numeric
+   <xsl:for-each select="b">
+     <xsl:sort select="." data-type="number" order="descending"/>
+     <xsl:copy-of select="."/>
+   </xsl:for-each>
+   Ascending alpha
+   <xsl:for-each select="b">
+     <xsl:sort select="." data-type="text"/>
+     <xsl:copy-of select="."/>
+   </xsl:for-each>
+   </a>
+</xsl:template>
+
+</xsl:stylesheet>
+