diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2015-09-11 14:44:26 +0100 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2015-09-11 14:44:26 +0100 |
commit | 42b6aad9ef7d70975b910e3f2835b03d5ae2d8bb (patch) | |
tree | bf41ef1879a653d9a02ae21f9e54237c82685b04 /libstdc++-v3/src | |
parent | 1b741475ffeaee73f6ebb4115386e84be41f3a8d (diff) | |
download | gcc-42b6aad9ef7d70975b910e3f2835b03d5ae2d8bb.zip gcc-42b6aad9ef7d70975b910e3f2835b03d5ae2d8bb.tar.gz gcc-42b6aad9ef7d70975b910e3f2835b03d5ae2d8bb.tar.bz2 |
Check read() result in std::random_device.
PR libstdc++/65142
* src/c++11/random.cc (random_device::_M_getval()): Check read result.
From-SVN: r227687
Diffstat (limited to 'libstdc++-v3/src')
-rw-r--r-- | libstdc++-v3/src/c++11/random.cc | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/libstdc++-v3/src/c++11/random.cc b/libstdc++-v3/src/c++11/random.cc index edf900f..1d102c7 100644 --- a/libstdc++-v3/src/c++11/random.cc +++ b/libstdc++-v3/src/c++11/random.cc @@ -130,13 +130,17 @@ namespace std _GLIBCXX_VISIBILITY(default) #endif result_type __ret; + #ifdef _GLIBCXX_HAVE_UNISTD_H - read(fileno(static_cast<FILE*>(_M_file)), - static_cast<void*>(&__ret), sizeof(result_type)); + auto e = read(fileno(static_cast<FILE*>(_M_file)), + static_cast<void*>(&__ret), sizeof(result_type)); #else - std::fread(static_cast<void*>(&__ret), sizeof(result_type), - 1, static_cast<FILE*>(_M_file)); + auto e = std::fread(static_cast<void*>(&__ret), sizeof(result_type), + 1, static_cast<FILE*>(_M_file)); #endif + if (e != sizeof(result_type)) + __throw_runtime_error(__N("random_device could not read enough bytes")); + return __ret; } |