https://github.com/python/cpython/commit/7de4fcd44585f572acbcee23f5c7018b2b3f0983
commit: 7de4fcd44585f572acbcee23f5c7018b2b3f0983
branch: main
author: Serhiy Storchaka <[email protected]>
committer: serhiy-storchaka <[email protected]>
date: 2026-05-27T13:23:28+03:00
summary:
gh-149571: Fix the C implementation of Element.itertext() (GH-149929)
It no longer emits text for comments and processing instructions.
files:
A Misc/NEWS.d/next/Library/2026-05-17-02-25-56.gh-issue-149571.LNyuWJ.rst
M Lib/test/test_xml_etree.py
M Modules/_elementtree.c
diff --git a/Lib/test/test_xml_etree.py b/Lib/test/test_xml_etree.py
index 8fef5bf663a7c4..3a4d4098fbf567 100644
--- a/Lib/test/test_xml_etree.py
+++ b/Lib/test/test_xml_etree.py
@@ -3663,6 +3663,32 @@ def test_basic(self):
doc = ET.XML("<root>a&<sub>b&</sub>c&</root>")
self.assertEqual(''.join(doc.itertext()), 'a&b&c&')
+ def test_comment(self):
+ e = ET.Element('root')
+ e.text = 'before'
+ comment = ET.Comment('comment')
+ self.assertEqual(comment.text, 'comment')
+ comment.tail = 'after'
+ e.append(comment)
+ self.assertEqual(''.join(e.itertext()), 'beforeafter')
+ self.assertEqual(list(e.iter()), [e, comment])
+ self.assertEqual(list(e.iter('root')), [e])
+ self.assertEqual(''.join(comment.itertext()), '')
+ self.assertEqual(list(comment.iter()), [comment])
+
+ def test_processinginstruction(self):
+ e = ET.Element('root')
+ e.text = 'before'
+ pi = ET.PI('test', 'instruction')
+ self.assertEqual(pi.text, 'test instruction')
+ pi.tail = 'after'
+ e.append(pi)
+ self.assertEqual(''.join(e.itertext()), 'beforeafter')
+ self.assertEqual(list(e.iter()), [e, pi])
+ self.assertEqual(list(e.iter('root')), [e])
+ self.assertEqual(''.join(pi.itertext()), '')
+ self.assertEqual(list(pi.iter()), [pi])
+
def test_corners(self):
# single root, no subelements
a = ET.Element('a')
diff --git
a/Misc/NEWS.d/next/Library/2026-05-17-02-25-56.gh-issue-149571.LNyuWJ.rst
b/Misc/NEWS.d/next/Library/2026-05-17-02-25-56.gh-issue-149571.LNyuWJ.rst
new file mode 100644
index 00000000000000..2b71d9cf2200be
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2026-05-17-02-25-56.gh-issue-149571.LNyuWJ.rst
@@ -0,0 +1,2 @@
+Fix the C implementation of :meth:`xml.etree.ElementTree.Element.itertext`:
+it no longer emits text for comments and processing instructions.
diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c
index eb69df22c6ef0a..f827274eeffba8 100644
--- a/Modules/_elementtree.c
+++ b/Modules/_elementtree.c
@@ -2297,6 +2297,10 @@ elementiter_next(PyObject *op)
return NULL;
}
if (it->gettext) {
+ if (elem->tag != Py_None && !PyUnicode_Check(elem->tag)) {
+ Py_DECREF(elem);
+ continue;
+ }
text = element_get_text(elem);
goto gettext;
}
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]