torcontrol: Check for reading errors in ReadBinaryFile

This ensures that ReadBinaryFile never returns exactly TOR_COOKIE_SIZE bytes if
the file was larger than that.
This commit is contained in:
Jack Grigg 2017-03-26 13:53:13 +13:00
parent d63677bbb2
commit 0b6f40d4ca
No known key found for this signature in database
GPG key ID: 665DBCD284F7DAFF

View file

@ -330,6 +330,10 @@ static std::pair<bool,std::string> ReadBinaryFile(const fs::path &filename, size
char buffer[128]; char buffer[128];
size_t n; size_t n;
while ((n=fread(buffer, 1, sizeof(buffer), f)) > 0) { while ((n=fread(buffer, 1, sizeof(buffer), f)) > 0) {
// Check for reading errors so we don't return any data if we couldn't
// read the entire file (or up to maxsize)
if (ferror(f))
return std::make_pair(false,"");
retval.append(buffer, buffer+n); retval.append(buffer, buffer+n);
if (retval.size() > maxsize) if (retval.size() > maxsize)
break; break;