@@ -2821,9 +2821,8 @@ treebuilder_handle_pi(TreeBuilderObject* self, PyObject* target, PyObject* text)
2821
2821
}
2822
2822
2823
2823
this = self -> this ;
2824
- elementtreestate * st = ET_STATE_GLOBAL ;
2825
2824
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 )
2827
2826
goto error ;
2828
2827
Py_XSETREF (self -> last_for_tail , Py_NewRef (pi ));
2829
2828
}
@@ -3784,7 +3783,8 @@ _check_xmlparser(XMLParserObject* self)
3784
3783
}
3785
3784
3786
3785
LOCAL (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 )
3788
3788
{
3789
3789
int ok ;
3790
3790
@@ -3795,7 +3795,6 @@ expat_parse(XMLParserObject* self, const char* data, int data_len, int final)
3795
3795
return NULL ;
3796
3796
3797
3797
if (!ok ) {
3798
- elementtreestate * st = ET_STATE_GLOBAL ;
3799
3798
expat_set_error (
3800
3799
st ,
3801
3800
EXPAT (GetErrorCode )(self -> parser ),
@@ -3825,11 +3824,11 @@ _elementtree_XMLParser_close_impl(XMLParserObject *self)
3825
3824
if (!_check_xmlparser (self )) {
3826
3825
return NULL ;
3827
3826
}
3828
- res = expat_parse (self , "" , 0 , 1 );
3827
+ elementtreestate * st = self -> state ;
3828
+ res = expat_parse (st , self , "" , 0 , 1 );
3829
3829
if (!res )
3830
3830
return NULL ;
3831
3831
3832
- elementtreestate * st = self -> state ;
3833
3832
if (TreeBuilder_CheckExact (st , self -> target )) {
3834
3833
Py_DECREF (res );
3835
3834
return treebuilder_done ((TreeBuilderObject * ) self -> target );
@@ -3860,6 +3859,7 @@ _elementtree_XMLParser_feed(XMLParserObject *self, PyObject *data)
3860
3859
if (!_check_xmlparser (self )) {
3861
3860
return NULL ;
3862
3861
}
3862
+ elementtreestate * st = self -> state ;
3863
3863
if (PyUnicode_Check (data )) {
3864
3864
Py_ssize_t data_len ;
3865
3865
const char * data_ptr = PyUnicode_AsUTF8AndSize (data , & data_len );
@@ -3871,7 +3871,8 @@ _elementtree_XMLParser_feed(XMLParserObject *self, PyObject *data)
3871
3871
}
3872
3872
/* Explicitly set UTF-8 encoding. Return code ignored. */
3873
3873
(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 );
3875
3876
}
3876
3877
else {
3877
3878
Py_buffer view ;
@@ -3883,7 +3884,7 @@ _elementtree_XMLParser_feed(XMLParserObject *self, PyObject *data)
3883
3884
PyErr_SetString (PyExc_OverflowError , "size does not fit in an int" );
3884
3885
return NULL ;
3885
3886
}
3886
- res = expat_parse (self , view .buf , (int )view .len , 0 );
3887
+ res = expat_parse (st , self , view .buf , (int )view .len , 0 );
3887
3888
PyBuffer_Release (& view );
3888
3889
return res ;
3889
3890
}
@@ -3915,6 +3916,7 @@ _elementtree_XMLParser__parse_whole(XMLParserObject *self, PyObject *file)
3915
3916
return NULL ;
3916
3917
3917
3918
/* read from open file object */
3919
+ elementtreestate * st = self -> state ;
3918
3920
for (;;) {
3919
3921
3920
3922
buffer = PyObject_CallFunction (reader , "i" , 64 * 1024 );
@@ -3952,8 +3954,8 @@ _elementtree_XMLParser__parse_whole(XMLParserObject *self, PyObject *file)
3952
3954
return NULL ;
3953
3955
}
3954
3956
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 );
3957
3959
3958
3960
Py_DECREF (buffer );
3959
3961
@@ -3967,9 +3969,8 @@ _elementtree_XMLParser__parse_whole(XMLParserObject *self, PyObject *file)
3967
3969
3968
3970
Py_DECREF (reader );
3969
3971
3970
- res = expat_parse (self , "" , 0 , 1 );
3972
+ res = expat_parse (st , self , "" , 0 , 1 );
3971
3973
3972
- elementtreestate * st = self -> state ;
3973
3974
if (res && TreeBuilder_CheckExact (st , self -> target )) {
3974
3975
Py_DECREF (res );
3975
3976
return treebuilder_done ((TreeBuilderObject * ) self -> target );
0 commit comments