# On Solaris, getrandom is limited to returning up to 1024 bytes --- old/Python/random.c Sun Dec 6 17:39:11 2015 +++ new/Python/random.c Sat Apr 2 13:54:14 2016 @@ -131,16 +131,23 @@ return 0; while (0 < size) { +#if defined(__sun__) + /* On Solaris, getrandom() is limited to returning up to 1024 bytes */ + Py_ssize_t len = Py_MIN(size, 1024); +#else + Py_ssize_t len = size; +#endif + errno = 0; #ifdef HAVE_GETRANDOM if (raise) { Py_BEGIN_ALLOW_THREADS - n = getrandom(buffer, size, flags); + n = getrandom(buffer, len, flags); Py_END_ALLOW_THREADS } else { - n = getrandom(buffer, size, flags); + n = getrandom(buffer, len, flags); } #else /* On Linux, use the syscall() function because the GNU libc doesn't @@ -148,11 +155,11 @@ * https://sourceware.org/bugzilla/show_bug.cgi?id=17252 */ if (raise) { Py_BEGIN_ALLOW_THREADS - n = syscall(SYS_getrandom, buffer, size, flags); + n = syscall(SYS_getrandom, buffer, len, flags); Py_END_ALLOW_THREADS } else { - n = syscall(SYS_getrandom, buffer, size, flags); + n = syscall(SYS_getrandom, buffer, len, flags); } #endif