summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Wellnhofer <wellnhofer@aevum.de>2017-07-30 18:33:27 +0200
committerNick Wellnhofer <wellnhofer@aevum.de>2017-07-31 15:00:53 +0200
commit6b067190fe4f0a9031cc39b6e52cfc19c416aac0 (patch)
tree500a5f11a5f117c33523d640bd808b05e91ac2bc
parent3892a890d9095b755453f0dc3d90a167df603cba (diff)
downloadlibxslt-1.1.30-rc1.tar.gz
Fix NULL deref in xsltDefaultSortFunctionv1.1.30-rc1
An evaluation error in a secondary sort key could lead to a NULL pointer dereference. Thanks to Nicolas Gregoire for the report. Fixes bug 785588.
-rw-r--r--libxslt/xsltutils.c2
-rw-r--r--tests/docs/bug-208.xml8
-rw-r--r--tests/general/bug-208.err6
-rw-r--r--tests/general/bug-208.out0
-rw-r--r--tests/general/bug-208.xsl8
5 files changed, 24 insertions, 0 deletions
diff --git a/libxslt/xsltutils.c b/libxslt/xsltutils.c
index c250ccfa..6bd8ed06 100644
--- a/libxslt/xsltutils.c
+++ b/libxslt/xsltutils.c
@@ -1249,6 +1249,8 @@ xsltDefaultSortFunction(xsltTransformContextPtr ctxt, xmlNodePtr *sorts,
if (res[j] == NULL) {
if (res[j+incr] != NULL)
tst = 1;
+ } else if (res[j+incr] == NULL) {
+ tst = -1;
} else {
if (numb) {
/* We make NaN smaller than number in
diff --git a/tests/docs/bug-208.xml b/tests/docs/bug-208.xml
new file mode 100644
index 00000000..5d3529ae
--- /dev/null
+++ b/tests/docs/bug-208.xml
@@ -0,0 +1,8 @@
+<a>
+ <b>
+ <c>
+ <d1><d2/></d1>
+ <e/>
+ </c>
+ </b>
+</a>
diff --git a/tests/general/bug-208.err b/tests/general/bug-208.err
new file mode 100644
index 00000000..02c97121
--- /dev/null
+++ b/tests/general/bug-208.err
@@ -0,0 +1,6 @@
+XPath error : Undefined namespace prefix
+XPath error : Undefined namespace prefix
+XPath error : Undefined namespace prefix
+XPath error : Undefined namespace prefix
+XPath error : Undefined namespace prefix
+no result for ./../docs/bug-208.xml
diff --git a/tests/general/bug-208.out b/tests/general/bug-208.out
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/tests/general/bug-208.out
diff --git a/tests/general/bug-208.xsl b/tests/general/bug-208.xsl
new file mode 100644
index 00000000..322b58dc
--- /dev/null
+++ b/tests/general/bug-208.xsl
@@ -0,0 +1,8 @@
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+ <xsl:template match="/">
+ <xsl:for-each select="//.">
+ <xsl:sort/>
+ <xsl:sort select="*[a:b]"/>;
+ </xsl:for-each>
+ </xsl:template>
+</xsl:stylesheet>