@@ -1083,11 +1083,6 @@ pyexpat_xmlparser_ExternalEntityParserCreate_impl(xmlparseobject *self,
10831083 return NULL ;
10841084 }
10851085
1086- // The new subparser will make use of the parent XML_Parser inside of Expat.
1087- // So we need to take subparsers into account with the reference counting
1088- // of their parent parser.
1089- Py_INCREF (self );
1090-
10911086 new_parser -> buffer_size = self -> buffer_size ;
10921087 new_parser -> buffer_used = 0 ;
10931088 new_parser -> buffer = NULL ;
@@ -1097,21 +1092,22 @@ pyexpat_xmlparser_ExternalEntityParserCreate_impl(xmlparseobject *self,
10971092 new_parser -> ns_prefixes = self -> ns_prefixes ;
10981093 new_parser -> itself = XML_ExternalEntityParserCreate (self -> itself , context ,
10991094 encoding );
1100- new_parser -> parent = (PyObject * )self ;
1095+ // The new subparser will make use of the parent XML_Parser inside of Expat.
1096+ // So we need to take subparsers into account with the reference counting
1097+ // of their parent parser.
1098+ new_parser -> parent = Py_NewRef (self );
11011099 new_parser -> handlers = 0 ;
11021100 new_parser -> intern = Py_XNewRef (self -> intern );
11031101
11041102 if (self -> buffer != NULL ) {
11051103 new_parser -> buffer = PyMem_Malloc (new_parser -> buffer_size );
11061104 if (new_parser -> buffer == NULL ) {
11071105 Py_DECREF (new_parser );
1108- Py_DECREF (self );
11091106 return PyErr_NoMemory ();
11101107 }
11111108 }
11121109 if (!new_parser -> itself ) {
11131110 Py_DECREF (new_parser );
1114- Py_DECREF (self );
11151111 return PyErr_NoMemory ();
11161112 }
11171113
@@ -1125,7 +1121,6 @@ pyexpat_xmlparser_ExternalEntityParserCreate_impl(xmlparseobject *self,
11251121 new_parser -> handlers = PyMem_New (PyObject * , i );
11261122 if (!new_parser -> handlers ) {
11271123 Py_DECREF (new_parser );
1128- Py_DECREF (self );
11291124 return PyErr_NoMemory ();
11301125 }
11311126 clear_handlers (new_parser , 1 );
@@ -2496,6 +2491,9 @@ PyInit_pyexpat(void)
24962491static void
24972492clear_handlers (xmlparseobject * self , int initial )
24982493{
2494+ if (self -> handlers == NULL ) {
2495+ return ;
2496+ }
24992497 for (size_t i = 0 ; handler_info [i ].name != NULL ; i ++ ) {
25002498 if (initial ) {
25012499 self -> handlers [i ] = NULL ;
0 commit comments