diff -r 5176e8a2e258 Modules/_elementtree.c
--- a/Modules/_elementtree.c Wed Dec 09 19:45:07 2015 +0200
+++ b/Modules/_elementtree.c Wed Dec 09 20:10:58 2015 +0200
@@ -2492,7 +2492,15 @@ treebuilder_handle_start(TreeBuilderObje
}
if (self->element_factory && self->element_factory != Py_None) {
- node = PyObject_CallFunction(self->element_factory, "OO", tag, attrib);
+ if (attrib == Py_None) {
+ attrib = PyDict_New();
+ if (!attrib)
+ return NULL;
+ node = PyObject_CallFunction(self->element_factory, "OO", tag, attrib);
+ Py_DECREF(attrib);
+ }
+ else
+ node = PyObject_CallFunction(self->element_factory, "OO", tag, attrib);
} else {
node = create_new_element(tag, attrib);
}
@@ -2959,12 +2967,8 @@ expat_start_handler(XMLParserObject* sel
attrib_in += 2;
}
} else {
- /* Pass an empty dictionary on */
- attrib = PyDict_New();
- if (!attrib) {
- Py_DECREF(tag);
- return;
- }
+ Py_INCREF(Py_None);
+ attrib = Py_None;
}
if (TreeBuilder_CheckExact(self->target)) {
@@ -2973,6 +2977,14 @@ expat_start_handler(XMLParserObject* sel
tag, attrib);
}
else if (self->handle_start) {
+ if (attrib == Py_None) {
+ Py_DECREF(attrib);
+ attrib = PyDict_New();
+ if (!attrib) {
+ Py_DECREF(tag);
+ return;
+ }
+ }
res = PyObject_CallFunction(self->handle_start, "OO", tag, attrib);
} else
res = NULL;