@@ -473,13 +473,13 @@ XML_ParserCreate_MM(const XML_Char *encoding, const XML_Memory_Handling_Suite *m
473473 }
474474
475475 php_libxml_sanitize_parse_ctxt_options (parser -> parser );
476- xmlCtxtUseOptions (parser -> parser , XML_PARSE_OLDSAX );
476+ xmlCtxtUseOptions (parser -> parser , XML_PARSE_OLDSAX | XML_PARSE_NOENT );
477477
478- parser -> parser -> replaceEntities = 1 ;
479478 parser -> parser -> wellFormed = 0 ;
480479 if (sep != NULL ) {
480+ /* Note: sax2 flag will be set due to the magic number in `initialized` in php_xml_compat_handlers */
481+ ZEND_ASSERT (parser -> parser -> sax -> initialized == XML_SAX2_MAGIC );
481482 parser -> use_namespace = 1 ;
482- parser -> parser -> sax2 = 1 ;
483483 parser -> _ns_separator = xmlStrdup (sep );
484484 } else {
485485 /* Reset flag as XML_SAX2_MAGIC is needed for xmlCreatePushParserCtxt
@@ -565,10 +565,14 @@ XML_SetEndNamespaceDeclHandler(XML_Parser parser, XML_EndNamespaceDeclHandler en
565565PHP_XML_API int
566566XML_Parse (XML_Parser parser , const XML_Char * data , int data_len , int is_final )
567567{
568- int error ;
568+ int error = xmlParseChunk ( parser -> parser , ( char * ) data , data_len , is_final ) ;
569569
570- error = xmlParseChunk (parser -> parser , (char * ) data , data_len , is_final );
571- return !error && parser -> parser -> lastError .level <= XML_ERR_WARNING ;
570+ if (!error ) {
571+ const xmlError * error_data = xmlCtxtGetLastError (parser -> parser );
572+ return !error_data || error_data -> level <= XML_ERR_WARNING ;
573+ }
574+
575+ return 0 ;
572576}
573577
574578PHP_XML_API int
0 commit comments