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;