diff options
author | Nick Wellnhofer <wellnhofer@aevum.de> | 2023-05-08 17:58:02 +0200 |
---|---|---|
committer | Nick Wellnhofer <wellnhofer@aevum.de> | 2023-05-08 19:15:44 +0200 |
commit | 235b15a590eecf97b09e87bdb7e4f8333e9de129 (patch) | |
tree | 253e15af0e8f132962e155802687ac41cdc6fe90 | |
parent | 3463063001f36c16e5f6ce9ad33cd12a376fc874 (diff) | |
download | libxml2-235b15a590eecf97b09e87bdb7e4f8333e9de129.tar.gz |
SAX: Always initialize SAX1 element handlers
Follow-up to commit d0c3f01e. A parser context will be initialized to
SAX version 2, but this can be overridden with XML_PARSE_SAX1 later,
so we must initialize the SAX1 element handlers as well.
Change the check in xmlDetectSAX2 to only look for XML_SAX2_MAGIC, so
we don't switch to SAX1 if the SAX2 element handlers are NULL.
-rw-r--r-- | SAX2.c | 11 | ||||
-rw-r--r-- | parser.c | 5 |
2 files changed, 8 insertions, 8 deletions
@@ -2874,20 +2874,23 @@ xmlSAXVersion(xmlSAXHandler *hdlr, int version) { if (hdlr == NULL) return(-1); if (version == 2) { - hdlr->startElement = NULL; - hdlr->endElement = NULL; hdlr->startElementNs = xmlSAX2StartElementNs; hdlr->endElementNs = xmlSAX2EndElementNs; hdlr->serror = NULL; hdlr->initialized = XML_SAX2_MAGIC; #ifdef LIBXML_SAX1_ENABLED } else if (version == 1) { - hdlr->startElement = xmlSAX2StartElement; - hdlr->endElement = xmlSAX2EndElement; hdlr->initialized = 1; #endif /* LIBXML_SAX1_ENABLED */ } else return(-1); +#ifdef LIBXML_SAX1_ENABLED + hdlr->startElement = xmlSAX2StartElement; + hdlr->endElement = xmlSAX2EndElement; +#else + hdlr->startElement = NULL; + hdlr->endElement = NULL; +#endif /* LIBXML_SAX1_ENABLED */ hdlr->internalSubset = xmlSAX2InternalSubset; hdlr->externalSubset = xmlSAX2ExternalSubset; hdlr->isStandalone = xmlSAX2IsStandalone; @@ -842,10 +842,7 @@ xmlDetectSAX2(xmlParserCtxtPtr ctxt) { if (ctxt == NULL) return; sax = ctxt->sax; #ifdef LIBXML_SAX1_ENABLED - if ((sax) && (sax->initialized == XML_SAX2_MAGIC) && - ((sax->startElementNs != NULL) || - (sax->endElementNs != NULL) || - ((sax->startElement == NULL) && (sax->endElement == NULL)))) + if ((sax) && (sax->initialized == XML_SAX2_MAGIC)) ctxt->sax2 = 1; #else ctxt->sax2 = 1; |