@@ -3764,7 +3764,8 @@ _check_xmlparser(XMLParserObject* self)
3764
3764
}
3765
3765
3766
3766
LOCAL (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 )
3768
3769
{
3769
3770
int ok ;
3770
3771
@@ -3775,7 +3776,6 @@ expat_parse(XMLParserObject* self, const char* data, int data_len, int final)
3775
3776
return NULL ;
3776
3777
3777
3778
if (!ok ) {
3778
- elementtreestate * st = ET_STATE_GLOBAL ;
3779
3779
expat_set_error (
3780
3780
st ,
3781
3781
EXPAT (GetErrorCode )(self -> parser ),
@@ -3805,11 +3805,11 @@ _elementtree_XMLParser_close_impl(XMLParserObject *self)
3805
3805
if (!_check_xmlparser (self )) {
3806
3806
return NULL ;
3807
3807
}
3808
- res = expat_parse (self , "" , 0 , 1 );
3808
+ elementtreestate * st = ET_STATE_GLOBAL ;
3809
+ res = expat_parse (st , self , "" , 0 , 1 );
3809
3810
if (!res )
3810
3811
return NULL ;
3811
3812
3812
- elementtreestate * st = ET_STATE_GLOBAL ;
3813
3813
if (TreeBuilder_CheckExact (st , self -> target )) {
3814
3814
Py_DECREF (res );
3815
3815
return treebuilder_done ((TreeBuilderObject * ) self -> target );
@@ -3840,6 +3840,7 @@ _elementtree_XMLParser_feed(XMLParserObject *self, PyObject *data)
3840
3840
if (!_check_xmlparser (self )) {
3841
3841
return NULL ;
3842
3842
}
3843
+ elementtreestate * st = ET_STATE_GLOBAL ;
3843
3844
if (PyUnicode_Check (data )) {
3844
3845
Py_ssize_t data_len ;
3845
3846
const char * data_ptr = PyUnicode_AsUTF8AndSize (data , & data_len );
@@ -3851,7 +3852,8 @@ _elementtree_XMLParser_feed(XMLParserObject *self, PyObject *data)
3851
3852
}
3852
3853
/* Explicitly set UTF-8 encoding. Return code ignored. */
3853
3854
(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 );
3855
3857
}
3856
3858
else {
3857
3859
Py_buffer view ;
@@ -3863,7 +3865,7 @@ _elementtree_XMLParser_feed(XMLParserObject *self, PyObject *data)
3863
3865
PyErr_SetString (PyExc_OverflowError , "size does not fit in an int" );
3864
3866
return NULL ;
3865
3867
}
3866
- res = expat_parse (self , view .buf , (int )view .len , 0 );
3868
+ res = expat_parse (st , self , view .buf , (int )view .len , 0 );
3867
3869
PyBuffer_Release (& view );
3868
3870
return res ;
3869
3871
}
@@ -3895,6 +3897,7 @@ _elementtree_XMLParser__parse_whole(XMLParserObject *self, PyObject *file)
3895
3897
return NULL ;
3896
3898
3897
3899
/* read from open file object */
3900
+ elementtreestate * st = ET_STATE_GLOBAL ;
3898
3901
for (;;) {
3899
3902
3900
3903
buffer = PyObject_CallFunction (reader , "i" , 64 * 1024 );
@@ -3932,8 +3935,8 @@ _elementtree_XMLParser__parse_whole(XMLParserObject *self, PyObject *file)
3932
3935
return NULL ;
3933
3936
}
3934
3937
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 );
3937
3940
3938
3941
Py_DECREF (buffer );
3939
3942
@@ -3947,9 +3950,8 @@ _elementtree_XMLParser__parse_whole(XMLParserObject *self, PyObject *file)
3947
3950
3948
3951
Py_DECREF (reader );
3949
3952
3950
- res = expat_parse (self , "" , 0 , 1 );
3953
+ res = expat_parse (st , self , "" , 0 , 1 );
3951
3954
3952
- elementtreestate * st = ET_STATE_GLOBAL ;
3953
3955
if (res && TreeBuilder_CheckExact (st , self -> target )) {
3954
3956
Py_DECREF (res );
3955
3957
return treebuilder_done ((TreeBuilderObject * ) self -> target );
0 commit comments