mirror of
				https://gitlab.gnome.org/GNOME/libxml2.git
				synced 2025-10-24 13:33:01 +03:00 
			
		
		
		
	parser: Don't overwrite EOF parser state
This commit is contained in:
		
							
								
								
									
										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, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user