bpo-18407: win32_urandom() uses PY_DWORD_MAX (GH-10656)

CryptGenRandom() maximum size is PY_DWORD_MAX, not INT_MAX.
Use DWORD type for the 'chunk' variable

Co-Authored-By: Jeremy Kloth <jeremy.kloth@gmail.com>
This commit is contained in:
Victor Stinner 2018-11-22 14:43:07 +01:00 committed by GitHub
parent 28f468cb19
commit c48ff73dd6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -55,8 +55,6 @@ win32_urandom_init(int raise)
static int
win32_urandom(unsigned char *buffer, Py_ssize_t size, int raise)
{
Py_ssize_t chunk;
if (hCryptProv == 0)
{
if (win32_urandom_init(raise) == -1) {
@ -66,8 +64,8 @@ win32_urandom(unsigned char *buffer, Py_ssize_t size, int raise)
while (size > 0)
{
chunk = size > INT_MAX ? INT_MAX : size;
if (!CryptGenRandom(hCryptProv, (DWORD)chunk, buffer))
DWORD chunk = (DWORD)Py_MIN(size, PY_DWORD_MAX);
if (!CryptGenRandom(hCryptProv, chunk, buffer))
{
/* CryptGenRandom() failed */
if (raise) {