diff options
-rw-r--r-- | Lib/test/pickletester.py | 10 | ||||
-rw-r--r-- | Modules/cPickle.c | 5 |
2 files changed, 12 insertions, 3 deletions
diff --git a/Lib/test/pickletester.py b/Lib/test/pickletester.py index 8f96d74..04bb842 100644 --- a/Lib/test/pickletester.py +++ b/Lib/test/pickletester.py @@ -1091,6 +1091,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 ab59b76..f97959b 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. */ @@ -3069,7 +3069,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; @@ -5852,7 +5852,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"))) |