summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_minidom.py11
-rw-r--r--Lib/xml/dom/minidom.py4
2 files changed, 13 insertions, 2 deletions
diff --git a/Lib/test/test_minidom.py b/Lib/test/test_minidom.py
index 8b4c715..68aac0f 100644
--- a/Lib/test/test_minidom.py
+++ b/Lib/test/test_minidom.py
@@ -1127,6 +1127,17 @@ def testWholeText():
checkWholeText(text, "cabd")
checkWholeText(text2, "cabd")
+def testPatch1094164 ():
+ doc = parseString("<doc><e/></doc>")
+ elem = doc.documentElement
+ e = elem.firstChild
+ confirm(e.parentNode is elem, "Before replaceChild()")
+ # Check that replacing a child with itself leaves the tree unchanged
+ elem.replaceChild(e, e)
+ confirm(e.parentNode is elem, "After replaceChild()")
+
+
+
def testReplaceWholeText():
def setup():
doc = parseString("<doc>a<e/>d</doc>")
diff --git a/Lib/xml/dom/minidom.py b/Lib/xml/dom/minidom.py
index 4bb4ef4..84be99b 100644
--- a/Lib/xml/dom/minidom.py
+++ b/Lib/xml/dom/minidom.py
@@ -135,10 +135,10 @@ class Node(xml.dom.Node, GetattrMagic):
if newChild.nodeType not in self._child_node_types:
raise xml.dom.HierarchyRequestErr(
"%s cannot be child of %s" % (repr(newChild), repr(self)))
- if newChild.parentNode is not None:
- newChild.parentNode.removeChild(newChild)
if newChild is oldChild:
return
+ if newChild.parentNode is not None:
+ newChild.parentNode.removeChild(newChild)
try:
index = self.childNodes.index(oldChild)
except ValueError: