aboutsummaryrefslogtreecommitdiff
path: root/std/os.zig
diff options
context:
space:
mode:
authorEuan Torano <euantorano@gmail.com>2019-08-02 13:19:49 +0100
committerEuan Torano <euantorano@gmail.com>2019-08-02 13:19:49 +0100
commitc0c228b758150e017185dc280ef020ec3b7efdcf (patch)
tree5983981ffd565f03269941a2d37a2047afb06eae /std/os.zig
parent6cb4cac5cd1c68f41c62a3c23b09513988337c8d (diff)
downloadzig-c0c228b758150e017185dc280ef020ec3b7efdcf.tar.gz
zig-c0c228b758150e017185dc280ef020ec3b7efdcf.zip
Check if /dev/urandom is a character device
Diffstat (limited to 'std/os.zig')
-rw-r--r--std/os.zig5
1 files changed, 5 insertions, 0 deletions
diff --git a/std/os.zig b/std/os.zig
index 9ff2e8f87f..da1d71d6fc 100644
--- a/std/os.zig
+++ b/std/os.zig
@@ -133,6 +133,11 @@ fn getRandomBytesDevURandom(buf: []u8) !void {
const fd = try openC(c"/dev/urandom", O_RDONLY | O_CLOEXEC, 0);
defer close(fd);
+ const st = try fstat(fd);
+ if (!S_ISCHR(st.mode)) {
+ return OpenError.Unexpected;
+ }
+
const stream = &std.fs.File.openHandle(fd).inStream().stream;
stream.readNoEof(buf) catch return error.Unexpected;
}