changeset 1688:1e4b0f1f9252

include important bugfix patch for package exiv2
author Volker Grabsch <vog@notjusthosting.com>
date Fri, 25 Mar 2011 18:20:33 +0100
parents 795aba5b9440
children 5cb2cefa4cc8
files src/exiv2-r2469.patch
diffstat 1 files changed, 79 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /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<long>(resourceSize - readTotal) < lbuf.size_
+-                             ? static_cast<long>(resourceSize - readTotal) : lbuf.size_;
++                while (readTotal < pResourceSize) {
++                    toRead =   static_cast<long>(pResourceSize - readTotal) < lbuf.size_
++                             ? static_cast<long>(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