# HG changeset patch # User Volker Grabsch # Date 1301073633 -3600 # Node ID 1e4b0f1f9252157b6fcdd2a99917784a4a28e8b8 # Parent 795aba5b9440e2b6090cd1222b198f360c26c932 include important bugfix patch for package exiv2 diff -r 795aba5b9440 -r 1e4b0f1f9252 src/exiv2-r2469.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/exiv2-r2469.patch Fri Mar 25 18:20:33 2011 +0100 @@ -0,0 +1,79 @@ +# This file is part of mingw-cross-env. +# See doc/index.html for further information. + +This patch has been taken from: +http://dev.exiv2.org/issues/764 + +Index: trunk/src/psdimage.cpp +=================================================================== +--- trunk/src/psdimage.cpp (revision 2468) ++++ trunk/src/psdimage.cpp (revision 2469) +@@ -400,7 +400,7 @@ + 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 @@ + 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 @@ + 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 @@ + 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 @@ + + 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 @@ + 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