Browse Source

Issue #14815: Bugfix: the PyLong fed into the seed generator must be unsigned.

pull/2332/head
Larry Hastings 14 years ago
parent
commit
d60cd4295c
  1. 9
      Modules/_randommodule.c

9
Modules/_randommodule.c

@ -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…
Cancel
Save