summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorNick Wellnhofer <wellnhofer@aevum.de>2022-07-28 20:58:02 +0200
committerNick Wellnhofer <wellnhofer@aevum.de>2022-07-29 01:14:00 +0200
commitb7994c3b7ab83b502f4298ab4abb10fb183f7ed4 (patch)
treeb0577a2f32b8d1cabbd41ca2ec05a96d04fb651b /tests
parent7bc8450c194b6822f984a7a8ac3dd76911a69694 (diff)
downloadlibxslt-b7994c3b7ab83b502f4298ab4abb10fb183f7ed4.tar.gz
Test recursion in EXSLT dynamic functions
This was fixed in libxml2 here: https://gitlab.gnome.org/GNOME/libxml2/-/commit/677a42645ef22b5a50741bad5facf9d8a8bc6d21 Found by OSS-Fuzz.
Diffstat (limited to 'tests')
-rw-r--r--tests/exslt/dynamic/Makefile.am10
-rw-r--r--tests/exslt/dynamic/recursion.err7
-rw-r--r--tests/exslt/dynamic/recursion.out2
-rw-r--r--tests/exslt/dynamic/recursion.xml4
-rw-r--r--tests/exslt/dynamic/recursion.xsl21
5 files changed, 42 insertions, 2 deletions
diff --git a/tests/exslt/dynamic/Makefile.am b/tests/exslt/dynamic/Makefile.am
index 84ebb5f8..0100dc9f 100644
--- a/tests/exslt/dynamic/Makefile.am
+++ b/tests/exslt/dynamic/Makefile.am
@@ -3,8 +3,14 @@
$(top_builddir)/xsltproc/xsltproc:
@(cd ../../../xsltproc ; $(MAKE) xsltproc)
-EXTRA_DIST = \
- dynmap.out dynmap.xml dynmap.xsl
+EXTRA_DIST = \
+ dynmap.out \
+ dynmap.xml \
+ dynmap.xsl \
+ recursion.err \
+ recursion.out \
+ recursion.xml \
+ recursion.xsl
CLEANFILES = .memdump
diff --git a/tests/exslt/dynamic/recursion.err b/tests/exslt/dynamic/recursion.err
new file mode 100644
index 00000000..02fdd564
--- /dev/null
+++ b/tests/exslt/dynamic/recursion.err
@@ -0,0 +1,7 @@
+XPath error : Recursion limit exceeded
+dyn:evaluate(.)
+ ^
+dyn:evaluate() : unable to evaluate expression 'dyn:evaluate(.)'
+XPath error : Recursion limit exceeded
+dyn:map(., .)
+ ^
diff --git a/tests/exslt/dynamic/recursion.out b/tests/exslt/dynamic/recursion.out
new file mode 100644
index 00000000..e829790a
--- /dev/null
+++ b/tests/exslt/dynamic/recursion.out
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<result/>
diff --git a/tests/exslt/dynamic/recursion.xml b/tests/exslt/dynamic/recursion.xml
new file mode 100644
index 00000000..5deb806b
--- /dev/null
+++ b/tests/exslt/dynamic/recursion.xml
@@ -0,0 +1,4 @@
+<doc>
+ <eval>dyn:evaluate(.)</eval>
+ <map>dyn:map(., .)</map>
+</doc>
diff --git a/tests/exslt/dynamic/recursion.xsl b/tests/exslt/dynamic/recursion.xsl
new file mode 100644
index 00000000..55bd8dc9
--- /dev/null
+++ b/tests/exslt/dynamic/recursion.xsl
@@ -0,0 +1,21 @@
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+ xmlns:dyn="http://exslt.org/dynamic"
+ exclude-result-prefixes="dyn"
+>
+
+<xsl:template match="/doc">
+ <result>
+ <xsl:apply-templates select="*"/>
+ </result>
+</xsl:template>
+
+<xsl:template match="eval">
+ <xsl:value-of select="dyn:evaluate(.)"/>
+</xsl:template>
+
+<xsl:template match="map">
+ <xsl:value-of select="dyn:map(., .)"/>
+</xsl:template>
+
+</xsl:stylesheet>
+