]> granicus.if.org Git - python/commitdiff
#10777: fix iteration over dict keys while mutating the dict.
authorGeorg Brandl <georg@python.org>
Tue, 28 Dec 2010 10:38:33 +0000 (10:38 +0000)
committerGeorg Brandl <georg@python.org>
Tue, 28 Dec 2010 10:38:33 +0000 (10:38 +0000)
Lib/test/test_xml_etree.py
Lib/xml/etree/ElementTree.py
Misc/NEWS

index 08f7988ec50d388a2c5cf333e1a3ba0916f28c38..22fafa9a2e64ff175b1c5dc649e628810c0c8574 100644 (file)
@@ -1841,6 +1841,15 @@ def check_issue6565():
 
     """
 
+def check_issue10777():
+    """
+    Registering a namespace twice caused a "dictionary changed size during
+    iteration" bug.
+
+    >>> ET.register_namespace('test10777', 'http://myuri/')
+    >>> ET.register_namespace('test10777', 'http://myuri/')
+    """
+
 # --------------------------------------------------------------------
 
 
index 53aa9e755f1e1a633e05426a65ad5d18201a050a..ba338797841da3de4249369bebb88e329157a3a2 100644 (file)
@@ -1068,7 +1068,7 @@ _serialize = {
 def register_namespace(prefix, uri):
     if re.match("ns\d+$", prefix):
         raise ValueError("Prefix format reserved for internal use")
-    for k, v in _namespace_map.items():
+    for k, v in list(_namespace_map.items()):
         if k == uri or v == prefix:
             del _namespace_map[k]
     _namespace_map[uri] = prefix
index 8acc9e387a1ddd022cb1b9d552274971e2f55192..46b6233627920f6e167ef22c1d244d3c24cf0d93 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -18,6 +18,9 @@ Core and Builtins
 Library
 -------
 
+- Issue #10777: Fix "dictionary changed size during iteration" bug in
+  ElementTree register_namespace().
+
 - Issue #10626: test_logging now preserves logger disabled states.
 
 - Issue #10774: test_logging now removes temp files created during tests.