mirror of
https://gitlab.gnome.org/GNOME/libxml2.git
synced 2025-10-24 13:33:01 +03:00
Add xmlHaltParser() to stop the parser
The problem is doing it in a consistent and safe fashion It's more complex than just setting ctxt->instate = XML_PARSER_EOF Update the public function to reuse that new internal routine
This commit is contained in:
36
parser.c
36
parser.c
@@ -94,6 +94,8 @@ static xmlParserCtxtPtr
|
||||
xmlCreateEntityParserCtxtInternal(const xmlChar *URL, const xmlChar *ID,
|
||||
const xmlChar *base, xmlParserCtxtPtr pctx);
|
||||
|
||||
static void xmlHaltParser(xmlParserCtxtPtr ctxt);
|
||||
|
||||
/************************************************************************
|
||||
* *
|
||||
* Arbitrary limits set in the parser. See XML_PARSE_HUGE *
|
||||
@@ -12624,6 +12626,33 @@ xmlCreatePushParserCtxt(xmlSAXHandlerPtr sax, void *user_data,
|
||||
}
|
||||
#endif /* LIBXML_PUSH_ENABLED */
|
||||
|
||||
/**
|
||||
* xmlHaltParser:
|
||||
* @ctxt: an XML parser context
|
||||
*
|
||||
* Blocks further parser processing don't override error
|
||||
* for internal use
|
||||
*/
|
||||
static void
|
||||
xmlHaltParser(xmlParserCtxtPtr ctxt) {
|
||||
if (ctxt == NULL)
|
||||
return;
|
||||
ctxt->instate = XML_PARSER_EOF;
|
||||
ctxt->disableSAX = 1;
|
||||
if (ctxt->input != NULL) {
|
||||
/*
|
||||
* in case there was a specific allocation deallocate before
|
||||
* overriding base
|
||||
*/
|
||||
if (ctxt->input->free != NULL) {
|
||||
ctxt->input->free((xmlChar *) ctxt->input->base);
|
||||
ctxt->input->free = NULL;
|
||||
}
|
||||
ctxt->input->cur = BAD_CAST"";
|
||||
ctxt->input->base = ctxt->input->cur;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* xmlStopParser:
|
||||
* @ctxt: an XML parser context
|
||||
@@ -12634,13 +12663,8 @@ void
|
||||
xmlStopParser(xmlParserCtxtPtr ctxt) {
|
||||
if (ctxt == NULL)
|
||||
return;
|
||||
ctxt->instate = XML_PARSER_EOF;
|
||||
xmlHaltParser(ctxt);
|
||||
ctxt->errNo = XML_ERR_USER_STOP;
|
||||
ctxt->disableSAX = 1;
|
||||
if (ctxt->input != NULL) {
|
||||
ctxt->input->cur = BAD_CAST"";
|
||||
ctxt->input->base = ctxt->input->cur;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user