Commit 90b20675 authored by Georg Brandl's avatar Georg Brandl

#10777: fix iteration over dict keys while mutating the dict.

parent ff52f760
...@@ -1841,6 +1841,15 @@ def check_issue6565(): ...@@ -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/')
"""
# -------------------------------------------------------------------- # --------------------------------------------------------------------
......
...@@ -1068,7 +1068,7 @@ _serialize = { ...@@ -1068,7 +1068,7 @@ _serialize = {
def register_namespace(prefix, uri): def register_namespace(prefix, uri):
if re.match("ns\d+$", prefix): if re.match("ns\d+$", prefix):
raise ValueError("Prefix format reserved for internal use") 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: if k == uri or v == prefix:
del _namespace_map[k] del _namespace_map[k]
_namespace_map[uri] = prefix _namespace_map[uri] = prefix
......
...@@ -18,6 +18,9 @@ Core and Builtins ...@@ -18,6 +18,9 @@ Core and Builtins
Library Library
------- -------
- Issue #10777: Fix "dictionary changed size during iteration" bug in
ElementTree register_namespace().
- Issue #10626: test_logging now preserves logger disabled states. - Issue #10626: test_logging now preserves logger disabled states.
- Issue #10774: test_logging now removes temp files created during tests. - Issue #10774: test_logging now removes temp files created during tests.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment