fixed a problem in Relax-NG validation #159968 added the test to the
* relaxng.c: fixed a problem in Relax-NG validation #159968
* test/relaxng/list.* result/relaxng/list_*: added the test
to the regression suite
Daniel
diff --git a/ChangeLog b/ChangeLog
index 6d8fe42..d8aa20f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Thu Mar 31 15:36:52 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: fixed a problem in Relax-NG validation #159968
+ * test/relaxng/list.* result/relaxng/list_*: added the test
+ to the regression suite
+
Thu Mar 31 13:06:02 CEST 2005 Daniel Veillard <daniel@veillard.com>
* python/libxml.c: fixed bug #168504
diff --git a/relaxng.c b/relaxng.c
index 16174e0..143d704 100644
--- a/relaxng.c
+++ b/relaxng.c
@@ -6129,11 +6129,18 @@
ret = XML_RELAXNG_CONTENT_EMPTY;
if ((cur->type == XML_RELAXNG_REF) ||
(cur->type == XML_RELAXNG_PARENTREF)) {
+ /*
+ * This should actually be caught by list//element(ref) at the
+ * element boundaries, c.f. Bug #159968 local refs are dropped
+ * in step 4.19.
+ */
+#if 0
if (flags & XML_RELAXNG_IN_LIST) {
xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_LIST_REF,
"Found forbidden pattern list//ref\n", NULL,
NULL);
}
+#endif
if (flags & XML_RELAXNG_IN_DATAEXCEPT) {
xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_DATA_EXCEPT_REF,
"Found forbidden pattern data/except//ref\n",
diff --git a/result/relaxng/list_0 b/result/relaxng/list_0
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/list_0
diff --git a/result/relaxng/list_0.err b/result/relaxng/list_0.err
new file mode 100644
index 0000000..5c8ca7c
--- /dev/null
+++ b/result/relaxng/list_0.err
@@ -0,0 +1 @@
+./test/relaxng/list_0.xml validates
diff --git a/result/relaxng/list_1 b/result/relaxng/list_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/list_1
diff --git a/result/relaxng/list_1.err b/result/relaxng/list_1.err
new file mode 100644
index 0000000..3ae35ae
--- /dev/null
+++ b/result/relaxng/list_1.err
@@ -0,0 +1,2 @@
+./test/relaxng/list_1.xml:1: element elem1: Relax-NG validity error : Element elem1 failed to validate attributes
+./test/relaxng/list_1.xml fails to validate
diff --git a/result/relaxng/list_err b/result/relaxng/list_err
new file mode 100644
index 0000000..748e21b
--- /dev/null
+++ b/result/relaxng/list_err
@@ -0,0 +1 @@
+./test/relaxng/list.rng validates
diff --git a/result/relaxng/list_valid b/result/relaxng/list_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/list_valid
diff --git a/test/relaxng/list.rng b/test/relaxng/list.rng
new file mode 100644
index 0000000..57de17c
--- /dev/null
+++ b/test/relaxng/list.rng
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar
+ xmlns="http://relaxng.org/ns/structure/1.0"
+ xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+ datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+<define name="pattern1">
+ <data type="string">
+ <param name="pattern">-?([0-9]+(\.[0-9]*)?|\.[0-9]+)</param>
+ </data>
+</define>
+
+<start>
+ <element name="elem1">
+ <attribute name="attr1">
+ <list>
+ <ref name="pattern1"/>
+ </list>
+ </attribute>
+ </element>
+</start>
+
+</grammar>
diff --git a/test/relaxng/list_0.xml b/test/relaxng/list_0.xml
new file mode 100644
index 0000000..a6b4d60
--- /dev/null
+++ b/test/relaxng/list_0.xml
@@ -0,0 +1 @@
+<elem1 attr1="0"/>
diff --git a/test/relaxng/list_1.xml b/test/relaxng/list_1.xml
new file mode 100644
index 0000000..a8907cc
--- /dev/null
+++ b/test/relaxng/list_1.xml
@@ -0,0 +1 @@
+<elem1 attr1="a"/>