From 513c46e109757357d5114d96d60cef69c3a586ec Mon Sep 17 00:00:00 2001 From: Alexandre Vassalotti Date: Tue, 24 Nov 2009 18:06:51 +0000 Subject: [PATCH] Merged revisions 76499 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r76499 | alexandre.vassalotti | 2009-11-24 12:53:23 -0500 (Tue, 24 Nov 2009) | 9 lines Issue 7128: Removed reference to the non-existent copyreg module. The reference to copyreg was a unnoticed leftover from the compatibility support for the grand renaming of the standard library in Python 3. The compatibility support was reverted in r63493, but not completely as this patch shows. Based on a patch by Amaury Forgeot d'Arc. ........ --- Lib/test/pickletester.py | 10 ++++++++++ Modules/cPickle.c | 5 ++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/Lib/test/pickletester.py b/Lib/test/pickletester.py index 73ca9269650..c22085ad5c5 100644 --- a/Lib/test/pickletester.py +++ b/Lib/test/pickletester.py @@ -1020,6 +1020,16 @@ class AbstractPickleModuleTests(unittest.TestCase): s = StringIO.StringIO("X''.") self.assertRaises(EOFError, self.module.load, s) + def test_restricted(self): + # issue7128: cPickle failed in restricted mode + builtins = {self.module.__name__: self.module, + '__import__': __import__} + d = {} + teststr = "def f(): {0}.dumps(0)".format(self.module.__name__) + exec teststr in {'__builtins__': builtins}, d + d['f']() + + class AbstractPersistentPicklerTests(unittest.TestCase): # This class defines persistent_id() and persistent_load() diff --git a/Modules/cPickle.c b/Modules/cPickle.c index 8fa4a66c365..4e53ae67227 100644 --- a/Modules/cPickle.c +++ b/Modules/cPickle.c @@ -132,7 +132,7 @@ static PyObject *__class___str, *__getinitargs___str, *__dict___str, *__reduce_ex___str, *write_str, *append_str, *read_str, *readline_str, *__main___str, - *copyreg_str, *dispatch_table_str; + *dispatch_table_str; /************************************************************************* Internal Data type for pickle data. */ @@ -2985,7 +2985,7 @@ newPicklerobject(PyObject *file, int proto) if (PyEval_GetRestricted()) { /* Restricted execution, get private tables */ - PyObject *m = PyImport_Import(copyreg_str); + PyObject *m = PyImport_ImportModule("copy_reg"); if (m == NULL) goto err; @@ -5733,7 +5733,6 @@ init_stuff(PyObject *module_dict) INIT_STR(append); INIT_STR(read); INIT_STR(readline); - INIT_STR(copyreg); INIT_STR(dispatch_table); if (!( copyreg = PyImport_ImportModule("copy_reg")))