Issue #14815: Bugfix: the PyLong fed into the seed generator must be unsigned.
This commit is contained in:
parent
50c4000685
commit
d60cd4295c
|
@ -228,16 +228,17 @@ random_seed(RandomObject *self, PyObject *args)
|
|||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
/* If the arg is an int or long, use its absolute value; else use
|
||||
* the absolute value of its hash code.
|
||||
/* This algorithm relies on the number being unsigned.
|
||||
* So: if the arg is a PyLong, use its absolute value.
|
||||
* Otherwise use its hash value, cast to unsigned.
|
||||
*/
|
||||
if (PyLong_Check(arg))
|
||||
n = PyNumber_Absolute(arg);
|
||||
else {
|
||||
Py_ssize_t hash = PyObject_Hash(arg);
|
||||
Py_hash_t hash = PyObject_Hash(arg);
|
||||
if (hash == -1)
|
||||
goto Done;
|
||||
n = PyLong_FromSsize_t(hash);
|
||||
n = PyLong_FromSize_t((size_t)hash);
|
||||
}
|
||||
if (n == NULL)
|
||||
goto Done;
|
||||
|
|
Loading…
Reference in New Issue