From 1e3fd2677a19e82e5af556653b6ad7176ccea89e Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sat, 1 Mar 2025 10:25:29 +0100 Subject: [PATCH] parser: Fix parsing of DTD content Regressed in 2.11. Fixes #868. --- parser.c | 6 +++++- result/errors/759573-2.xml.ent | 6 ++++++ result/errors/759573-2.xml.err | 6 ++++++ result/errors/759573-2.xml.str | 6 ++++++ result/errors/759573.xml.ent | 6 ++++++ result/errors/759573.xml.err | 6 ++++++ result/errors/759573.xml.str | 6 ++++++ result/errors/issue868.xml.ent | 3 +++ result/errors/issue868.xml.err | 3 +++ result/errors/issue868.xml.str | 4 ++++ test/errors/issue868.xml | 9 +++++++++ 11 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 result/errors/issue868.xml.ent create mode 100644 result/errors/issue868.xml.err create mode 100644 result/errors/issue868.xml.str create mode 100644 test/errors/issue868.xml diff --git a/parser.c b/parser.c index 6ab4bfef..5fac0046 100644 --- a/parser.c +++ b/parser.c @@ -7040,7 +7040,11 @@ xmlParseMarkupDecl(xmlParserCtxtPtr ctxt) { 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 01c81576..5f0d4a22 100644 --- a/result/errors/759573-2.xml.ent +++ b/result/errors/759573-2.xml.ent @@ -16,6 +16,12 @@ Entity: line 1: parser error : ParsePI: PI xDOCTYPEm space expected Entity: line 1: ^ +./test/errors/759573-2.xml:6: parser error : DOCTYPE improperly terminated +%xx; + ^ +Entity: line 2: + ^ +./test/errors/759573-2.xml:6: parser error : DOCTYPE improperly terminated +%xx; + ^ +Entity: line 2: + ^ +./test/errors/759573-2.xml:6: parser error : DOCTYPE improperly terminated +%xx; + ^ +Entity: line 2: +%xx; ^ Entity: line 1: +%%xx; + ^ +Entity: line 1: %%xx; ^ Entity: line 1: +%%xx; + ^ +Entity: line 1: %%xx; ^ Entity: line 1: +%%xx; + ^ +Entity: line 1: % +^ diff --git a/result/errors/issue868.xml.err b/result/errors/issue868.xml.err new file mode 100644 index 00000000..5b5d5800 --- /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 00000000..e886a3bf --- /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 00000000..e08ad3e7 --- /dev/null +++ b/test/errors/issue868.xml @@ -0,0 +1,9 @@ + + + + + +PP + +