mirror of
https://gitlab.gnome.org/GNOME/libxml2.git
synced 2025-03-25 10:50:08 +03:00
parser: Don't overwrite EOF parser state
This commit is contained in:
parent
59fa0bb383
commit
facc2a06da
32
HTMLparser.c
32
HTMLparser.c
@ -5480,6 +5480,8 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) {
|
||||
if ((ctxt->sax) && (ctxt->sax->startDocument) &&
|
||||
(!ctxt->disableSAX))
|
||||
ctxt->sax->startDocument(ctxt->userData);
|
||||
if (ctxt->instate == XML_PARSER_EOF)
|
||||
goto done;
|
||||
|
||||
cur = in->cur[0];
|
||||
next = in->cur[1];
|
||||
@ -5496,6 +5498,8 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) {
|
||||
"HPP: Parsing internal subset\n");
|
||||
#endif
|
||||
htmlParseDocTypeDecl(ctxt);
|
||||
if (ctxt->instate == XML_PARSER_EOF)
|
||||
goto done;
|
||||
ctxt->instate = XML_PARSER_PROLOG;
|
||||
#ifdef DEBUG_PUSH
|
||||
xmlGenericError(xmlGenericErrorContext,
|
||||
@ -5538,6 +5542,8 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) {
|
||||
"HPP: Parsing Comment\n");
|
||||
#endif
|
||||
htmlParseComment(ctxt);
|
||||
if (ctxt->instate == XML_PARSER_EOF)
|
||||
goto done;
|
||||
ctxt->instate = XML_PARSER_MISC;
|
||||
} else if ((cur == '<') && (next == '?')) {
|
||||
if ((!terminate) &&
|
||||
@ -5548,6 +5554,8 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) {
|
||||
"HPP: Parsing PI\n");
|
||||
#endif
|
||||
htmlParsePI(ctxt);
|
||||
if (ctxt->instate == XML_PARSER_EOF)
|
||||
goto done;
|
||||
ctxt->instate = XML_PARSER_MISC;
|
||||
} else if ((cur == '<') && (next == '!') &&
|
||||
(UPP(2) == 'D') && (UPP(3) == 'O') &&
|
||||
@ -5562,6 +5570,8 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) {
|
||||
"HPP: Parsing internal subset\n");
|
||||
#endif
|
||||
htmlParseDocTypeDecl(ctxt);
|
||||
if (ctxt->instate == XML_PARSER_EOF)
|
||||
goto done;
|
||||
ctxt->instate = XML_PARSER_PROLOG;
|
||||
#ifdef DEBUG_PUSH
|
||||
xmlGenericError(xmlGenericErrorContext,
|
||||
@ -5594,6 +5604,8 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) {
|
||||
"HPP: Parsing Comment\n");
|
||||
#endif
|
||||
htmlParseComment(ctxt);
|
||||
if (ctxt->instate == XML_PARSER_EOF)
|
||||
goto done;
|
||||
ctxt->instate = XML_PARSER_PROLOG;
|
||||
} else if ((cur == '<') && (next == '?')) {
|
||||
if ((!terminate) &&
|
||||
@ -5604,6 +5616,8 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) {
|
||||
"HPP: Parsing PI\n");
|
||||
#endif
|
||||
htmlParsePI(ctxt);
|
||||
if (ctxt->instate == XML_PARSER_EOF)
|
||||
goto done;
|
||||
ctxt->instate = XML_PARSER_PROLOG;
|
||||
} else if ((cur == '<') && (next == '!') &&
|
||||
(avail < 4)) {
|
||||
@ -5637,6 +5651,8 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) {
|
||||
"HPP: Parsing Comment\n");
|
||||
#endif
|
||||
htmlParseComment(ctxt);
|
||||
if (ctxt->instate == XML_PARSER_EOF)
|
||||
goto done;
|
||||
ctxt->instate = XML_PARSER_EPILOG;
|
||||
} else if ((cur == '<') && (next == '?')) {
|
||||
if ((!terminate) &&
|
||||
@ -5647,6 +5663,8 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) {
|
||||
"HPP: Parsing PI\n");
|
||||
#endif
|
||||
htmlParsePI(ctxt);
|
||||
if (ctxt->instate == XML_PARSER_EOF)
|
||||
goto done;
|
||||
ctxt->instate = XML_PARSER_EPILOG;
|
||||
} else if ((cur == '<') && (next == '!') &&
|
||||
(avail < 4)) {
|
||||
@ -5741,6 +5759,8 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) {
|
||||
if ((ctxt->sax != NULL) && (ctxt->sax->endElement != NULL))
|
||||
ctxt->sax->endElement(ctxt->userData, name);
|
||||
htmlnamePop(ctxt);
|
||||
if (ctxt->instate == XML_PARSER_EOF)
|
||||
goto done;
|
||||
ctxt->instate = XML_PARSER_CONTENT;
|
||||
#ifdef DEBUG_PUSH
|
||||
xmlGenericError(xmlGenericErrorContext,
|
||||
@ -5767,6 +5787,8 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) {
|
||||
if (ctxt->record_info)
|
||||
htmlNodeInfoPush(ctxt, &node_info);
|
||||
|
||||
if (ctxt->instate == XML_PARSER_EOF)
|
||||
goto done;
|
||||
ctxt->instate = XML_PARSER_CONTENT;
|
||||
#ifdef DEBUG_PUSH
|
||||
xmlGenericError(xmlGenericErrorContext,
|
||||
@ -5787,6 +5809,8 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) {
|
||||
if (ctxt->record_info)
|
||||
htmlNodeInfoPush(ctxt, &node_info);
|
||||
|
||||
if (ctxt->instate == XML_PARSER_EOF)
|
||||
goto done;
|
||||
ctxt->instate = XML_PARSER_CONTENT;
|
||||
#ifdef DEBUG_PUSH
|
||||
xmlGenericError(xmlGenericErrorContext,
|
||||
@ -5863,6 +5887,8 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) {
|
||||
}
|
||||
}
|
||||
htmlParseScript(ctxt);
|
||||
if (ctxt->instate == XML_PARSER_EOF)
|
||||
goto done;
|
||||
if ((cur == '<') && (next == '/')) {
|
||||
ctxt->instate = XML_PARSER_END_TAG;
|
||||
ctxt->checkIndex = 0;
|
||||
@ -5898,6 +5924,8 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) {
|
||||
"HPP: Parsing Comment\n");
|
||||
#endif
|
||||
htmlParseComment(ctxt);
|
||||
if (ctxt->instate == XML_PARSER_EOF)
|
||||
goto done;
|
||||
ctxt->instate = XML_PARSER_CONTENT;
|
||||
} else {
|
||||
if ((!terminate) &&
|
||||
@ -5914,6 +5942,8 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) {
|
||||
"HPP: Parsing PI\n");
|
||||
#endif
|
||||
htmlParsePI(ctxt);
|
||||
if (ctxt->instate == XML_PARSER_EOF)
|
||||
goto done;
|
||||
ctxt->instate = XML_PARSER_CONTENT;
|
||||
} else if ((cur == '<') && (next == '/')) {
|
||||
ctxt->instate = XML_PARSER_END_TAG;
|
||||
@ -5974,6 +6004,8 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) {
|
||||
(htmlParseLookupSequence(ctxt, '>', 0, 0, 0) < 0))
|
||||
goto done;
|
||||
htmlParseEndTag(ctxt);
|
||||
if (ctxt->instate == XML_PARSER_EOF)
|
||||
goto done;
|
||||
if (ctxt->nameNr == 0) {
|
||||
ctxt->instate = XML_PARSER_EPILOG;
|
||||
} else {
|
||||
|
59
parser.c
59
parser.c
@ -11044,6 +11044,8 @@ xmlParseTryOrFinish(xmlParserCtxtPtr ctxt, int terminate) {
|
||||
goto done;
|
||||
|
||||
xmlDetectEncoding(ctxt);
|
||||
if (ctxt->instate == XML_PARSER_EOF)
|
||||
goto done;
|
||||
ctxt->instate = XML_PARSER_XML_DECL;
|
||||
break;
|
||||
|
||||
@ -11072,9 +11074,6 @@ xmlParseTryOrFinish(xmlParserCtxtPtr ctxt, int terminate) {
|
||||
if ((!terminate) &&
|
||||
(!xmlParseLookupString(ctxt, 2, "?>", 2)))
|
||||
goto done;
|
||||
if ((ctxt->sax) && (ctxt->sax->setDocumentLocator))
|
||||
ctxt->sax->setDocumentLocator(ctxt->userData,
|
||||
&xmlDefaultSAXLocator);
|
||||
if ((ctxt->input->cur[2] == 'x') &&
|
||||
(ctxt->input->cur[3] == 'm') &&
|
||||
(ctxt->input->cur[4] == 'l') &&
|
||||
@ -11093,43 +11092,29 @@ xmlParseTryOrFinish(xmlParserCtxtPtr ctxt, int terminate) {
|
||||
xmlHaltParser(ctxt);
|
||||
return(0);
|
||||
}
|
||||
if ((ctxt->sax) && (ctxt->sax->startDocument) &&
|
||||
(!ctxt->disableSAX))
|
||||
ctxt->sax->startDocument(ctxt->userData);
|
||||
ctxt->instate = XML_PARSER_MISC;
|
||||
#ifdef DEBUG_PUSH
|
||||
xmlGenericError(xmlGenericErrorContext,
|
||||
"PP: entering MISC\n");
|
||||
#endif
|
||||
} else {
|
||||
ctxt->version = xmlCharStrdup(XML_DEFAULT_VERSION);
|
||||
if ((ctxt->sax) && (ctxt->sax->startDocument) &&
|
||||
(!ctxt->disableSAX))
|
||||
ctxt->sax->startDocument(ctxt->userData);
|
||||
ctxt->instate = XML_PARSER_MISC;
|
||||
#ifdef DEBUG_PUSH
|
||||
xmlGenericError(xmlGenericErrorContext,
|
||||
"PP: entering MISC\n");
|
||||
#endif
|
||||
}
|
||||
} else {
|
||||
if ((ctxt->sax) && (ctxt->sax->setDocumentLocator))
|
||||
ctxt->sax->setDocumentLocator(ctxt->userData,
|
||||
&xmlDefaultSAXLocator);
|
||||
ctxt->version = xmlCharStrdup(XML_DEFAULT_VERSION);
|
||||
if (ctxt->version == NULL) {
|
||||
xmlErrMemory(ctxt, NULL);
|
||||
break;
|
||||
}
|
||||
if ((ctxt->sax) && (ctxt->sax->startDocument) &&
|
||||
(!ctxt->disableSAX))
|
||||
ctxt->sax->startDocument(ctxt->userData);
|
||||
ctxt->instate = XML_PARSER_MISC;
|
||||
#ifdef DEBUG_PUSH
|
||||
xmlGenericError(xmlGenericErrorContext,
|
||||
"PP: entering MISC\n");
|
||||
#endif
|
||||
}
|
||||
if ((ctxt->sax) && (ctxt->sax->setDocumentLocator))
|
||||
ctxt->sax->setDocumentLocator(ctxt->userData,
|
||||
&xmlDefaultSAXLocator);
|
||||
if ((ctxt->sax) && (ctxt->sax->startDocument) &&
|
||||
(!ctxt->disableSAX))
|
||||
ctxt->sax->startDocument(ctxt->userData);
|
||||
if (ctxt->instate == XML_PARSER_EOF)
|
||||
goto done;
|
||||
ctxt->instate = XML_PARSER_MISC;
|
||||
#ifdef DEBUG_PUSH
|
||||
xmlGenericError(xmlGenericErrorContext,
|
||||
"PP: entering MISC\n");
|
||||
#endif
|
||||
break;
|
||||
case XML_PARSER_START_TAG: {
|
||||
const xmlChar *name;
|
||||
@ -11227,6 +11212,8 @@ xmlParseTryOrFinish(xmlParserCtxtPtr ctxt, int terminate) {
|
||||
}
|
||||
nameNsPush(ctxt, name, prefix, URI, line, ctxt->nsNr - nsNr);
|
||||
|
||||
if (ctxt->instate == XML_PARSER_EOF)
|
||||
goto done;
|
||||
ctxt->instate = XML_PARSER_CONTENT;
|
||||
break;
|
||||
}
|
||||
@ -11244,6 +11231,8 @@ xmlParseTryOrFinish(xmlParserCtxtPtr ctxt, int terminate) {
|
||||
(!xmlParseLookupString(ctxt, 2, "?>", 2)))
|
||||
goto done;
|
||||
xmlParsePI(ctxt);
|
||||
if (ctxt->instate == XML_PARSER_EOF)
|
||||
goto done;
|
||||
ctxt->instate = XML_PARSER_CONTENT;
|
||||
} else if ((cur == '<') && (next != '!')) {
|
||||
ctxt->instate = XML_PARSER_START_TAG;
|
||||
@ -11255,6 +11244,8 @@ xmlParseTryOrFinish(xmlParserCtxtPtr ctxt, int terminate) {
|
||||
(!xmlParseLookupString(ctxt, 4, "-->", 3)))
|
||||
goto done;
|
||||
xmlParseComment(ctxt);
|
||||
if (ctxt->instate == XML_PARSER_EOF)
|
||||
goto done;
|
||||
ctxt->instate = XML_PARSER_CONTENT;
|
||||
} else if ((cur == '<') && (ctxt->input->cur[1] == '!') &&
|
||||
(ctxt->input->cur[2] == '[') &&
|
||||
@ -11314,9 +11305,9 @@ xmlParseTryOrFinish(xmlParserCtxtPtr ctxt, int terminate) {
|
||||
else
|
||||
xmlParseEndTag1(ctxt, 0);
|
||||
#endif /* LIBXML_SAX1_ENABLED */
|
||||
if (ctxt->instate == XML_PARSER_EOF) {
|
||||
/* Nothing */
|
||||
} else if (ctxt->nameNr == 0) {
|
||||
if (ctxt->instate == XML_PARSER_EOF)
|
||||
goto done;
|
||||
if (ctxt->nameNr == 0) {
|
||||
ctxt->instate = XML_PARSER_EPILOG;
|
||||
} else {
|
||||
ctxt->instate = XML_PARSER_CONTENT;
|
||||
@ -11483,6 +11474,8 @@ xmlParseTryOrFinish(xmlParserCtxtPtr ctxt, int terminate) {
|
||||
ctxt->extSubURI);
|
||||
ctxt->inSubset = 0;
|
||||
xmlCleanSpecialAttr(ctxt);
|
||||
if (ctxt->instate == XML_PARSER_EOF)
|
||||
goto done;
|
||||
ctxt->instate = XML_PARSER_PROLOG;
|
||||
#ifdef DEBUG_PUSH
|
||||
xmlGenericError(xmlGenericErrorContext,
|
||||
|
Loading…
x
Reference in New Issue
Block a user