mirror of
https://github.com/python/cpython.git
synced 2025-08-02 16:13:13 +00:00
[3.9] bpo-41052: Opt out serialization/deserialization for _random.Random (GH-21002). (GH-21030)
(cherry picked from commit 6989af0bc7
)
Co-authored-by: Dong-hee Na <donghee.na92@gmail.com>
This commit is contained in:
parent
71bb921829
commit
814b07bf81
4 changed files with 47 additions and 1 deletions
|
@ -5,6 +5,8 @@ import os
|
||||||
import time
|
import time
|
||||||
import pickle
|
import pickle
|
||||||
import warnings
|
import warnings
|
||||||
|
import test.support
|
||||||
|
|
||||||
from functools import partial
|
from functools import partial
|
||||||
from math import log, exp, pi, fsum, sin, factorial
|
from math import log, exp, pi, fsum, sin, factorial
|
||||||
from test import support
|
from test import support
|
||||||
|
@ -372,6 +374,14 @@ class TestBasicOps:
|
||||||
restoredseq = [newgen.random() for i in range(10)]
|
restoredseq = [newgen.random() for i in range(10)]
|
||||||
self.assertEqual(origseq, restoredseq)
|
self.assertEqual(origseq, restoredseq)
|
||||||
|
|
||||||
|
@test.support.cpython_only
|
||||||
|
def test_bug_41052(self):
|
||||||
|
# _random.Random should not be allowed to serialization
|
||||||
|
import _random
|
||||||
|
for proto in range(pickle.HIGHEST_PROTOCOL + 1):
|
||||||
|
r = _random.Random()
|
||||||
|
self.assertRaises(TypeError, pickle.dumps, r, proto)
|
||||||
|
|
||||||
def test_bug_1727780(self):
|
def test_bug_1727780(self):
|
||||||
# verify that version-2-pickles can be loaded
|
# verify that version-2-pickles can be loaded
|
||||||
# fine, whether they are created on 32-bit or 64-bit
|
# fine, whether they are created on 32-bit or 64-bit
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Opt out serialization/deserialization for _random.Random
|
|
@ -536,12 +536,30 @@ random_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
||||||
return (PyObject *)self;
|
return (PyObject *)self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*[clinic input]
|
||||||
|
|
||||||
|
_random.Random.__reduce__
|
||||||
|
|
||||||
|
[clinic start generated code]*/
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
_random_Random___reduce___impl(RandomObject *self)
|
||||||
|
/*[clinic end generated code: output=ddea0dcdb60ffd6d input=bd38ec35fd157e0f]*/
|
||||||
|
{
|
||||||
|
PyErr_Format(PyExc_TypeError,
|
||||||
|
"cannot pickle %s object",
|
||||||
|
Py_TYPE(self)->tp_name);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static PyMethodDef random_methods[] = {
|
static PyMethodDef random_methods[] = {
|
||||||
_RANDOM_RANDOM_RANDOM_METHODDEF
|
_RANDOM_RANDOM_RANDOM_METHODDEF
|
||||||
_RANDOM_RANDOM_SEED_METHODDEF
|
_RANDOM_RANDOM_SEED_METHODDEF
|
||||||
_RANDOM_RANDOM_GETSTATE_METHODDEF
|
_RANDOM_RANDOM_GETSTATE_METHODDEF
|
||||||
_RANDOM_RANDOM_SETSTATE_METHODDEF
|
_RANDOM_RANDOM_SETSTATE_METHODDEF
|
||||||
_RANDOM_RANDOM_GETRANDBITS_METHODDEF
|
_RANDOM_RANDOM_GETRANDBITS_METHODDEF
|
||||||
|
_RANDOM_RANDOM___REDUCE___METHODDEF
|
||||||
{NULL, NULL} /* sentinel */
|
{NULL, NULL} /* sentinel */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
19
Modules/clinic/_randommodule.c.h
generated
19
Modules/clinic/_randommodule.c.h
generated
|
@ -114,4 +114,21 @@ _random_Random_getrandbits(RandomObject *self, PyObject *arg)
|
||||||
exit:
|
exit:
|
||||||
return return_value;
|
return return_value;
|
||||||
}
|
}
|
||||||
/*[clinic end generated code: output=a7feb0c9c8d1b627 input=a9049054013a1b77]*/
|
|
||||||
|
PyDoc_STRVAR(_random_Random___reduce____doc__,
|
||||||
|
"__reduce__($self, /)\n"
|
||||||
|
"--\n"
|
||||||
|
"\n");
|
||||||
|
|
||||||
|
#define _RANDOM_RANDOM___REDUCE___METHODDEF \
|
||||||
|
{"__reduce__", (PyCFunction)_random_Random___reduce__, METH_NOARGS, _random_Random___reduce____doc__},
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
_random_Random___reduce___impl(RandomObject *self);
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
_random_Random___reduce__(RandomObject *self, PyObject *Py_UNUSED(ignored))
|
||||||
|
{
|
||||||
|
return _random_Random___reduce___impl(self);
|
||||||
|
}
|
||||||
|
/*[clinic end generated code: output=d8a99be3f1192219 input=a9049054013a1b77]*/
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue