[Python-checkins] bpo-38075: Fix random_seed(): use PyObject_CallOneArg() (GH-18897)
Victor Stinner
webhook-mailer at python.org
Tue Mar 10 10:15:36 EDT 2020
https://github.com/python/cpython/commit/00d7cd8ab8db2c1e1f591ade828f88a1a973d70f
commit: 00d7cd8ab8db2c1e1f591ade828f88a1a973d70f
branch: master
author: Victor Stinner <vstinner at python.org>
committer: GitHub <noreply at github.com>
date: 2020-03-10T15:15:14+01:00
summary:
bpo-38075: Fix random_seed(): use PyObject_CallOneArg() (GH-18897)
Fix the random.Random.seed() method when a bool is passed as the
seed.
PyObject_Vectorcall() was misused: use PyObject_CallOneArg() instead.
files:
A Misc/NEWS.d/next/Library/2020-03-10-12-52-06.bpo-38075.qbESAF.rst
M Lib/test/test_random.py
M Modules/_randommodule.c
diff --git a/Lib/test/test_random.py b/Lib/test/test_random.py
index 2c8c8e885452a..c147105376199 100644
--- a/Lib/test/test_random.py
+++ b/Lib/test/test_random.py
@@ -42,7 +42,7 @@ class MySeed(object):
def __hash__(self):
return -1729
for arg in [None, 0, 1, -1, 10**20, -(10**20),
- 3.14, 'a']:
+ False, True, 3.14, 'a']:
self.gen.seed(arg)
for arg in [1+2j, tuple('abc'), MySeed()]:
diff --git a/Misc/NEWS.d/next/Library/2020-03-10-12-52-06.bpo-38075.qbESAF.rst b/Misc/NEWS.d/next/Library/2020-03-10-12-52-06.bpo-38075.qbESAF.rst
new file mode 100644
index 0000000000000..df52fcc275b0a
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-03-10-12-52-06.bpo-38075.qbESAF.rst
@@ -0,0 +1,2 @@
+Fix the :meth:`random.Random.seed` method when a :class:`bool` is passed as the
+seed.
diff --git a/Modules/_randommodule.c b/Modules/_randommodule.c
index f0fdb0382c5d3..7a8871868e639 100644
--- a/Modules/_randommodule.c
+++ b/Modules/_randommodule.c
@@ -264,7 +264,6 @@ random_seed(RandomObject *self, PyObject *arg)
uint32_t *key = NULL;
size_t bits, keyused;
int res;
- PyObject *args[1];
if (arg == NULL || arg == Py_None) {
if (random_seed_urandom(self) < 0) {
@@ -286,9 +285,7 @@ random_seed(RandomObject *self, PyObject *arg)
} else if (PyLong_Check(arg)) {
/* Calling int.__abs__() prevents calling arg.__abs__(), which might
return an invalid value. See issue #31478. */
- args[0] = arg;
- n = PyObject_Vectorcall(_randomstate_global->Long___abs__, args, 0,
- NULL);
+ n = PyObject_CallOneArg(_randomstate_global->Long___abs__, arg);
}
else {
Py_hash_t hash = PyObject_Hash(arg);
More information about the Python-checkins
mailing list