--- a/src/tiffimage.cpp +++ b/src/tiffimage.cpp @@ -171,11 +171,15 @@ #ifdef DEBUG std::cerr << "Reading TIFF file " << io_->path() << "\n"; #endif - if (io_->open() != 0) throw Error(9, io_->path(), strError()); + if (io_->open() != 0) { + throw Error(kerDataSourceOpenFailed, io_->path(), strError()); + } + IoCloser closer(*io_); // Ensure that this is the correct image type if (!isTiffType(*io_, false)) { - if (io_->error() || io_->eof()) throw Error(14); + if (io_->error() || io_->eof()) + throw Error(kerFailedToReadImageData); throw Error(3, "TIFF"); } clearMetadata(); @@ -190,12 +194,16 @@ // read profile from the metadata Exiv2::ExifKey key("Exif.Image.InterColorProfile"); Exiv2::ExifData::iterator pos = exifData_.findKey(key); - if ( pos != exifData_.end() ) { - iccProfile_.alloc(pos->count()*pos->typeSize()); + if ( pos != exifData_.end() ) { + long size = pos->count() * pos->typeSize(); + if (size == 0) { + throw Error(kerFailedToReadImageData); + } + iccProfile_.alloc(size); pos->copy(iccProfile_.pData_,bo); } - } // TiffImage::readMetadata + } void TiffImage::writeMetadata() {