@@ -1076,11 +1076,6 @@ pyexpat_xmlparser_ExternalEntityParserCreate_impl(xmlparseobject *self,
10761076 return NULL ;
10771077 }
10781078
1079- // The new subparser will make use of the parent XML_Parser inside of Expat.
1080- // So we need to take subparsers into account with the reference counting
1081- // of their parent parser.
1082- Py_INCREF (self );
1083-
10841079 new_parser -> buffer_size = self -> buffer_size ;
10851080 new_parser -> buffer_used = 0 ;
10861081 new_parser -> buffer = NULL ;
@@ -1090,21 +1085,22 @@ pyexpat_xmlparser_ExternalEntityParserCreate_impl(xmlparseobject *self,
10901085 new_parser -> ns_prefixes = self -> ns_prefixes ;
10911086 new_parser -> itself = XML_ExternalEntityParserCreate (self -> itself , context ,
10921087 encoding );
1093- new_parser -> parent = (PyObject * )self ;
1088+ // The new subparser will make use of the parent XML_Parser inside of Expat.
1089+ // So we need to take subparsers into account with the reference counting
1090+ // of their parent parser.
1091+ new_parser -> parent = Py_NewRef (self );
10941092 new_parser -> handlers = 0 ;
10951093 new_parser -> intern = Py_XNewRef (self -> intern );
10961094
10971095 if (self -> buffer != NULL ) {
10981096 new_parser -> buffer = PyMem_Malloc (new_parser -> buffer_size );
10991097 if (new_parser -> buffer == NULL ) {
11001098 Py_DECREF (new_parser );
1101- Py_DECREF (self );
11021099 return PyErr_NoMemory ();
11031100 }
11041101 }
11051102 if (!new_parser -> itself ) {
11061103 Py_DECREF (new_parser );
1107- Py_DECREF (self );
11081104 return PyErr_NoMemory ();
11091105 }
11101106
@@ -1118,7 +1114,6 @@ pyexpat_xmlparser_ExternalEntityParserCreate_impl(xmlparseobject *self,
11181114 new_parser -> handlers = PyMem_New (PyObject * , i );
11191115 if (!new_parser -> handlers ) {
11201116 Py_DECREF (new_parser );
1121- Py_DECREF (self );
11221117 return PyErr_NoMemory ();
11231118 }
11241119 clear_handlers (new_parser , 1 );
@@ -2397,6 +2392,9 @@ PyInit_pyexpat(void)
23972392static void
23982393clear_handlers (xmlparseobject * self , int initial )
23992394{
2395+ if (self -> handlers == NULL ) {
2396+ return ;
2397+ }
24002398 for (size_t i = 0 ; handler_info [i ].name != NULL ; i ++ ) {
24012399 if (initial ) {
24022400 self -> handlers [i ] = NULL ;
0 commit comments