diff options
| author | Eli Bendersky <eliben@gmail.com> | 2013-01-10 14:31:05 (GMT) |
|---|---|---|
| committer | Eli Bendersky <eliben@gmail.com> | 2013-01-10 14:31:05 (GMT) |
| commit | bb48151c8c2721e9430c892629d29dbdd30fa4ab (patch) | |
| tree | bb88777fc748e3de508899c6c6ae5951fb3f5737 /Modules | |
| parent | e474022192cecc37efb7102e8c3fbc56b43d47e1 (diff) | |
| parent | e6174ca85e293039c464e06bf3a656300347b562 (diff) | |
| download | cpython-bb48151c8c2721e9430c892629d29dbdd30fa4ab.zip cpython-bb48151c8c2721e9430c892629d29dbdd30fa4ab.tar.gz cpython-bb48151c8c2721e9430c892629d29dbdd30fa4ab.tar.bz2 | |
Issue #16913: Fix Element.itertext()'s handling of text with XML entities.
Patch by Serhiy Storchaka
Diffstat (limited to 'Modules')
| -rw-r--r-- | Modules/_elementtree.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c index 4b53037..2129fc2 100644 --- a/Modules/_elementtree.c +++ b/Modules/_elementtree.c @@ -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; |
