]> granicus.if.org Git - python/commitdiff
Removed all uses of the out-of-favor __safe_for_unpickling__ magic
authorTim Peters <tim.peters@gmail.com>
Sat, 1 Feb 2003 02:16:37 +0000 (02:16 +0000)
committerTim Peters <tim.peters@gmail.com>
Sat, 1 Feb 2003 02:16:37 +0000 (02:16 +0000)
attr, and copy_reg.safe_constructors.

Lib/copy_reg.py
Lib/test/pickletester.py
Modules/cPickle.c
Modules/datetimemodule.c
Objects/structseq.c

index cf801cb584d7d0f3e221b8f089497bde707c8d44..2bff142b57e894706b94917c92e27a69d7a761c9 100644 (file)
@@ -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
 
index ed0e436be3025fc093023f5b9f10b73579b71315..8211dcf58cf3ee395d0822d5205618d6fee1f894 100644 (file)
@@ -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
index 08bb8e8b2d90e5a763bb4f2822fd00d0115ef2a5..07d108914d6bd4fc2106ef30ede12c61e6fe3b8e 100644 (file)
@@ -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 ********************************** */
index c149d1cc601a17e2eefc9508fae4ecf4c6584b96..054ddd444592a5a189641e8ba49279afbe986f17 100644 (file)
@@ -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);
index effe360c1ee82bc24ec202da126908f85544f0d3..603477f594e87e9e5933ca4204cef15eda4a24fe 100644 (file)
@@ -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);
 }