Kaydet (Commit) e6174ca8 authored tarafından Eli Bendersky's avatar Eli Bendersky

Issue #16913: Fix Element.itertext()'s handling of text with XML entities.

Patch by Serhiy Storchaka
üst 458c0d5a
......@@ -1904,6 +1904,10 @@ class ElementIterTest(unittest.TestCase):
tree = ET.ElementTree(None)
self.assertRaises(AttributeError, tree.iter)
# Issue #16913
doc = ET.XML("<root>a&amp;<sub>b&amp;</sub>c&amp;</root>")
self.assertEqual(''.join(doc.itertext()), 'a&b&c&')
def test_corners(self):
# single root, no subelements
a = ET.Element('a')
......
......@@ -348,6 +348,8 @@ Library
- Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element
element_factory (fixes a regression in SimpleTAL).
- Issue #16913: Fix Element.itertext()'s handling of text with XML entities.
- Issue #16034: Fix performance regressions in the new `bz2.BZ2File`
implementation. Initial patch by Serhiy Storchaka.
......
......@@ -2017,7 +2017,9 @@ elementiter_next(ElementIterObject *it)
PyObject_RichCompareBool(it->root_element->tag,
it->sought_tag, Py_EQ) == 1) {
if (it->gettext) {
PyObject *text = JOIN_OBJ(it->root_element->text);
PyObject *text = element_get_text(it->root_element);
if (!text)
return NULL;
if (PyObject_IsTrue(text)) {
Py_INCREF(text);
return text;
......@@ -2047,7 +2049,9 @@ elementiter_next(ElementIterObject *it)
}
if (it->gettext) {
PyObject *text = JOIN_OBJ(child->text);
PyObject *text = element_get_text(child);
if (!text)
return NULL;
if (PyObject_IsTrue(text)) {
Py_INCREF(text);
return text;
......@@ -2062,8 +2066,15 @@ elementiter_next(ElementIterObject *it)
continue;
}
else {
PyObject *tail = it->gettext ? JOIN_OBJ(cur_parent->tail) : Py_None;
PyObject *tail;
ParentLocator *next = it->parent_stack->next;
if (it->gettext) {
tail = element_get_tail(cur_parent);
if (!tail)
return NULL;
}
else
tail = Py_None;
Py_XDECREF(it->parent_stack->parent);
PyObject_Free(it->parent_stack);
it->parent_stack = next;
......
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