diff --git a/src/psdimage.cpp b/src/psdimage.cpp index 550d44e1..5a39d7a9 100644 --- a/src/psdimage.cpp +++ b/src/psdimage.cpp @@ -400,7 +400,7 @@ namespace Exiv2 { uint32_t resourceType = getULong(buf, bigEndian); if (resourceType != kPhotoshopResourceType) { - break; // bad resource type + throw Error(3, "Photoshop"); // bad resource type } uint16_t resourceId = getUShort(buf + 4, bigEndian); uint32_t resourceNameLength = buf[6]; @@ -416,13 +416,13 @@ namespace Exiv2 { if (io_->read(buf, 4) != 4) throw Error(3, "Photoshop"); uint32_t resourceSize = getULong(buf, bigEndian); + uint32_t pResourceSize = (resourceSize + 1) & ~1; // padded resource size uint32_t curOffset = io_->tell(); // Write IPTC_NAA resource block if ((resourceId == kPhotoshopResourceID_IPTC_NAA || resourceId > kPhotoshopResourceID_IPTC_NAA) && iptcDone == false) { newResLength += writeIptcData(iptcData_, outIo); - resourceSize = (resourceSize + 1) & ~1; // adjust for padding iptcDone = true; } @@ -430,7 +430,6 @@ namespace Exiv2 { else if ((resourceId == kPhotoshopResourceID_ExifInfo || resourceId > kPhotoshopResourceID_ExifInfo) && exifDone == false) { newResLength += writeExifData(exifData_, outIo); - resourceSize = (resourceSize + 1) & ~1; // adjust for padding exifDone = true; } @@ -438,7 +437,6 @@ namespace Exiv2 { else if ((resourceId == kPhotoshopResourceID_XMPPacket || resourceId > kPhotoshopResourceID_XMPPacket) && xmpDone == false) { newResLength += writeXmpData(xmpData_, outIo); - resourceSize = (resourceSize + 1) & ~1; // adjust for padding xmpDone = true; } @@ -467,10 +465,9 @@ namespace Exiv2 { readTotal = 0; toRead = 0; - resourceSize = (resourceSize + 1) & ~1; // pad to even - while (readTotal < resourceSize) { - toRead = static_cast(resourceSize - readTotal) < lbuf.size_ - ? static_cast(resourceSize - readTotal) : lbuf.size_; + while (readTotal < pResourceSize) { + toRead = static_cast(pResourceSize - readTotal) < lbuf.size_ + ? static_cast(pResourceSize - readTotal) : lbuf.size_; if (io_->read(lbuf.pData_, toRead) != toRead) { throw Error(3, "Photoshop"); } @@ -478,11 +475,11 @@ namespace Exiv2 { if (outIo.write(lbuf.pData_, toRead) != toRead) throw Error(21); } if (outIo.error()) throw Error(21); - newResLength += resourceSize + adjResourceNameLen + 12; + newResLength += pResourceSize + adjResourceNameLen + 12; } - io_->seek(curOffset + resourceSize, BasicIo::beg); - oldResLength -= (12 + adjResourceNameLen + resourceSize); + io_->seek(curOffset + pResourceSize, BasicIo::beg); + oldResLength -= (12 + adjResourceNameLen + pResourceSize); } // Append IPTC_NAA resource block, if not yet written