summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog8
-rw-r--r--libxslt/xslt.c12
-rw-r--r--libxslt/xsltutils.c9
-rw-r--r--tests/reports/Makefile.am5
-rw-r--r--tests/reports/tst-2.err6
-rw-r--r--tests/reports/tst-2.out0
-rw-r--r--tests/reports/tst-2.xml1
-rw-r--r--tests/reports/tst-2.xsl10
-rw-r--r--xsltproc/xsltproc.c3
9 files changed, 50 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 522b221d..ba1ed5be 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+Tue Sep 18 11:48:20 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * libxslt/xslt.c: fixed bug #60624
+ * libxslt/xsltutils.c: improver the error context reporting
+ * tests/reports/Makefile.am tests/reports/tst-2.*: added a
+ specific regression test
+ * xsltproc/xsltproc: free the stylesheet if it contained an error.
+
Mon Sep 17 14:45:48 CEST 2001 Daniel Veillard <daniel@veillard.com>
* libxslt/variables.c: fixed a problem with global var override
diff --git a/libxslt/xslt.c b/libxslt/xslt.c
index b4ff5885..62cb1bd2 100644
--- a/libxslt/xslt.c
+++ b/libxslt/xslt.c
@@ -1693,6 +1693,16 @@ xsltParseStylesheetTop(xsltStylesheetPtr style, xmlNodePtr top) {
cur = cur->next;
continue;
}
+ if (cur->type == XML_TEXT_NODE) {
+ if (cur->content != NULL) {
+ xsltPrintErrorContext(NULL, style, cur);
+ xsltGenericError(xsltGenericErrorContext,
+ "misplaced text element: '%s'\n", cur->content);
+ }
+ style->errors++;
+ cur = cur->next;
+ continue;
+ }
if ((cur->type == XML_ELEMENT_NODE) && (cur->ns == NULL)) {
xsltGenericError(xsltGenericErrorContext,
"Found a top-level element %s with null namespace URI\n",
@@ -1701,7 +1711,7 @@ xsltParseStylesheetTop(xsltStylesheetPtr style, xmlNodePtr top) {
cur = cur->next;
continue;
}
- if (!(IS_XSLT_ELEM(cur))) {
+ if ((cur->type == XML_ELEMENT_NODE) && (!(IS_XSLT_ELEM(cur)))) {
xsltTopLevelFunction function;
function = xsltExtModuleTopLevelLookup(cur->name,
diff --git a/libxslt/xsltutils.c b/libxslt/xsltutils.c
index 5edecdaa..9b55c690 100644
--- a/libxslt/xsltutils.c
+++ b/libxslt/xsltutils.c
@@ -298,8 +298,17 @@ xsltPrintErrorContext(xsltTransformContextPtr ctxt,
file = doc->URL;
} else {
+ /*
+ * Try to find contextual informations to report
+ */
if (node->type == XML_ELEMENT_NODE) {
line = (int) node->content;
+ } else if ((node->prev != NULL) &&
+ (node->prev->type == XML_ELEMENT_NODE)) {
+ line = (int) node->prev->content;
+ } else if ((node->parent != NULL) &&
+ (node->parent->type == XML_ELEMENT_NODE)) {
+ line = (int) node->parent->content;
}
if ((node->doc != NULL) && (node->doc->URL != NULL))
file = node->doc->URL;
diff --git a/tests/reports/Makefile.am b/tests/reports/Makefile.am
index 75a4f29b..81682492 100644
--- a/tests/reports/Makefile.am
+++ b/tests/reports/Makefile.am
@@ -4,7 +4,8 @@ $(top_builddir)/xsltproc/xsltproc:
@(cd ../../xsltproc ; $(MAKE) xsltproc)
EXTRA_DIST = \
- tst-1.xml tst-1.xsl tst-1.out tst-1.err
+ tst-1.xml tst-1.xsl tst-1.out tst-1.err \
+ tst-2.xml tst-2.xsl tst-2.out tst-2.err
all: test
@@ -14,7 +15,7 @@ test tests: $(top_builddir)/xsltproc/xsltproc
@(for i in $(srcdir)/*.xml ; do \
if [ -d $$i ] ; then continue ; fi ; \
doc=`basename $$i .xml` ; \
- for j in $(srcdir)/$$doc*.xsl ; do \
+ for j in $(srcdir)/$$doc.xsl ; do \
if [ ! -f $$j ] ; then continue ; fi ; \
if [ -d $$j ] ; then continue ; fi ; \
name=`basename $$j .xsl`; \
diff --git a/tests/reports/tst-2.err b/tests/reports/tst-2.err
new file mode 100644
index 00000000..d144c491
--- /dev/null
+++ b/tests/reports/tst-2.err
@@ -0,0 +1,6 @@
+compilation error: file ./tst-2.xsl line 2 element text
+misplaced text element: '
+
+a not allowed top level element
+
+'
diff --git a/tests/reports/tst-2.out b/tests/reports/tst-2.out
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/tests/reports/tst-2.out
diff --git a/tests/reports/tst-2.xml b/tests/reports/tst-2.xml
new file mode 100644
index 00000000..69d62f2c
--- /dev/null
+++ b/tests/reports/tst-2.xml
@@ -0,0 +1 @@
+<doc/>
diff --git a/tests/reports/tst-2.xsl b/tests/reports/tst-2.xsl
new file mode 100644
index 00000000..98fa6c9f
--- /dev/null
+++ b/tests/reports/tst-2.xsl
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+a not allowed top level element
+
+<xsl:template match="/">
+
+</xsl:template>
+</xsl:stylesheet>
+
diff --git a/xsltproc/xsltproc.c b/xsltproc/xsltproc.c
index e7578350..cfe31f46 100644
--- a/xsltproc/xsltproc.c
+++ b/xsltproc/xsltproc.c
@@ -618,8 +618,9 @@ main(int argc, char **argv)
}
xsltProcess(doc, cur, argv[i]);
}
- xsltFreeStylesheet(cur);
}
+ if (cur != NULL)
+ xsltFreeStylesheet(cur);
done:
xsltCleanupGlobals();
xmlCleanupParser();