From: Antoine Pitrou Date: Sat, 4 Oct 2014 20:15:27 +0000 (+0200) Subject: Issue #21905: Avoid RuntimeError in pickle.whichmodule() when sys.modules is mutated... X-Git-Tag: v3.4.3rc1~556 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e1618491adc5c0ef214c25d4e3b882e8586a2fee;p=thirdparty%2FPython%2Fcpython.git Issue #21905: Avoid RuntimeError in pickle.whichmodule() when sys.modules is mutated while iterating. Patch by Olivier Grisel. --- diff --git a/Lib/pickle.py b/Lib/pickle.py index 3fc2596e6756..663773f3d954 100644 --- a/Lib/pickle.py +++ b/Lib/pickle.py @@ -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: diff --git a/Misc/ACKS b/Misc/ACKS index c91d64324806..30950475f337 100644 --- 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 diff --git a/Misc/NEWS b/Misc/NEWS index 9915e4e9cd5e..6112a008e9ed 100644 --- 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.