Skip to content

Commit 0d12dc0

Browse files
committed
[2.7] bpo-35068: Fix possible crashes in pyexpat.c
1 parent 56a4a3a commit 0d12dc0

1 file changed

Lines changed: 11 additions & 17 deletions

File tree

Modules/pyexpat.c

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1084,21 +1084,7 @@ xmlparse_ExternalEntityParserCreate(xmlparseobject *self, PyObject *args)
10841084
return NULL;
10851085
new_parser->buffer_size = self->buffer_size;
10861086
new_parser->buffer_used = 0;
1087-
if (self->buffer != NULL) {
1088-
new_parser->buffer = malloc(new_parser->buffer_size);
1089-
if (new_parser->buffer == NULL) {
1090-
#ifndef Py_TPFLAGS_HAVE_GC
1091-
/* Code for versions 2.0 and 2.1 */
1092-
PyObject_Del(new_parser);
1093-
#else
1094-
/* Code for versions 2.2 and later. */
1095-
PyObject_GC_Del(new_parser);
1096-
#endif
1097-
return PyErr_NoMemory();
1098-
}
1099-
}
1100-
else
1101-
new_parser->buffer = NULL;
1087+
new_parser->buffer = NULL;
11021088
new_parser->returns_unicode = self->returns_unicode;
11031089
new_parser->ordered_attributes = self->ordered_attributes;
11041090
new_parser->specified_attributes = self->specified_attributes;
@@ -1120,6 +1106,14 @@ xmlparse_ExternalEntityParserCreate(xmlparseobject *self, PyObject *args)
11201106
return PyErr_NoMemory();
11211107
}
11221108

1109+
if (self->buffer != NULL) {
1110+
new_parser->buffer = malloc(new_parser->buffer_size);
1111+
if (new_parser->buffer == NULL) {
1112+
Py_DECREF(new_parser);
1113+
return PyErr_NoMemory();
1114+
}
1115+
}
1116+
11231117
XML_SetUserData(new_parser->itself, (void *)new_parser);
11241118

11251119
/* allocate and clear handlers first */
@@ -1310,6 +1304,8 @@ newxmlparseobject(char *encoding, char *namespace_separator, PyObject *intern)
13101304
self->in_callback = 0;
13111305
self->ns_prefixes = 0;
13121306
self->handlers = NULL;
1307+
self->intern = intern;
1308+
Py_XINCREF(self->intern);
13131309
if (namespace_separator != NULL) {
13141310
self->itself = XML_ParserCreateNS(encoding, *namespace_separator);
13151311
}
@@ -1327,8 +1323,6 @@ newxmlparseobject(char *encoding, char *namespace_separator, PyObject *intern)
13271323
XML_SetHashSalt(self->itself,
13281324
(unsigned long)_Py_HashSecret.prefix);
13291325
#endif
1330-
self->intern = intern;
1331-
Py_XINCREF(self->intern);
13321326
#ifdef Py_TPFLAGS_HAVE_GC
13331327
PyObject_GC_Track(self);
13341328
#else

0 commit comments

Comments
 (0)