@@ -3764,7 +3764,8 @@ _check_xmlparser(XMLParserObject* self)
37643764}
37653765
37663766LOCAL (PyObject * )
3767- expat_parse (XMLParserObject * self , const char * data , int data_len , int final )
3767+ expat_parse (elementtreestate * st , XMLParserObject * self , const char * data ,
3768+ int data_len , int final )
37683769{
37693770 int ok ;
37703771
@@ -3775,7 +3776,6 @@ expat_parse(XMLParserObject* self, const char* data, int data_len, int final)
37753776 return NULL ;
37763777
37773778 if (!ok ) {
3778- elementtreestate * st = ET_STATE_GLOBAL ;
37793779 expat_set_error (
37803780 st ,
37813781 EXPAT (GetErrorCode )(self -> parser ),
@@ -3805,11 +3805,11 @@ _elementtree_XMLParser_close_impl(XMLParserObject *self)
38053805 if (!_check_xmlparser (self )) {
38063806 return NULL ;
38073807 }
3808- res = expat_parse (self , "" , 0 , 1 );
3808+ elementtreestate * st = ET_STATE_GLOBAL ;
3809+ res = expat_parse (st , self , "" , 0 , 1 );
38093810 if (!res )
38103811 return NULL ;
38113812
3812- elementtreestate * st = ET_STATE_GLOBAL ;
38133813 if (TreeBuilder_CheckExact (st , self -> target )) {
38143814 Py_DECREF (res );
38153815 return treebuilder_done ((TreeBuilderObject * ) self -> target );
@@ -3840,6 +3840,7 @@ _elementtree_XMLParser_feed(XMLParserObject *self, PyObject *data)
38403840 if (!_check_xmlparser (self )) {
38413841 return NULL ;
38423842 }
3843+ elementtreestate * st = ET_STATE_GLOBAL ;
38433844 if (PyUnicode_Check (data )) {
38443845 Py_ssize_t data_len ;
38453846 const char * data_ptr = PyUnicode_AsUTF8AndSize (data , & data_len );
@@ -3851,7 +3852,8 @@ _elementtree_XMLParser_feed(XMLParserObject *self, PyObject *data)
38513852 }
38523853 /* Explicitly set UTF-8 encoding. Return code ignored. */
38533854 (void )EXPAT (SetEncoding )(self -> parser , "utf-8" );
3854- return expat_parse (self , data_ptr , (int )data_len , 0 );
3855+
3856+ return expat_parse (st , self , data_ptr , (int )data_len , 0 );
38553857 }
38563858 else {
38573859 Py_buffer view ;
@@ -3863,7 +3865,7 @@ _elementtree_XMLParser_feed(XMLParserObject *self, PyObject *data)
38633865 PyErr_SetString (PyExc_OverflowError , "size does not fit in an int" );
38643866 return NULL ;
38653867 }
3866- res = expat_parse (self , view .buf , (int )view .len , 0 );
3868+ res = expat_parse (st , self , view .buf , (int )view .len , 0 );
38673869 PyBuffer_Release (& view );
38683870 return res ;
38693871 }
@@ -3895,6 +3897,7 @@ _elementtree_XMLParser__parse_whole(XMLParserObject *self, PyObject *file)
38953897 return NULL ;
38963898
38973899 /* read from open file object */
3900+ elementtreestate * st = ET_STATE_GLOBAL ;
38983901 for (;;) {
38993902
39003903 buffer = PyObject_CallFunction (reader , "i" , 64 * 1024 );
@@ -3932,8 +3935,8 @@ _elementtree_XMLParser__parse_whole(XMLParserObject *self, PyObject *file)
39323935 return NULL ;
39333936 }
39343937 res = expat_parse (
3935- self , PyBytes_AS_STRING (buffer ), (int )PyBytes_GET_SIZE (buffer ), 0
3936- );
3938+ st , self , PyBytes_AS_STRING (buffer ), (int )PyBytes_GET_SIZE (buffer ),
3939+ 0 );
39373940
39383941 Py_DECREF (buffer );
39393942
@@ -3947,9 +3950,8 @@ _elementtree_XMLParser__parse_whole(XMLParserObject *self, PyObject *file)
39473950
39483951 Py_DECREF (reader );
39493952
3950- res = expat_parse (self , "" , 0 , 1 );
3953+ res = expat_parse (st , self , "" , 0 , 1 );
39513954
3952- elementtreestate * st = ET_STATE_GLOBAL ;
39533955 if (res && TreeBuilder_CheckExact (st , self -> target )) {
39543956 Py_DECREF (res );
39553957 return treebuilder_done ((TreeBuilderObject * ) self -> target );
0 commit comments