mirror of https://github.com/python/cpython
win32_urandom(): There's no need to copy the generated byte string, so
don't.
This commit is contained in:
parent
9b279a8df4
commit
d311538a93
|
@ -7239,9 +7239,8 @@ static HCRYPTPROV hCryptProv = 0;
|
||||||
static PyObject*
|
static PyObject*
|
||||||
win32_urandom(PyObject *self, PyObject *args)
|
win32_urandom(PyObject *self, PyObject *args)
|
||||||
{
|
{
|
||||||
int howMany = 0;
|
int howMany;
|
||||||
unsigned char* bytes = NULL;
|
PyObject* result;
|
||||||
PyObject* returnVal = NULL;
|
|
||||||
|
|
||||||
/* Read arguments */
|
/* Read arguments */
|
||||||
if (! PyArg_ParseTuple(args, "i:urandom", &howMany))
|
if (! PyArg_ParseTuple(args, "i:urandom", &howMany))
|
||||||
|
@ -7282,21 +7281,16 @@ win32_urandom(PyObject *self, PyObject *args)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Allocate bytes */
|
/* Allocate bytes */
|
||||||
bytes = (unsigned char*)PyMem_Malloc(howMany);
|
result = PyString_FromStringAndSize(NULL, howMany);
|
||||||
if (bytes == NULL)
|
if (result != NULL) {
|
||||||
return PyErr_NoMemory();
|
/* Get random data */
|
||||||
|
if (! pCryptGenRandom(hCryptProv, howMany, (unsigned char*)
|
||||||
/* Get random data */
|
PyString_AS_STRING(result))) {
|
||||||
if (! pCryptGenRandom(hCryptProv, howMany, bytes)) {
|
Py_DECREF(result);
|
||||||
PyMem_Free(bytes);
|
return win32_error("CryptGenRandom", NULL);
|
||||||
return win32_error("CryptGenRandom", NULL);
|
}
|
||||||
}
|
}
|
||||||
|
return result;
|
||||||
/* Build return value */
|
|
||||||
returnVal = PyString_FromStringAndSize(bytes, howMany);
|
|
||||||
PyMem_Free(bytes);
|
|
||||||
|
|
||||||
return returnVal;
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue