@@ -1836,6 +1836,13 @@ add_features(PyObject *mod)
1836
1836
}
1837
1837
#endif
1838
1838
1839
+ static void
1840
+ pyexpat_destructor (PyObject * op )
1841
+ {
1842
+ void * p = PyCapsule_GetPointer (op , PyExpat_CAPSULE_NAME );
1843
+ PyMem_Free (p );
1844
+ }
1845
+
1839
1846
static int
1840
1847
pyexpat_exec (PyObject * mod )
1841
1848
{
@@ -1921,40 +1928,46 @@ pyexpat_exec(PyObject *mod)
1921
1928
MYCONST (XML_PARAM_ENTITY_PARSING_ALWAYS );
1922
1929
#undef MYCONST
1923
1930
1924
- static struct PyExpat_CAPI capi ;
1931
+ struct PyExpat_CAPI * capi = PyMem_Calloc (1 , sizeof (struct PyExpat_CAPI ));
1932
+ if (capi == NULL ) {
1933
+ PyErr_NoMemory ();
1934
+ return -1 ;
1935
+ }
1925
1936
/* initialize pyexpat dispatch table */
1926
- capi . size = sizeof (capi );
1927
- capi . magic = PyExpat_CAPI_MAGIC ;
1928
- capi . MAJOR_VERSION = XML_MAJOR_VERSION ;
1929
- capi . MINOR_VERSION = XML_MINOR_VERSION ;
1930
- capi . MICRO_VERSION = XML_MICRO_VERSION ;
1931
- capi . ErrorString = XML_ErrorString ;
1932
- capi . GetErrorCode = XML_GetErrorCode ;
1933
- capi . GetErrorColumnNumber = XML_GetErrorColumnNumber ;
1934
- capi . GetErrorLineNumber = XML_GetErrorLineNumber ;
1935
- capi . Parse = XML_Parse ;
1936
- capi . ParserCreate_MM = XML_ParserCreate_MM ;
1937
- capi . ParserFree = XML_ParserFree ;
1938
- capi . SetCharacterDataHandler = XML_SetCharacterDataHandler ;
1939
- capi . SetCommentHandler = XML_SetCommentHandler ;
1940
- capi . SetDefaultHandlerExpand = XML_SetDefaultHandlerExpand ;
1941
- capi . SetElementHandler = XML_SetElementHandler ;
1942
- capi . SetNamespaceDeclHandler = XML_SetNamespaceDeclHandler ;
1943
- capi . SetProcessingInstructionHandler = XML_SetProcessingInstructionHandler ;
1944
- capi . SetUnknownEncodingHandler = XML_SetUnknownEncodingHandler ;
1945
- capi . SetUserData = XML_SetUserData ;
1946
- capi . SetStartDoctypeDeclHandler = XML_SetStartDoctypeDeclHandler ;
1947
- capi . SetEncoding = XML_SetEncoding ;
1948
- capi . DefaultUnknownEncodingHandler = PyUnknownEncodingHandler ;
1937
+ capi -> size = sizeof (* capi );
1938
+ capi -> magic = PyExpat_CAPI_MAGIC ;
1939
+ capi -> MAJOR_VERSION = XML_MAJOR_VERSION ;
1940
+ capi -> MINOR_VERSION = XML_MINOR_VERSION ;
1941
+ capi -> MICRO_VERSION = XML_MICRO_VERSION ;
1942
+ capi -> ErrorString = XML_ErrorString ;
1943
+ capi -> GetErrorCode = XML_GetErrorCode ;
1944
+ capi -> GetErrorColumnNumber = XML_GetErrorColumnNumber ;
1945
+ capi -> GetErrorLineNumber = XML_GetErrorLineNumber ;
1946
+ capi -> Parse = XML_Parse ;
1947
+ capi -> ParserCreate_MM = XML_ParserCreate_MM ;
1948
+ capi -> ParserFree = XML_ParserFree ;
1949
+ capi -> SetCharacterDataHandler = XML_SetCharacterDataHandler ;
1950
+ capi -> SetCommentHandler = XML_SetCommentHandler ;
1951
+ capi -> SetDefaultHandlerExpand = XML_SetDefaultHandlerExpand ;
1952
+ capi -> SetElementHandler = XML_SetElementHandler ;
1953
+ capi -> SetNamespaceDeclHandler = XML_SetNamespaceDeclHandler ;
1954
+ capi -> SetProcessingInstructionHandler = XML_SetProcessingInstructionHandler ;
1955
+ capi -> SetUnknownEncodingHandler = XML_SetUnknownEncodingHandler ;
1956
+ capi -> SetUserData = XML_SetUserData ;
1957
+ capi -> SetStartDoctypeDeclHandler = XML_SetStartDoctypeDeclHandler ;
1958
+ capi -> SetEncoding = XML_SetEncoding ;
1959
+ capi -> DefaultUnknownEncodingHandler = PyUnknownEncodingHandler ;
1949
1960
#if XML_COMBINED_VERSION >= 20100
1950
- capi . SetHashSalt = XML_SetHashSalt ;
1961
+ capi -> SetHashSalt = XML_SetHashSalt ;
1951
1962
#else
1952
- capi . SetHashSalt = NULL ;
1963
+ capi -> SetHashSalt = NULL ;
1953
1964
#endif
1954
1965
1955
1966
/* export using capsule */
1956
- PyObject * capi_object = PyCapsule_New (& capi , PyExpat_CAPSULE_NAME , NULL );
1967
+ PyObject * capi_object = PyCapsule_New (capi , PyExpat_CAPSULE_NAME ,
1968
+ pyexpat_destructor );
1957
1969
if (capi_object == NULL ) {
1970
+ PyMem_Free (capi );
1958
1971
return -1 ;
1959
1972
}
1960
1973
0 commit comments