summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Kilzer <ddkilzer@apple.com>2023-04-10 13:06:18 -0700
committerDavid Kilzer <ddkilzer@apple.com>2023-04-10 13:21:53 -0700
commitcb1b8b8516ade9add9f63fa0e39eaa3bc7034828 (patch)
tree82ba91e92d7b79cbf2fb9e9510c6b43f18c796f8
parentd7d0bc6581e332f49c9ff628f548eced03c65189 (diff)
downloadlibxml2-cb1b8b8516ade9add9f63fa0e39eaa3bc7034828.tar.gz
xmlValidatePopElement() can return invalid value (-1)
Covered by: test/VC/ElementValid5 This only affects XML Reader API with LIBXML_REGEXP_ENABLED and LIBXML_VALID_ENABLED turned on. * result/VC/ElementValid5.rdr: - Update result to add missing error message. * python/tests/reader2.py: * result/VC/ElementValid6.rdr: * result/VC/ElementValid7.rdr: * result/valid/781333.xml.err.rdr: - Update result to fix grammar issue. * valid.c: (xmlValidatePopElement): - Check return value of xmlRegExecPushString() to handle -1, and assign 'ret = 0;' to return 0 from xmlValidatePopElement(). This change affects xmlTextReaderValidatePop() from xmlreader.c. - Fix grammar of error message by changing 'child' to 'children'.
-rwxr-xr-xpython/tests/reader2.py2
-rw-r--r--result/VC/ElementValid5.rdr3
-rw-r--r--result/VC/ElementValid6.rdr2
-rw-r--r--result/VC/ElementValid7.rdr2
-rw-r--r--result/valid/781333.xml.err.rdr2
-rw-r--r--valid.c5
6 files changed, 10 insertions, 6 deletions
diff --git a/python/tests/reader2.py b/python/tests/reader2.py
index 802d848d..9d3b7065 100755
--- a/python/tests/reader2.py
+++ b/python/tests/reader2.py
@@ -41,7 +41,7 @@ value
"""{0}/781333.xml:4: element a: validity error : Element a content does not follow the DTD, expecting ( ..., got
<a/>
^
-{0}/781333.xml:5: element a: validity error : Element a content does not follow the DTD, Expecting more child
+{0}/781333.xml:5: element a: validity error : Element a content does not follow the DTD, Expecting more children
^
""".format(dir_prefix),
diff --git a/result/VC/ElementValid5.rdr b/result/VC/ElementValid5.rdr
index 899d7591..91eef9c6 100644
--- a/result/VC/ElementValid5.rdr
+++ b/result/VC/ElementValid5.rdr
@@ -4,3 +4,6 @@
./test/VC/ElementValid5:8: element doc: validity error : Element doc content does not follow the DTD, Misplaced b
^
+./test/VC/ElementValid5:8: element doc: validity error : Element doc content does not follow the DTD, Expecting more children
+
+^
diff --git a/result/VC/ElementValid6.rdr b/result/VC/ElementValid6.rdr
index aeafd6be..3b51d1a1 100644
--- a/result/VC/ElementValid6.rdr
+++ b/result/VC/ElementValid6.rdr
@@ -1,6 +1,6 @@
./test/VC/ElementValid6:7: element doc: validity error : Element doc content does not follow the DTD, expecting (a , b? , c+)?, got (a b)
<doc><a/><b>lacks c</b></doc>
^
-./test/VC/ElementValid6:8: element doc: validity error : Element doc content does not follow the DTD, Expecting more child
+./test/VC/ElementValid6:8: element doc: validity error : Element doc content does not follow the DTD, Expecting more children
^
diff --git a/result/VC/ElementValid7.rdr b/result/VC/ElementValid7.rdr
index f001fd21..ecafd1db 100644
--- a/result/VC/ElementValid7.rdr
+++ b/result/VC/ElementValid7.rdr
@@ -1,6 +1,6 @@
./test/VC/ElementValid7:7: element doc: validity error : Element doc content does not follow the DTD, expecting ((a | b)* , c+ , a , b? , c , a?), got (a b a c c a)
<doc><a/><b/><a/><c/><c/><a/></doc>
^
-./test/VC/ElementValid7:8: element doc: validity error : Element doc content does not follow the DTD, Expecting more child
+./test/VC/ElementValid7:8: element doc: validity error : Element doc content does not follow the DTD, Expecting more children
^
diff --git a/result/valid/781333.xml.err.rdr b/result/valid/781333.xml.err.rdr
index 5ff56992..dd9df08f 100644
--- a/result/valid/781333.xml.err.rdr
+++ b/result/valid/781333.xml.err.rdr
@@ -1,6 +1,6 @@
./test/valid/781333.xml:4: element a: validity error : Element a content does not follow the DTD, expecting ( ..., got
<a/>
^
-./test/valid/781333.xml:5: element a: validity error : Element a content does not follow the DTD, Expecting more child
+./test/valid/781333.xml:5: element a: validity error : Element a content does not follow the DTD, Expecting more children
^
diff --git a/valid.c b/valid.c
index 773f125e..479fa628 100644
--- a/valid.c
+++ b/valid.c
@@ -5999,11 +5999,12 @@ xmlValidatePopElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc ATTRIBUTE_UNUSED,
if (elemDecl->etype == XML_ELEMENT_TYPE_ELEMENT) {
if (state->exec != NULL) {
ret = xmlRegExecPushString(state->exec, NULL, NULL);
- if (ret == 0) {
+ if (ret <= 0) {
xmlErrValidNode(ctxt, state->node,
XML_DTD_CONTENT_MODEL,
- "Element %s content does not follow the DTD, Expecting more child\n",
+ "Element %s content does not follow the DTD, Expecting more children\n",
state->node->name, NULL,NULL);
+ ret = 0;
} else {
/*
* previous validation errors should not generate