#1108. Fixed issue with printing short strings which are stored in the directory offset field.

This commit is contained in:
Robin Mills 2016-04-22 14:11:09 +00:00
parent f02b94a6b4
commit 58c5ffdedc
2 changed files with 4 additions and 3 deletions

View File

@ -414,6 +414,7 @@ namespace Exiv2 {
return type == Exiv2::asciiString
|| type == Exiv2::unsignedByte
|| type == Exiv2::signedByte
|| type == Exiv2::undefined
;
}
static bool isShortType(uint16_t type) {
@ -524,13 +525,13 @@ namespace Exiv2 {
// 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 ) { // data is in the directory => read into buffer
if ( (isStringType(type) && count*size > 4) || 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 to the buffer
std::memcpy(buf.pData_,dir.pData_+8,12);
} 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 ;

Binary file not shown.