From 853fa64d4d2c9660c237cf6a3525da12402a1e5b Mon Sep 17 00:00:00 2001 From: Andreas Huggel Date: Sun, 28 Jun 2009 15:24:16 +0000 Subject: [PATCH] 533: Applied patch 2_read_and_modify_only_the_first_XMP_segment (Michael Ulbrich, Volker Grabsch) --- src/jpgimage.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/jpgimage.cpp b/src/jpgimage.cpp index 75f4dabd..f4ed6790 100644 --- a/src/jpgimage.cpp +++ b/src/jpgimage.cpp @@ -284,6 +284,7 @@ namespace Exiv2 { Blob iptcBlob; bool foundPsData = false; bool foundExifData = false; + bool foundXmpData = false; // Read section marker int marker = advanceToMarker(); @@ -328,7 +329,8 @@ namespace Exiv2 { --search; foundExifData = true; } - else if (marker == app1_ && memcmp(buf.pData_ + 2, xmpId_, 29) == 0) { + else if ( !foundXmpData + && marker == app1_ && memcmp(buf.pData_ + 2, xmpId_, 29) == 0) { if (size < 31) { rc = 6; break; @@ -345,6 +347,7 @@ namespace Exiv2 { #endif } --search; + foundXmpData = true; } else if ( marker == app13_ && memcmp(buf.pData_ + 2, Photoshop::ps3Id_, 14) == 0) { @@ -526,7 +529,8 @@ namespace Exiv2 { io_->read(rawExif.pData_, rawExif.size_); if (io_->error() || io_->eof()) throw Error(22); } - else if (marker == app1_ && memcmp(buf.pData_ + 2, xmpId_, 29) == 0) { + else if ( skipApp1Xmp == -1 + && marker == app1_ && memcmp(buf.pData_ + 2, xmpId_, 29) == 0) { if (size < 31) throw Error(22); skipApp1Xmp = count; ++search;