diff options
author | Sebastian Pipping <sebastian@pipping.org> | 2022-09-22 16:51:17 +0200 |
---|---|---|
committer | Sebastian Pipping <sebastian@pipping.org> | 2022-10-07 19:30:10 +0200 |
commit | 16a4db928bc75d93e798abb47c0b6696eef3355b (patch) | |
tree | acd6d433dd9c2267e05d087bba6e874958a87404 | |
parent | d7ea13f504a93c90e4b711bd3fc02b29a5380451 (diff) | |
download | libexpat-git-16a4db928bc75d93e798abb47c0b6696eef3355b.tar.gz |
lib: Stop leaking opening tag bindings after closing tag mismatch error
.. by moving the opening tag onto the free tag list only
*after* the tag match check has passed.
-rw-r--r-- | expat/lib/xmlparse.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/expat/lib/xmlparse.c b/expat/lib/xmlparse.c index 5e2c16b2..e415068b 100644 --- a/expat/lib/xmlparse.c +++ b/expat/lib/xmlparse.c @@ -3011,9 +3011,6 @@ doContent(XML_Parser parser, int startTagLevel, const ENCODING *enc, int len; const char *rawName; TAG *tag = parser->m_tagStack; - parser->m_tagStack = tag->parent; - tag->parent = parser->m_freeTagList; - parser->m_freeTagList = tag; rawName = s + enc->minBytesPerChar * 2; len = XmlNameLength(enc, rawName); if (len != tag->rawNameLength @@ -3021,6 +3018,9 @@ doContent(XML_Parser parser, int startTagLevel, const ENCODING *enc, *eventPP = rawName; return XML_ERROR_TAG_MISMATCH; } + parser->m_tagStack = tag->parent; + tag->parent = parser->m_freeTagList; + parser->m_freeTagList = tag; --parser->m_tagLevel; if (parser->m_endElementHandler) { const XML_Char *localPart; |