diff --git a/src/jpgimage.cpp b/src/jpgimage.cpp index a80095b0..cf8b2a30 100644 --- a/src/jpgimage.cpp +++ b/src/jpgimage.cpp @@ -465,22 +465,24 @@ namespace Exiv2 { } int chunk = (int) buf.pData_[2+12]; int chunks = (int) buf.pData_[2+13]; -#ifdef DEBUG // ICC1v43_2010-12.pdf header is 14 bytes // header = "ICC_PROFILE\0" (12 bytes) // chunk/chunks are a single byte // Spec 7.2 Profile bytes 0-3 size uint32_t s = getULong(buf.pData_ + (2+14) , bigEndian); +//#ifdef DEBUG std::cerr << "Found ICC Profile chunk " << chunk << " of " << chunks << (chunk==1 ? " size: " : "" ) << (chunk==1 ? s : 0) << std::endl ; -#endif +//#endif io_->seek(-bufRead, BasicIo::cur); // back up to start of buffer (after marker) io_->seek( 14+2, BasicIo::cur); // step header // read in profile - DataBuf icc(size-2-14) ; + // #1286 profile can be padded + DataBuf icc((chunk==1&&chunks==1)?s:size-2-14); + if ( icc.size_ > size-2-14) throw Error(53); io_->read( icc.pData_,icc.size_); if ( !iccProfileDefined() ) { // first block of profile