Skip to content

Commit 814b07b

Browse files
authored
[3.9] bpo-41052: Opt out serialization/deserialization for _random.Random (GH-21002). (GH-21030)
(cherry picked from commit 6989af0) Co-authored-by: Dong-hee Na <[email protected]>
1 parent 71bb921 commit 814b07b

File tree

4 files changed

+47
-1
lines changed

4 files changed

+47
-1
lines changed

Lib/test/test_random.py

+10
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import time
66
import pickle
77
import warnings
8+
import test.support
9+
810
from functools import partial
911
from math import log, exp, pi, fsum, sin, factorial
1012
from test import support
@@ -372,6 +374,14 @@ def test_pickling(self):
372374
restoredseq = [newgen.random() for i in range(10)]
373375
self.assertEqual(origseq, restoredseq)
374376

377+
@test.support.cpython_only
378+
def test_bug_41052(self):
379+
# _random.Random should not be allowed to serialization
380+
import _random
381+
for proto in range(pickle.HIGHEST_PROTOCOL + 1):
382+
r = _random.Random()
383+
self.assertRaises(TypeError, pickle.dumps, r, proto)
384+
375385
def test_bug_1727780(self):
376386
# verify that version-2-pickles can be loaded
377387
# fine, whether they are created on 32-bit or 64-bit
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Opt out serialization/deserialization for _random.Random

Modules/_randommodule.c

+18
Original file line numberDiff line numberDiff line change
@@ -536,12 +536,30 @@ random_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
536536
return (PyObject *)self;
537537
}
538538

539+
540+
/*[clinic input]
541+
542+
_random.Random.__reduce__
543+
544+
[clinic start generated code]*/
545+
546+
static PyObject *
547+
_random_Random___reduce___impl(RandomObject *self)
548+
/*[clinic end generated code: output=ddea0dcdb60ffd6d input=bd38ec35fd157e0f]*/
549+
{
550+
PyErr_Format(PyExc_TypeError,
551+
"cannot pickle %s object",
552+
Py_TYPE(self)->tp_name);
553+
return NULL;
554+
}
555+
539556
static PyMethodDef random_methods[] = {
540557
_RANDOM_RANDOM_RANDOM_METHODDEF
541558
_RANDOM_RANDOM_SEED_METHODDEF
542559
_RANDOM_RANDOM_GETSTATE_METHODDEF
543560
_RANDOM_RANDOM_SETSTATE_METHODDEF
544561
_RANDOM_RANDOM_GETRANDBITS_METHODDEF
562+
_RANDOM_RANDOM___REDUCE___METHODDEF
545563
{NULL, NULL} /* sentinel */
546564
};
547565

Modules/clinic/_randommodule.c.h

+18-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)