]> granicus.if.org Git - python/commitdiff
Issue #21905: Avoid RuntimeError in pickle.whichmodule() when sys.modules is mutated...
authorAntoine Pitrou <solipsis@pitrou.net>
Sat, 4 Oct 2014 20:15:27 +0000 (22:15 +0200)
committerAntoine Pitrou <solipsis@pitrou.net>
Sat, 4 Oct 2014 20:15:27 +0000 (22:15 +0200)
Patch by Olivier Grisel.

Lib/pickle.py
Misc/ACKS
Misc/NEWS

index 3fc2596e675631b6cc906211ec6af0224e632873..663773f3d954064826153ab39cfaab9431fd8f97 100644 (file)
@@ -280,7 +280,9 @@ def whichmodule(obj, name, allow_qualname=False):
     module_name = getattr(obj, '__module__', None)
     if module_name is not None:
         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:
             continue
         try:
index c91d6432480634a5d717160f15bd7d9e50cfe846..30950475f337351f6b32177a1b8062f87408fb81 100644 (file)
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -494,6 +494,7 @@ Eddy De Greef
 Grant Griffin
 Andrea Griffini
 Duncan Grisby
+Olivier Grisel
 Fabian Groffen
 Eric Groo
 Dag Gruneau
index 9915e4e9cd5e5e742fa8fad0b158d8b107fe05c3..6112a008e9eddb17cabf8cd5c457dd4c544b17dc 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -22,6 +22,9 @@ Core and Builtins
 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
   (including empty directories) in ZIP file.