diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2017-09-18 12:48:23 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2017-09-18 12:48:23 (GMT) |
commit | 8afd7ab12d7f8915b549cf04af384b495ec73d22 (patch) | |
tree | a52757a147edae91845e1cf4d82b75d3eb931069 /Modules | |
parent | 84c89ef4e5086e71e3d9ee65cd3620bf8174c9ac (diff) | |
download | cpython-8afd7ab12d7f8915b549cf04af384b495ec73d22.zip cpython-8afd7ab12d7f8915b549cf04af384b495ec73d22.tar.gz cpython-8afd7ab12d7f8915b549cf04af384b495ec73d22.tar.bz2 |
[3.6] bpo-31499, xml.etree: Fix xmlparser_gc_clear() crash (GH-3641) (#3645)
* bpo-31499, xml.etree: Fix xmlparser_gc_clear() crash
xml.etree: xmlparser_gc_clear() now sets self.parser to NULL to prevent a
crash in xmlparser_dealloc() if xmlparser_gc_clear() was called previously
by the garbage collector, because the parser was part of a reference cycle.
Co-Authored-By: Serhiy Storchaka <storchaka@gmail.com>
(cherry picked from commit e727d41ffcd91b21ce82026ec8c8381d34a16209)
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/_elementtree.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c index cf3e687..a6d6c61 100644 --- a/Modules/_elementtree.c +++ b/Modules/_elementtree.c @@ -3367,7 +3367,11 @@ xmlparser_gc_traverse(XMLParserObject *self, visitproc visit, void *arg) static int xmlparser_gc_clear(XMLParserObject *self) { - EXPAT(ParserFree)(self->parser); + if (self->parser != NULL) { + XML_Parser parser = self->parser; + self->parser = NULL; + EXPAT(ParserFree)(parser); + } Py_CLEAR(self->handle_close); Py_CLEAR(self->handle_pi); |