Skip to content

Commit b717abd

Browse files
committed
parser: Consolidate error handling for undeclared entities
Always use XML_WAR_UNDECLARED_ENTITY with warning error level in documents with external subset or parameter entities. Use XML_ERR_UNDECLARED_ENTITY otherwise.
1 parent 00336f0 commit b717abd

File tree

12 files changed

+16
-20
lines changed

12 files changed

+16
-20
lines changed

parser.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7600,8 +7600,8 @@ xmlLookupGeneralEntity(xmlParserCtxtPtr ctxt, const xmlChar *name, int inAttr) {
76007600
xmlFatalErrMsgStr(ctxt, XML_ERR_UNDECLARED_ENTITY,
76017601
"Entity '%s' not defined\n", name);
76027602
} else {
7603-
xmlErrMsgStr(ctxt, XML_WAR_UNDECLARED_ENTITY,
7604-
"Entity '%s' not defined\n", name);
7603+
xmlWarningMsg(ctxt, XML_WAR_UNDECLARED_ENTITY,
7604+
"Entity '%s' not defined\n", name, NULL);
76057605
if ((ctxt->inSubset == 0) &&
76067606
(ctxt->sax != NULL) &&
76077607
(ctxt->disableSAX == 0) &&
@@ -7844,7 +7844,7 @@ xmlParsePEReference(xmlParserCtxtPtr ctxt)
78447844
* precede any reference to it...
78457845
*/
78467846
if ((ctxt->validate) && (ctxt->vctxt.error != NULL)) {
7847-
xmlValidityError(ctxt, XML_WAR_UNDECLARED_ENTITY,
7847+
xmlValidityError(ctxt, XML_ERR_UNDECLARED_ENTITY,
78487848
"PEReference: %%%s; not found\n",
78497849
name, NULL);
78507850
} else

python/tests/input_callback.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ def my_ctx_error_cb(arg, msg, severity, reserved):
101101
exp_status="loaded", exp_err=[
102102
( 3, 'failed to load "http://example.com/dtds/sample.dtd": Attempt to load network entity\n'),
103103
( -1, "Attempt to load network entity: http://example.com/dtds/sample.dtd"),
104-
( 4, "Entity 'sample.entity' not defined\n")
104+
( 3, "Entity 'sample.entity' not defined\n")
105105
])
106106

107107
# Register a catalog (also accessible via pystr://) and retry
@@ -114,7 +114,7 @@ def my_ctx_error_cb(arg, msg, severity, reserved):
114114
test_callback=lambda: libxml2.popInputCallbacks(),
115115
exp_status="loaded", exp_err=[
116116
( 3, "failed to load \"py://strings/dtds/sample.dtd\": No such file or directory\n"),
117-
( 4, "Entity 'sample.entity' not defined\n")
117+
( 3, "Entity 'sample.entity' not defined\n")
118118
])
119119

120120
# Try to load the document again

result/ent7.sax

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
xmlSAXUserParseFile returned error 27
1+
xmlParseDocument returned error 26
22
SAX.setDocumentLocator()
33
SAX.startDocument()
44
SAX.internalSubset(item, , )

result/ent7.sax2

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
xmlSAXUserParseFile returned error 27
1+
xmlParseDocument returned error 26
22
SAX.setDocumentLocator()
33
SAX.startDocument()
44
SAX.internalSubset(item, , )

result/errors/rec_att_default.xml.ent

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
./test/errors/rec_att_default.xml:3: parser error : Entity 'b' not defined
1+
./test/errors/rec_att_default.xml:3: parser warning : Entity 'b' not defined
22
<!ATTLIST x y CDATA "&a;">
33
^
44
./test/errors/rec_att_default.xml:6: parser error : Detected an entity reference loop

result/errors/rec_att_default.xml.err

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
./test/errors/rec_att_default.xml:3: parser error : Entity 'b' not defined
1+
./test/errors/rec_att_default.xml:3: parser warning : Entity 'b' not defined
22
<!ATTLIST x y CDATA "&a;">
33
^
44
./test/errors/rec_att_default.xml:6: parser error : Detected an entity reference loop

result/errors/rec_att_default.xml.str

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
./test/errors/rec_att_default.xml:3: parser error : Entity 'b' not defined
1+
./test/errors/rec_att_default.xml:3: parser warning : Entity 'b' not defined
22
<!ATTLIST x y CDATA "&a;">
33
^
44
./test/errors/rec_att_default.xml:6: parser error : Detected an entity reference loop

result/noent/ent7.sax2

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
xmlSAXUserParseFile returned error 27
1+
xmlParseDocument returned error 26
22
SAX.setDocumentLocator()
33
SAX.startDocument()
44
SAX.internalSubset(item, , )

result/noent/xml2.sax2

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
xmlSAXUserParseFile returned error 27
1+
xmlParseDocument returned error 26
22
SAX.setDocumentLocator()
33
SAX.startDocument()
44
SAX.internalSubset(test, , )

result/xml2.sax

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
xmlSAXUserParseFile returned error 27
1+
xmlParseDocument returned error 26
22
SAX.setDocumentLocator()
33
SAX.startDocument()
44
SAX.internalSubset(test, , )

result/xml2.sax2

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
xmlSAXUserParseFile returned error 27
1+
xmlParseDocument returned error 26
22
SAX.setDocumentLocator()
33
SAX.startDocument()
44
SAX.internalSubset(test, , )

runtest.c

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1515,8 +1515,8 @@ saxParseTest(const char *filename, const char *result,
15151515
xmlFreeDoc(ctxt->myDoc);
15161516
xmlFreeParserCtxt(ctxt);
15171517
}
1518-
if (ret == XML_WAR_UNDECLARED_ENTITY) {
1519-
fprintf(SAXdebug, "xmlSAXUserParseFile returned error %d\n", ret);
1518+
if (ret == XML_ERR_UNDECLARED_ENTITY) {
1519+
fprintf(SAXdebug, "xmlParseDocument returned error %d\n", ret);
15201520
ret = 0;
15211521
}
15221522
if (ret != 0) {
@@ -1556,10 +1556,6 @@ saxParseTest(const char *filename, const char *result,
15561556
xmlFreeDoc(ctxt->myDoc);
15571557
xmlFreeParserCtxt(ctxt);
15581558
}
1559-
if (ret == XML_WAR_UNDECLARED_ENTITY) {
1560-
fprintf(SAXdebug, "xmlSAXUserParseFile returned error %d\n", ret);
1561-
ret = 0;
1562-
}
15631559
fclose(SAXdebug);
15641560
if (compareFiles(temp, result)) {
15651561
fprintf(stderr, "Got a difference for %s\n", filename);

0 commit comments

Comments
 (0)