Fixed potential out of bounds file access

This commit adds a out-of-bounds protection in the case that the
extracted values for offset & count are summed up larger than the size
of the file. Also this function checks for overflows before performing
the addition.

This fixes #159
v0.27.3
Dan Čermák 8 years ago
parent f641f39ab9
commit 36df4bc997

@ -73,6 +73,7 @@ EXIV2_RCSID("@(#) $Id$")
#include <cstring>
#include <cassert>
#include <iostream>
#include <limits>
#include <sys/types.h>
#include <sys/stat.h>
@ -459,6 +460,12 @@ namespace Exiv2 {
io.seek(restore,BasicIo::beg);
}
} else if ( option == kpsRecursive && tag == 0x83bb /* IPTCNAA */ ) {
if (offset > std::numeric_limits<uint32_t>::max() - count) {
throw Error(59);
}
if (static_cast<size_t>(offset + count) > io.size()) {
throw Error(58);
}
size_t restore = io.tell(); // save
io.seek(offset,BasicIo::beg); // position
byte* bytes=new byte[count] ; // allocate memory

Loading…
Cancel
Save