attrib = (attrib) ? PyDict_Copy(attrib) : PyDict_New();
if (!attrib)
return NULL;
- if (kw)
- PyDict_Update(attrib, kw);
+ if (kw != NULL && PyDict_Update(attrib, kw) < 0) {
+ Py_DECREF(attrib);
+ return NULL;
+ }
} else {
Py_INCREF(Py_None);
attrib = Py_None;
attrib = (attrib) ? PyDict_Copy(attrib) : PyDict_New();
if (!attrib)
return NULL;
- if (kw)
- PyDict_Update(attrib, kw);
+ if (kw != NULL && PyDict_Update(attrib, kw) < 0) {
+ Py_DECREF(attrib);
+ return NULL;
+ }
} else {
Py_INCREF(Py_None);
attrib = Py_None;
self->data = NULL;
- self->stack = PyList_New(20);
self->index = 0;
self->events = NULL;
self->start_event_obj = self->end_event_obj = NULL;
self->start_ns_event_obj = self->end_ns_event_obj = NULL;
+ self->stack = PyList_New(20);
+ if (self->stack == NULL) {
+ Py_DECREF(self);
+ return NULL;
+ }
ALLOC(sizeof(TreeBuilderObject), "create treebuilder");
Py_XDECREF(self->end_event_obj);
Py_XDECREF(self->start_event_obj);
Py_XDECREF(self->events);
- Py_DECREF(self->stack);
+ Py_XDECREF(self->stack);
Py_XDECREF(self->data);
Py_DECREF(self->last);
Py_DECREF(self->this);
if (self == NULL)
return NULL;
+ /* Init to NULL to keep the error handling below manageable. */
+ self->parser = NULL;
+ self->names =
+ self->target =
+ self->handle_xml =
+ self->handle_start =
+ self->handle_data =
+ self->handle_end =
+ self->handle_comment =
+ self->handle_pi =
+ self->handle_close =
+ NULL;
+
self->entity = PyDict_New();
if (!self->entity) {
- PyObject_Del(self);
+ Py_DECREF(self);
return NULL;
}
-
+
self->names = PyDict_New();
if (!self->names) {
- PyObject_Del(self->entity);
- PyObject_Del(self);
+ Py_DECREF(self);
return NULL;
}
self->parser = EXPAT(ParserCreate_MM)(encoding, &memory_handler, "}");
if (!self->parser) {
- PyObject_Del(self->names);
- PyObject_Del(self->entity);
- PyObject_Del(self);
+ Py_DECREF(self);
PyErr_NoMemory();
return NULL;
}
ALLOC(sizeof(XMLParserObject), "create expatparser");
- /* Init to NULL to keep the error handling below manageable. */
- self->target =
- self->handle_xml =
- self->handle_start =
- self->handle_data =
- self->handle_end =
- self->handle_comment =
- self->handle_pi =
- self->handle_close =
- NULL;
-
/* setup target handlers */
if (!target) {
target = treebuilder_new();
static void
xmlparser_dealloc(XMLParserObject* self)
{
- EXPAT(ParserFree)(self->parser);
+ if (self->parser != NULL) {
+ EXPAT(ParserFree)(self->parser);
+ }
Py_XDECREF(self->handle_close);
Py_XDECREF(self->handle_pi);
Py_XDECREF(self->handle_start);
Py_XDECREF(self->handle_xml);
- Py_DECREF(self->target);
- Py_DECREF(self->entity);
- Py_DECREF(self->names);
+ Py_XDECREF(self->target);
+ Py_XDECREF(self->entity);
+ Py_XDECREF(self->names);
RELEASE(sizeof(XMLParserObject), "destroy expatparser");