parser: Fix parsing of DTD content
Regressed in 2.11. Fixes #868.
diff --git a/parser.c b/parser.c
index 8fe0a06..474644c 100644
--- a/parser.c
+++ b/parser.c
@@ -6868,7 +6868,11 @@
xmlParseComment(ctxt);
break;
default:
- /* there is an error but it will be detected later */
+ xmlFatalErr(ctxt,
+ ctxt->inSubset == 2 ?
+ XML_ERR_EXT_SUBSET_NOT_FINISHED :
+ XML_ERR_DOCTYPE_NOT_FINISHED,
+ NULL);
SKIP(2);
break;
}
diff --git a/result/errors/759573-2.xml.ent b/result/errors/759573-2.xml.ent
index 01c8157..5f0d4a2 100644
--- a/result/errors/759573-2.xml.ent
+++ b/result/errors/759573-2.xml.ent
@@ -16,6 +16,12 @@
Entity: line 1:
<!ENTITY<?xDOCTYPEm~?>
^
+./test/errors/759573-2.xml:6: parser error : DOCTYPE improperly terminated
+%xx;
+ ^
+Entity: line 2:
+<![INCLUDE[
+^
./test/errors/759573-2.xml:6: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration
%xx;
diff --git a/result/errors/759573-2.xml.err b/result/errors/759573-2.xml.err
index 01c8157..5f0d4a2 100644
--- a/result/errors/759573-2.xml.err
+++ b/result/errors/759573-2.xml.err
@@ -16,6 +16,12 @@
Entity: line 1:
<!ENTITY<?xDOCTYPEm~?>
^
+./test/errors/759573-2.xml:6: parser error : DOCTYPE improperly terminated
+%xx;
+ ^
+Entity: line 2:
+<![INCLUDE[
+^
./test/errors/759573-2.xml:6: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration
%xx;
diff --git a/result/errors/759573-2.xml.str b/result/errors/759573-2.xml.str
index 39f77a6..6cf8179 100644
--- a/result/errors/759573-2.xml.str
+++ b/result/errors/759573-2.xml.str
@@ -16,6 +16,12 @@
Entity: line 1:
<!ENTITY<?xDOCTYPEm~?>
^
+./test/errors/759573-2.xml:6: parser error : DOCTYPE improperly terminated
+%xx;
+ ^
+Entity: line 2:
+<![INCLUDE[
+^
./test/errors/759573-2.xml:6: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration
%xx;
diff --git a/result/errors/759573.xml.ent b/result/errors/759573.xml.ent
index 74322b6..1b81106 100644
--- a/result/errors/759573.xml.ent
+++ b/result/errors/759573.xml.ent
@@ -13,6 +13,12 @@
Entity: line 1:
%<![INCLUDE[000%ஸ000%z;
^
+./test/errors/759573.xml:1: parser error : DOCTYPE improperly terminated
+T t (A)><!ENTITY % xx '%<![INCLUDE[000%ஸ000%z;'><!ENTITYz>%xx;
+ ^
+Entity: line 1:
+%<![INCLUDE[000%ஸ000%z;
+ ^
./test/errors/759573.xml:1: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration
T t (A)><!ENTITY % xx '%<![INCLUDE[000%ஸ000%z;'><!ENTITYz>%xx;
diff --git a/result/errors/759573.xml.err b/result/errors/759573.xml.err
index 74322b6..1b81106 100644
--- a/result/errors/759573.xml.err
+++ b/result/errors/759573.xml.err
@@ -13,6 +13,12 @@
Entity: line 1:
%<![INCLUDE[000%ஸ000%z;
^
+./test/errors/759573.xml:1: parser error : DOCTYPE improperly terminated
+T t (A)><!ENTITY % xx '%<![INCLUDE[000%ஸ000%z;'><!ENTITYz>%xx;
+ ^
+Entity: line 1:
+%<![INCLUDE[000%ஸ000%z;
+ ^
./test/errors/759573.xml:1: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration
T t (A)><!ENTITY % xx '%<![INCLUDE[000%ஸ000%z;'><!ENTITYz>%xx;
diff --git a/result/errors/759573.xml.str b/result/errors/759573.xml.str
index 37df762..b4962e9 100644
--- a/result/errors/759573.xml.str
+++ b/result/errors/759573.xml.str
@@ -13,6 +13,12 @@
Entity: line 1:
%<![INCLUDE[000%ஸ000%z;
^
+./test/errors/759573.xml:1: parser error : DOCTYPE improperly terminated
+T t (A)><!ENTITY % xx '%<![INCLUDE[000%ஸ000%z;'><!ENTITYz>%xx;
+ ^
+Entity: line 1:
+%<![INCLUDE[000%ஸ000%z;
+ ^
./test/errors/759573.xml:1: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration
T t (A)><!ENTITY % xx '%<![INCLUDE[000%ஸ000%z;'><!ENTITYz>%xx;
diff --git a/result/errors/issue868.xml.ent b/result/errors/issue868.xml.ent
new file mode 100644
index 0000000..5b5d580
--- /dev/null
+++ b/result/errors/issue868.xml.ent
@@ -0,0 +1,3 @@
+./test/errors/issue868.xml:3: parser error : DOCTYPE improperly terminated
+<!]>
+^
diff --git a/result/errors/issue868.xml.err b/result/errors/issue868.xml.err
new file mode 100644
index 0000000..5b5d580
--- /dev/null
+++ b/result/errors/issue868.xml.err
@@ -0,0 +1,3 @@
+./test/errors/issue868.xml:3: parser error : DOCTYPE improperly terminated
+<!]>
+^
diff --git a/result/errors/issue868.xml.str b/result/errors/issue868.xml.str
new file mode 100644
index 0000000..e886a3b
--- /dev/null
+++ b/result/errors/issue868.xml.str
@@ -0,0 +1,4 @@
+./test/errors/issue868.xml:3: parser error : DOCTYPE improperly terminated
+<!]>
+^
+./test/errors/issue868.xml : failed to parse
diff --git a/test/errors/issue868.xml b/test/errors/issue868.xml
new file mode 100644
index 0000000..e08ad3e
--- /dev/null
+++ b/test/errors/issue868.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE rss [
+<!]>
+<rss>
+<channel>
+<image/>
+<title>PP</title>
+</channel>
+</rss>