|
|
|
@ -501,7 +501,20 @@ namespace Exiv2 {
|
|
|
|
|
}
|
|
|
|
|
else if (!memcmp(cheaderBuf.pData_ + 4, "iCCP", 4))
|
|
|
|
|
{
|
|
|
|
|
zlibToDataBuf(cdataBuf.pData_ +12+1,dataOffset-13,iccProfile_); // +1 = 'compressed' flag
|
|
|
|
|
// The ICC profile name can vary from 1-79 characters.
|
|
|
|
|
uint32_t iccOffset = 0;
|
|
|
|
|
while (iccOffset < 80 && iccOffset < dataOffset) {
|
|
|
|
|
|
|
|
|
|
const byte* profileName = cdataBuf.pData_ + iccOffset;
|
|
|
|
|
++iccOffset;
|
|
|
|
|
|
|
|
|
|
if (*profileName == 0x00)
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
++iccOffset; // +1 = 'compressed' flag
|
|
|
|
|
|
|
|
|
|
zlibToDataBuf(cdataBuf.pData_ +iccOffset,dataOffset-iccOffset,iccProfile_);
|
|
|
|
|
#ifdef DEBUG
|
|
|
|
|
std::cout << "Exiv2::PngImage::readMetadata: Found iCCP chunk length: " << dataOffset << std::endl;
|
|
|
|
|
std::cout << "Exiv2::PngImage::readMetadata: iccProfile.size_ : " << iccProfile_.size_ << std::endl;
|
|
|
|
@ -662,6 +675,7 @@ namespace Exiv2 {
|
|
|
|
|
|
|
|
|
|
// calculate CRC
|
|
|
|
|
uLong tmp = crc32(0L, Z_NULL, 0);
|
|
|
|
|
tmp = crc32(tmp, (const Bytef*)type ,typeLen);
|
|
|
|
|
tmp = crc32(tmp, (const Bytef*)header ,headerLen);
|
|
|
|
|
tmp = crc32(tmp, (const Bytef*)compressed.pData_,compressed.size_);
|
|
|
|
|
byte crc[4];
|
|
|
|
|