Issue #3708: os.urandom no longer goes into an infinite loop when passed a
non-integer floating point number.
diff --git a/Lib/os.py b/Lib/os.py
index 715ff20..abbadc4 100644
--- a/Lib/os.py
+++ b/Lib/os.py
@@ -753,8 +753,10 @@
_urandomfd = open("/dev/urandom", O_RDONLY)
except (OSError, IOError):
raise NotImplementedError("/dev/urandom (or equivalent) not found")
- bytes = ""
- while len(bytes) < n:
- bytes += read(_urandomfd, n - len(bytes))
- close(_urandomfd)
- return bytes
+ try:
+ bs = b""
+ while n - len(bs) >= 1:
+ bs += read(_urandomfd, n - len(bs))
+ finally:
+ close(_urandomfd)
+ return bs