win32_urandom(): There's no need to copy the generated byte string, so

don't.
This commit is contained in:
Tim Peters 2004-08-30 17:36:46 +00:00
parent 9b279a8df4
commit d311538a93
1 changed files with 11 additions and 17 deletions

View File

@ -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