Commit 70d2b107 authored by Antoine Pitrou's avatar Antoine Pitrou

Issue #21905: Avoid RuntimeError in pickle.whichmodule() when sys.modules is...

Issue #21905: Avoid RuntimeError in pickle.whichmodule() when sys.modules is mutated while iterating.

Patch by Olivier Grisel.
parent 64723071
...@@ -280,7 +280,9 @@ def whichmodule(obj, name, allow_qualname=False): ...@@ -280,7 +280,9 @@ def whichmodule(obj, name, allow_qualname=False):
module_name = getattr(obj, '__module__', None) module_name = getattr(obj, '__module__', None)
if module_name is not None: if module_name is not None:
return module_name return module_name
for module_name, module in sys.modules.items(): # Protect the iteration by using a list copy of sys.modules against dynamic
# modules that trigger imports of other modules upon calls to getattr.
for module_name, module in list(sys.modules.items()):
if module_name == '__main__' or module is None: if module_name == '__main__' or module is None:
continue continue
try: try:
......
...@@ -494,6 +494,7 @@ Eddy De Greef ...@@ -494,6 +494,7 @@ Eddy De Greef
Grant Griffin Grant Griffin
Andrea Griffini Andrea Griffini
Duncan Grisby Duncan Grisby
Olivier Grisel
Fabian Groffen Fabian Groffen
Eric Groo Eric Groo
Dag Gruneau Dag Gruneau
......
...@@ -22,6 +22,9 @@ Core and Builtins ...@@ -22,6 +22,9 @@ Core and Builtins
Library Library
------- -------
- Issue #21905: Avoid RuntimeError in pickle.whichmodule() when sys.modules
is mutated while iterating. Patch by Olivier Grisel.
- Issue #22219: The zipfile module CLI now adds entries for directories - Issue #22219: The zipfile module CLI now adds entries for directories
(including empty directories) in ZIP file. (including empty directories) in ZIP file.
......
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