From d1f2e0128c6f5daa01770b0989c66285f1284985 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Thu, 24 Jan 2019 22:21:02 +0000 Subject: Check return value of fread in File::File. --- src/file.cc | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/file.cc b/src/file.cc index 6fe4b299..ce7a4c5e 100644 --- a/src/file.cc +++ b/src/file.cc @@ -38,6 +38,7 @@ #include "file.h" #include "util.h" #include "dcp_assert.h" +#include "compose.hpp" #include using namespace dcp; @@ -51,7 +52,16 @@ File::File (boost::filesystem::path file) _data = new uint8_t[_size]; FILE* f = dcp::fopen_boost (file, "rb"); DCP_ASSERT (f); - fread (_data, 1, _size, f); + int const N = fread (_data, 1, _size, f); + if (N != _size) { + if (ferror(f)) { + fclose (f); + throw FileError (String::compose("fread error %1", errno), file, errno); + } else { + fclose (f); + throw FileError ("unexpected short read", file, -1); + } + } fclose (f); } -- cgit v1.2.3