Kaydet (Commit) 9e09c26e authored tarafından Victor Stinner's avatar Victor Stinner

Issue #18501, #18408: Fix expat handlers in pyexpat, don't call Python

functions if a Python exception was raised
üst 3fd8cbd5
...@@ -402,6 +402,10 @@ static void ...@@ -402,6 +402,10 @@ static void
my_CharacterDataHandler(void *userData, const XML_Char *data, int len) my_CharacterDataHandler(void *userData, const XML_Char *data, int len)
{ {
xmlparseobject *self = (xmlparseobject *) userData; xmlparseobject *self = (xmlparseobject *) userData;
if (PyErr_Occurred())
return;
if (self->buffer == NULL) if (self->buffer == NULL)
call_character_handler(self, data, len); call_character_handler(self, data, len);
else { else {
...@@ -436,6 +440,9 @@ my_StartElementHandler(void *userData, ...@@ -436,6 +440,9 @@ my_StartElementHandler(void *userData,
PyObject *container, *rv, *args; PyObject *container, *rv, *args;
int i, max; int i, max;
if (PyErr_Occurred())
return;
if (flush_character_buffer(self) < 0) if (flush_character_buffer(self) < 0)
return; return;
/* Set max to the number of slots filled in atts[]; max/2 is /* Set max to the number of slots filled in atts[]; max/2 is
...@@ -519,6 +526,8 @@ my_##NAME##Handler PARAMS {\ ...@@ -519,6 +526,8 @@ my_##NAME##Handler PARAMS {\
INIT \ INIT \
\ \
if (have_handler(self, NAME)) { \ if (have_handler(self, NAME)) { \
if (PyErr_Occurred()) \
return RETURN; \
if (flush_character_buffer(self) < 0) \ if (flush_character_buffer(self) < 0) \
return RETURN; \ return RETURN; \
args = Py_BuildValue PARAM_FORMAT ;\ args = Py_BuildValue PARAM_FORMAT ;\
...@@ -633,6 +642,9 @@ my_ElementDeclHandler(void *userData, ...@@ -633,6 +642,9 @@ my_ElementDeclHandler(void *userData,
PyObject *rv = NULL; PyObject *rv = NULL;
PyObject *modelobj, *nameobj; PyObject *modelobj, *nameobj;
if (PyErr_Occurred())
return;
if (flush_character_buffer(self) < 0) if (flush_character_buffer(self) < 0)
goto finally; goto finally;
modelobj = conv_content_model(model, (conv_string_to_unicode)); modelobj = conv_content_model(model, (conv_string_to_unicode));
...@@ -1125,6 +1137,9 @@ PyUnknownEncodingHandler(void *encodingHandlerData, ...@@ -1125,6 +1137,9 @@ PyUnknownEncodingHandler(void *encodingHandlerData,
void *data; void *data;
unsigned int kind; unsigned int kind;
if (PyErr_Occurred())
return XML_STATUS_ERROR;
if (template_buffer[1] == 0) { if (template_buffer[1] == 0) {
for (i = 0; i < 256; i++) for (i = 0; i < 256; i++)
template_buffer[i] = i; template_buffer[i] = i;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment