From: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> Date: Wed, 27 May 2026 10:49:54 +0000 (+0200) Subject: [3.13] gh-149571: Fix the C implementation of Element.itertext() (GH-149929) (GH... X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=98a9ccbe39c26608a625b4b43f1ed90dcd1fc19b;p=thirdparty%2FPython%2Fcpython.git [3.13] gh-149571: Fix the C implementation of Element.itertext() (GH-149929) (GH-150511) It no longer emits text for comments and processing instructions. (cherry picked from commit 7de4fcd44585f572acbcee23f5c7018b2b3f0983) Co-authored-by: Serhiy Storchaka --- diff --git a/Lib/test/test_xml_etree.py b/Lib/test/test_xml_etree.py index cd6e5ec40cd4..51f8a2d52161 100644 --- a/Lib/test/test_xml_etree.py +++ b/Lib/test/test_xml_etree.py @@ -3553,6 +3553,32 @@ class ElementIterTest(unittest.TestCase): doc = ET.XML("a&b&c&") 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 000000000000..2b71d9cf2200 --- /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 e144ad569988..ef2601bc05ca 100644 --- a/Modules/_elementtree.c +++ b/Modules/_elementtree.c @@ -2264,6 +2264,10 @@ elementiter_next(ElementIterObject *it) 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; }