summaryrefslogtreecommitdiffstats
path: root/Python/random.c
diff options
context:
space:
mode:
Diffstat (limited to 'Python/random.c')
-rw-r--r--Python/random.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/Python/random.c b/Python/random.c
index 9b42d54..839d7ad 100644
--- a/Python/random.c
+++ b/Python/random.c
@@ -131,16 +131,23 @@ py_getrandom(void *buffer, Py_ssize_t size, int raise)
return 0;
while (0 < size) {
- errno = 0;
+#ifdef sun
+ /* Issue #26735: On Solaris, getrandom() is limited to returning up
+ to 1024 bytes */
+ n = Py_MIN(size, 1024);
+#else
+ n = size;
+#endif
+ errno = 0;
#ifdef HAVE_GETRANDOM
if (raise) {
Py_BEGIN_ALLOW_THREADS
- n = getrandom(buffer, size, flags);
+ n = getrandom(buffer, n, flags);
Py_END_ALLOW_THREADS
}
else {
- n = getrandom(buffer, size, flags);
+ n = getrandom(buffer, n, flags);
}
#else
/* On Linux, use the syscall() function because the GNU libc doesn't
@@ -148,11 +155,11 @@ py_getrandom(void *buffer, Py_ssize_t size, int raise)
* 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, n, flags);
Py_END_ALLOW_THREADS
}
else {
- n = syscall(SYS_getrandom, buffer, size, flags);
+ n = syscall(SYS_getrandom, buffer, n, flags);
}
#endif