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
This commit is contained in:
Jonathan Wakely 2015-09-11 14:44:26 +01:00 committed by Jonathan Wakely
parent 1b741475ff
commit 42b6aad9ef
2 changed files with 13 additions and 4 deletions

View File

@ -1,3 +1,8 @@
2015-09-11 Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/65142
* src/c++11/random.cc (random_device::_M_getval()): Check read result.
2015-09-11 John Marino <gnugcc@marino.st>
Jonathan Wakely <jwakely@redhat.com>

View File

@ -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;
}