@@ -2821,9 +2821,8 @@ treebuilder_handle_pi(TreeBuilderObject* self, PyObject* target, PyObject* text)
28212821 }
28222822
28232823 this = self -> this ;
2824- elementtreestate * st = ET_STATE_GLOBAL ;
28252824 if (self -> insert_pis && this != Py_None ) {
2826- if (treebuilder_add_subelement (st , this , pi ) < 0 )
2825+ if (treebuilder_add_subelement (self -> state , this , pi ) < 0 )
28272826 goto error ;
28282827 Py_XSETREF (self -> last_for_tail , Py_NewRef (pi ));
28292828 }
@@ -3784,7 +3783,8 @@ _check_xmlparser(XMLParserObject* self)
37843783}
37853784
37863785LOCAL (PyObject * )
3787- expat_parse (XMLParserObject * self , const char * data , int data_len , int final )
3786+ expat_parse (elementtreestate * st , XMLParserObject * self , const char * data ,
3787+ int data_len , int final )
37883788{
37893789 int ok ;
37903790
@@ -3795,7 +3795,6 @@ expat_parse(XMLParserObject* self, const char* data, int data_len, int final)
37953795 return NULL ;
37963796
37973797 if (!ok ) {
3798- elementtreestate * st = ET_STATE_GLOBAL ;
37993798 expat_set_error (
38003799 st ,
38013800 EXPAT (GetErrorCode )(self -> parser ),
@@ -3825,11 +3824,11 @@ _elementtree_XMLParser_close_impl(XMLParserObject *self)
38253824 if (!_check_xmlparser (self )) {
38263825 return NULL ;
38273826 }
3828- res = expat_parse (self , "" , 0 , 1 );
3827+ elementtreestate * st = self -> state ;
3828+ res = expat_parse (st , self , "" , 0 , 1 );
38293829 if (!res )
38303830 return NULL ;
38313831
3832- elementtreestate * st = self -> state ;
38333832 if (TreeBuilder_CheckExact (st , self -> target )) {
38343833 Py_DECREF (res );
38353834 return treebuilder_done ((TreeBuilderObject * ) self -> target );
@@ -3860,6 +3859,7 @@ _elementtree_XMLParser_feed(XMLParserObject *self, PyObject *data)
38603859 if (!_check_xmlparser (self )) {
38613860 return NULL ;
38623861 }
3862+ elementtreestate * st = self -> state ;
38633863 if (PyUnicode_Check (data )) {
38643864 Py_ssize_t data_len ;
38653865 const char * data_ptr = PyUnicode_AsUTF8AndSize (data , & data_len );
@@ -3871,7 +3871,8 @@ _elementtree_XMLParser_feed(XMLParserObject *self, PyObject *data)
38713871 }
38723872 /* Explicitly set UTF-8 encoding. Return code ignored. */
38733873 (void )EXPAT (SetEncoding )(self -> parser , "utf-8" );
3874- return expat_parse (self , data_ptr , (int )data_len , 0 );
3874+
3875+ return expat_parse (st , self , data_ptr , (int )data_len , 0 );
38753876 }
38763877 else {
38773878 Py_buffer view ;
@@ -3883,7 +3884,7 @@ _elementtree_XMLParser_feed(XMLParserObject *self, PyObject *data)
38833884 PyErr_SetString (PyExc_OverflowError , "size does not fit in an int" );
38843885 return NULL ;
38853886 }
3886- res = expat_parse (self , view .buf , (int )view .len , 0 );
3887+ res = expat_parse (st , self , view .buf , (int )view .len , 0 );
38873888 PyBuffer_Release (& view );
38883889 return res ;
38893890 }
@@ -3915,6 +3916,7 @@ _elementtree_XMLParser__parse_whole(XMLParserObject *self, PyObject *file)
39153916 return NULL ;
39163917
39173918 /* read from open file object */
3919+ elementtreestate * st = self -> state ;
39183920 for (;;) {
39193921
39203922 buffer = PyObject_CallFunction (reader , "i" , 64 * 1024 );
@@ -3952,8 +3954,8 @@ _elementtree_XMLParser__parse_whole(XMLParserObject *self, PyObject *file)
39523954 return NULL ;
39533955 }
39543956 res = expat_parse (
3955- self , PyBytes_AS_STRING (buffer ), (int )PyBytes_GET_SIZE (buffer ), 0
3956- );
3957+ st , self , PyBytes_AS_STRING (buffer ), (int )PyBytes_GET_SIZE (buffer ),
3958+ 0 );
39573959
39583960 Py_DECREF (buffer );
39593961
@@ -3967,9 +3969,8 @@ _elementtree_XMLParser__parse_whole(XMLParserObject *self, PyObject *file)
39673969
39683970 Py_DECREF (reader );
39693971
3970- res = expat_parse (self , "" , 0 , 1 );
3972+ res = expat_parse (st , self , "" , 0 , 1 );
39713973
3972- elementtreestate * st = self -> state ;
39733974 if (res && TreeBuilder_CheckExact (st , self -> target )) {
39743975 Py_DECREF (res );
39753976 return treebuilder_done ((TreeBuilderObject * ) self -> target );
0 commit comments