summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/test/pickletester.py10
-rw-r--r--Modules/cPickle.c5
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")))