@@ -122,33 +122,39 @@ CALL_XML_HANDLER_SETTER(const struct HandlerInfo *handler_info,
122122    setter (xml_parser , xml_handler );
123123}
124124
125+ static  int 
126+ set_error_code (PyObject  * err , enum  XML_Code  code )
127+ {
128+     PyObject  * v  =  PyLong_FromLong ((long )code );
129+     int  ok  =  v  !=  NULL  &&  PyObject_SetAttr (err , & _Py_ID (code ), v ) !=  -1 ;
130+     Py_XDECREF (v );
131+     return  ok ;
132+ }
133+ 
125134/* Set an integer attribute on the error object; return true on success, 
126135 * false on an exception. 
127136 */ 
128137static  int 
129- set_error_attr (PyObject  * err , const  char  * name , int  value )
138+ set_error_location (PyObject  * err , const  char  * name , XML_Size  value )
130139{
131-     PyObject  * v  =  PyLong_FromLong (value );
132- 
133-     if  (v  ==  NULL  ||  PyObject_SetAttrString (err , name , v ) ==  -1 ) {
134-         Py_XDECREF (v );
135-         return  0 ;
136-     }
137-     Py_DECREF (v );
138-     return  1 ;
140+     PyObject  * v  =  PyLong_FromSize_t ((size_t )value );
141+     int  ok  =  v  !=  NULL  &&  PyObject_SetAttrString (err , name , v ) !=  -1 ;
142+     Py_XDECREF (v );
143+     return  ok ;
139144}
140145
146+ 
141147static  PyObject  * 
142- format_xml_error (enum  XML_Error  code , int  lineno , int  column )
148+ format_xml_error (enum  XML_Error  code , XML_Size  lineno , XML_Size  column )
143149{
144150    const  char  * errmsg  =  XML_ErrorString (code );
145151    PyUnicodeWriter  * writer  =  PyUnicodeWriter_Create (strlen (errmsg ) +  1 );
146152    if  (writer  ==  NULL ) {
147153        return  NULL ;
148154    }
149155    if  (PyUnicodeWriter_Format (writer ,
150-                                "%s: line %i , column %i " ,
151-                                errmsg , lineno , column ) <  0 )
156+                                "%s: line %zu , column %zu " ,
157+                                errmsg , ( size_t ) lineno , ( size_t ) column ) <  0 )
152158    {
153159        PyUnicodeWriter_Discard (writer );
154160        return  NULL ;
@@ -158,7 +164,7 @@ format_xml_error(enum XML_Error code, int lineno, int column)
158164
159165static  PyObject  * 
160166set_xml_error (pyexpat_state  * state ,
161-               enum  XML_Error  code , int  lineno , int  column ,
167+               enum  XML_Error  code , XML_Size  lineno , XML_Size  column ,
162168              const  char  * errmsg )
163169{
164170    PyObject  * arg  =  errmsg  ==  NULL 
@@ -171,9 +177,9 @@ set_xml_error(pyexpat_state *state,
171177    Py_DECREF (arg );
172178    if  (
173179        res  !=  NULL 
174-         &&  set_error_attr (res ,  "code" , code )
175-         &&  set_error_attr (res , "lineno" , lineno )
176-         &&  set_error_attr (res , "offset" , column )
180+         &&  set_error_code (res , code )
181+         &&  set_error_location (res , "lineno" , lineno )
182+         &&  set_error_location (res , "offset" , column )
177183    ) {
178184        PyErr_SetObject (state -> error , res );
179185    }
@@ -185,8 +191,8 @@ set_xml_error(pyexpat_state *state,
185191    do {                                                            \
186192        XML_Parser parser = SELF->itself;                           \
187193        assert(parser != NULL);                                     \
188-         int  lineno = XML_GetErrorLineNumber (parser);                 \
189-         int  column = XML_GetErrorColumnNumber (parser);               \
194+         XML_Size  lineno = XML_GetCurrentLineNumber (parser);         \
195+         XML_Size  column = XML_GetCurrentColumnNumber (parser);       \
190196        (void)set_xml_error(state, CODE, lineno, column, ERRMSG);   \
191197    } while (0)
192198
0 commit comments