From a25158f5cc590f3dff4226c3a48257481e6e67a6 Mon Sep 17 00:00:00 2001 From: Jacob Walls Date: Wed, 7 Jan 2026 16:23:32 -0500 Subject: [PATCH] Refs #36769 -- Avoided visiting grandchild nodes in XML Deserializer. The only use case for visiting grandchild nodes turned out to be to support an unintentionally invalid fixture in the test suite. The invalid fixture added in #36969 was modeled on fixture9.xml in dae08cf55b83caef5e8ee39b16417692e8565278, so that is corrected as well in this commit, where the test will still pass. --- django/core/serializers/xml_serializer.py | 14 +++++--------- .../fixtures/invalid_deeply_nested_elements.xml | 2 +- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/django/core/serializers/xml_serializer.py b/django/core/serializers/xml_serializer.py index d43865c257..e159180e17 100644 --- a/django/core/serializers/xml_serializer.py +++ b/django/core/serializers/xml_serializer.py @@ -439,17 +439,13 @@ class Deserializer(base.Deserializer): ) +def check_element_type(element): + return element.nodeType in (element.TEXT_NODE, element.CDATA_SECTION_NODE) + + def getInnerText(node): - """Get the inner text of a DOM node and any children one level deep.""" - # inspired by - # https://mail.python.org/pipermail/xml-sig/2005-March/011022.html return "".join( - [ - element.data - for child in node.childNodes - for element in (child, *child.childNodes) - if element.nodeType in (element.TEXT_NODE, element.CDATA_SECTION_NODE) - ] + [child.data for child in node.childNodes if check_element_type(child)] ) diff --git a/tests/fixtures/fixtures/invalid_deeply_nested_elements.xml b/tests/fixtures/fixtures/invalid_deeply_nested_elements.xml index cd164d3d26..2ed39c3d36 100644 --- a/tests/fixtures/fixtures/invalid_deeply_nested_elements.xml +++ b/tests/fixtures/fixtures/invalid_deeply_nested_elements.xml @@ -3,7 +3,7 @@ - Django pony + Django pony