|
|
|
@ -523,15 +523,14 @@ namespace Exiv2 {
|
|
|
|
|
: 1
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
// if ( offset > io.size() ) offset = 0; // Denial of service?
|
|
|
|
|
// if ( offset > io.size() ) offset = 0; // Denial of service?
|
|
|
|
|
DataBuf buf(MIN(size*kount + pad,48)); // allocate a buffer
|
|
|
|
|
if ( (isStringType(type) && count*size > 4) || count*size > 4 ) { // read into buffer
|
|
|
|
|
std::memcpy(buf.pData_,dir.pData_+8,4); // copy dir[8:11] into buffer (short strings)
|
|
|
|
|
if ( count*size > 4 ) { // read into buffer
|
|
|
|
|
size_t restore = io.tell(); // save
|
|
|
|
|
io.seek(offset,BasicIo::beg); // position
|
|
|
|
|
io.read(buf.pData_,kount*size);// read
|
|
|
|
|
io.seek(restore,BasicIo::beg); // restore
|
|
|
|
|
} else { // move data from directory into buffer
|
|
|
|
|
std::memcpy(buf.pData_,dir.pData_+8,4);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
uint32_t Offset = isLongType(type) ? byteSwap4(buf,0,bSwap) : 0 ;
|
|
|
|
|