changeset: 92809:86ba3bdfac15 branch: 3.4 parent: 92799:cba365e2117f user: Antoine Pitrou date: Sat Oct 04 22:15:27 2014 +0200 files: Lib/pickle.py Misc/ACKS Misc/NEWS description: Issue #21905: Avoid RuntimeError in pickle.whichmodule() when sys.modules is mutated while iterating. Patch by Olivier Grisel. diff -r cba365e2117f -r 86ba3bdfac15 Lib/pickle.py --- a/Lib/pickle.py Sat Oct 04 15:05:00 2014 +0300 +++ b/Lib/pickle.py Sat Oct 04 22:15:27 2014 +0200 @@ -280,7 +280,9 @@ 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 -r cba365e2117f -r 86ba3bdfac15 Misc/ACKS --- a/Misc/ACKS Sat Oct 04 15:05:00 2014 +0300 +++ b/Misc/ACKS Sat Oct 04 22:15:27 2014 +0200 @@ -494,6 +494,7 @@ Grant Griffin Andrea Griffini Duncan Grisby +Olivier Grisel Fabian Groffen Eric Groo Dag Gruneau diff -r cba365e2117f -r 86ba3bdfac15 Misc/NEWS --- a/Misc/NEWS Sat Oct 04 15:05:00 2014 +0300 +++ b/Misc/NEWS Sat Oct 04 22:15:27 2014 +0200 @@ -22,6 +22,9 @@ 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.