summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/copy_reg.py3
-rw-r--r--Lib/test/pickletester.py2
-rw-r--r--Modules/cPickle.c51
-rw-r--r--Modules/datetimemodule.c27
-rw-r--r--Objects/structseq.c1
5 files changed, 5 insertions, 79 deletions
diff --git a/Lib/copy_reg.py b/Lib/copy_reg.py
index cf801cb..2bff142 100644
--- a/Lib/copy_reg.py
+++ b/Lib/copy_reg.py
@@ -10,7 +10,6 @@ __all__ = ["pickle", "constructor",
"add_extension", "remove_extension", "clear_extension_cache"]
dispatch_table = {}
-safe_constructors = {}
def pickle(ob_type, pickle_function, constructor_ob=None):
if type(ob_type) is _ClassType:
@@ -26,7 +25,6 @@ def pickle(ob_type, pickle_function, constructor_ob=None):
def constructor(object):
if not callable(object):
raise TypeError("constructors must be callable")
- safe_constructors[object] = 1
# Example: provide pickling support for complex numbers.
@@ -41,7 +39,6 @@ def _reconstructor(cls, base, state):
obj = base.__new__(cls, state)
base.__init__(obj, state)
return obj
-_reconstructor.__safe_for_unpickling__ = 1
_HEAPTYPE = 1<<9
diff --git a/Lib/test/pickletester.py b/Lib/test/pickletester.py
index ed0e436..8211dcf 100644
--- a/Lib/test/pickletester.py
+++ b/Lib/test/pickletester.py
@@ -15,8 +15,6 @@ class myint(int):
class initarg(C):
- __safe_for_unpickling__ = 1
-
def __init__(self, a, b):
self.a = a
self.b = b
diff --git a/Modules/cPickle.c b/Modules/cPickle.c
index 08bb8e8..07d1089 100644
--- a/Modules/cPickle.c
+++ b/Modules/cPickle.c
@@ -92,14 +92,13 @@ static PyObject *BadPickleGet;
static PyObject *dispatch_table;
-static PyObject *safe_constructors;
static PyObject *empty_tuple;
static PyObject *__class___str, *__getinitargs___str, *__dict___str,
*__getstate___str, *__setstate___str, *__name___str, *__reduce___str,
- *write_str, *__safe_for_unpickling___str, *append_str,
+ *write_str, *append_str,
*read_str, *readline_str, *__main___str, *__basicnew___str,
- *copy_reg_str, *dispatch_table_str, *safe_constructors_str;
+ *copy_reg_str, *dispatch_table_str;
/*************************************************************************
Internal Data type for pickle data. */
@@ -306,7 +305,6 @@ typedef struct Unpicklerobject {
int (*readline_func)(struct Unpicklerobject *, char **);
int buf_size;
char *buf;
- PyObject *safe_constructors;
PyObject *find_class;
} Unpicklerobject;
@@ -3078,8 +3076,7 @@ load_dict(Unpicklerobject *self)
static PyObject *
Instance_New(PyObject *cls, PyObject *args)
{
- int has_key;
- PyObject *safe=0, *r=0;
+ PyObject *r = 0;
if (PyClass_Check(cls)) {
int l;
@@ -3107,21 +3104,6 @@ Instance_New(PyObject *cls, PyObject *args)
else goto err;
}
- /* Is safe_constructors always a dict? */
- has_key = cPickle_PyMapping_HasKey(safe_constructors, cls);
- if (!has_key) {
- safe = PyObject_GetAttr(cls, __safe_for_unpickling___str);
- if (!safe ||
- !PyObject_IsTrue(safe)) {
- cPickle_ErrFormat(UnpicklingError,
- "%s is not safe for unpickling",
- "O", cls);
- Py_XDECREF(safe);
- return NULL;
- }
- Py_DECREF(safe);
- }
-
if (args==Py_None) {
/* Special case, call cls.__basicnew__() */
PyObject *basicnew;
@@ -4332,7 +4314,6 @@ newUnpicklerobject(PyObject *f)
self->buf_size = 0;
self->read = NULL;
self->readline = NULL;
- self->safe_constructors = NULL;
self->find_class = NULL;
if (!( self->memo = PyDict_New()))
@@ -4373,21 +4354,6 @@ newUnpicklerobject(PyObject *f)
}
}
- if (PyEval_GetRestricted()) {
- /* Restricted execution, get private tables */
- PyObject *m;
-
- if (!( m=PyImport_Import(copy_reg_str))) goto err;
- self->safe_constructors=PyObject_GetAttr(m,
- safe_constructors_str);
- Py_DECREF(m);
- if (!( self->safe_constructors )) goto err;
- }
- else {
- self->safe_constructors=safe_constructors;
- Py_INCREF(safe_constructors);
- }
-
return self;
err:
@@ -4418,7 +4384,6 @@ Unpickler_dealloc(Unpicklerobject *self)
Py_XDECREF(self->pers_func);
Py_XDECREF(self->arg);
Py_XDECREF(self->last_string);
- Py_XDECREF(self->safe_constructors);
if (self->marks) {
free(self->marks);
@@ -4693,28 +4658,22 @@ init_stuff(PyObject *module_dict)
INIT_STR(__main__);
INIT_STR(__reduce__);
INIT_STR(write);
- INIT_STR(__safe_for_unpickling__);
INIT_STR(append);
INIT_STR(read);
INIT_STR(readline);
INIT_STR(copy_reg);
INIT_STR(dispatch_table);
- INIT_STR(safe_constructors);
INIT_STR(__basicnew__);
if (!( copy_reg = PyImport_ImportModule("copy_reg")))
return -1;
- /* These next few are special because we want to use different
- ones in restricted mode. */
+ /* This is special because we want to use a different
+ one in restricted mode. */
dispatch_table = PyObject_GetAttr(copy_reg, dispatch_table_str);
if (!dispatch_table)
return -1;
- if (!( safe_constructors = PyObject_GetAttr(copy_reg,
- safe_constructors_str)))
- return -1;
-
Py_DECREF(copy_reg);
/* Down to here ********************************** */
diff --git a/Modules/datetimemodule.c b/Modules/datetimemodule.c
index c149d1c..054ddd4 100644
--- a/Modules/datetimemodule.c
+++ b/Modules/datetimemodule.c
@@ -4516,13 +4516,6 @@ initdatetime(void)
PyObject *d; /* its dict */
PyObject *x;
- /* Types that use __reduce__ for pickling need to set the following
- * magical attr in the type dict, with a true value.
- */
- PyObject *safepickle = PyString_FromString("__safe_for_unpickling__");
- if (safepickle == NULL)
- return;
-
m = Py_InitModule3("datetime", module_methods,
"Fast implementation of the datetime type.");
@@ -4577,18 +4570,9 @@ initdatetime(void)
}
}
- /* tzinfo values */
- d = PyDateTime_TZInfoType.tp_dict;
-
- if (PyDict_SetItem(d, safepickle, Py_True) < 0)
- return;
-
/* timedelta values */
d = PyDateTime_DeltaType.tp_dict;
- if (PyDict_SetItem(d, safepickle, Py_True) < 0)
- return;
-
x = new_delta(0, 0, 1, 0);
if (x == NULL || PyDict_SetItemString(d, "resolution", x) < 0)
return;
@@ -4607,9 +4591,6 @@ initdatetime(void)
/* date values */
d = PyDateTime_DateType.tp_dict;
- if (PyDict_SetItem(d, safepickle, Py_True) < 0)
- return;
-
x = new_date(1, 1, 1);
if (x == NULL || PyDict_SetItemString(d, "min", x) < 0)
return;
@@ -4628,9 +4609,6 @@ initdatetime(void)
/* time values */
d = PyDateTime_TimeType.tp_dict;
- if (PyDict_SetItem(d, safepickle, Py_True) < 0)
- return;
-
x = new_time(0, 0, 0, 0, Py_None);
if (x == NULL || PyDict_SetItemString(d, "min", x) < 0)
return;
@@ -4649,9 +4627,6 @@ initdatetime(void)
/* datetime values */
d = PyDateTime_DateTimeType.tp_dict;
- if (PyDict_SetItem(d, safepickle, Py_True) < 0)
- return;
-
x = new_datetime(1, 1, 1, 0, 0, 0, 0, Py_None);
if (x == NULL || PyDict_SetItemString(d, "min", x) < 0)
return;
@@ -4667,8 +4642,6 @@ initdatetime(void)
return;
Py_DECREF(x);
- Py_DECREF(safepickle);
-
/* module initialization */
PyModule_AddIntConstant(m, "MINYEAR", MINYEAR);
PyModule_AddIntConstant(m, "MAXYEAR", MAXYEAR);
diff --git a/Objects/structseq.c b/Objects/structseq.c
index effe360..603477f 100644
--- a/Objects/structseq.c
+++ b/Objects/structseq.c
@@ -392,5 +392,4 @@ PyStructSequence_InitType(PyTypeObject *type, PyStructSequence_Desc *desc)
PyInt_FromLong((long) n_members));
PyDict_SetItemString(dict, unnamed_fields_key,
PyInt_FromLong((long) n_unnamed_members));
- PyDict_SetItemString(dict, "__safe_for_unpickling__", Py_True);
}