diff --git a/HTMLparser.c b/HTMLparser.c index e4481281..4b9b4e4f 100644 --- a/HTMLparser.c +++ b/HTMLparser.c @@ -3484,10 +3484,20 @@ htmlParseComment(htmlParserCtxtPtr ctxt) { q = CUR_CHAR(ql); if (q == 0) goto unfinished; + if (q == '>') { + htmlParseErr(ctxt, XML_ERR_COMMENT_ABRUPTLY_ENDED, "Comment abruptly ended", NULL, NULL); + cur = '>'; + goto finished; + } NEXTL(ql); r = CUR_CHAR(rl); if (r == 0) goto unfinished; + if (q == '-' && r == '>') { + htmlParseErr(ctxt, XML_ERR_COMMENT_ABRUPTLY_ENDED, "Comment abruptly ended", NULL, NULL); + cur = '>'; + goto finished; + } NEXTL(rl); cur = CUR_CHAR(l); while ((cur != 0) && @@ -3535,6 +3545,7 @@ htmlParseComment(htmlParserCtxtPtr ctxt) { cur = next; l = nl; } +finished: buf[len] = 0; if (cur == '>') { NEXT; diff --git a/include/libxml/xmlerror.h b/include/libxml/xmlerror.h index c1019971..7b68e401 100644 --- a/include/libxml/xmlerror.h +++ b/include/libxml/xmlerror.h @@ -209,6 +209,7 @@ typedef enum { XML_ERR_VERSION_MISMATCH, /* 109 */ XML_ERR_NAME_TOO_LONG, /* 110 */ XML_ERR_USER_STOP, /* 111 */ + XML_ERR_COMMENT_ABRUPTLY_ENDED, /* 112 */ XML_NS_ERR_XML_NAMESPACE = 200, XML_NS_ERR_UNDEFINED_NAMESPACE, /* 201 */ XML_NS_ERR_QNAME, /* 202 */ diff --git a/result/HTML/comments3.html b/result/HTML/comments3.html index 537d3105..da965ceb 100644 --- a/result/HTML/comments3.html +++ b/result/HTML/comments3.html @@ -8,10 +8,10 @@