Skip to content

Commit

Permalink
Work around possible problem when recreating Exif object
Browse files Browse the repository at this point in the history
  • Loading branch information
c0xc authored and novomesk committed Oct 7, 2022
1 parent 67022f5 commit 5aa9c66
Showing 1 changed file with 15 additions and 8 deletions.
23 changes: 15 additions & 8 deletions ImageLounge/src/DkCore/DkMetaData.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -61,17 +61,23 @@ QSharedPointer<DkMetaDataT> DkMetaDataT::copy() const {

//Copy Exiv2::Image object
QSharedPointer<DkMetaDataT> metaDataN(new DkMetaDataT());
metaDataN->mFilePath = mFilePath;
metaDataN->mExifState = mExifState;

if (mExifImg.get() != 0) {
metaDataN->mFilePath = mFilePath;
//Load new Exiv2::Image object
int i_type = mExifImg->imageType();
metaDataN->mExifImg = Exiv2::ImageFactory::create(i_type);
//Copy exif data from old object into new object
Exiv2::ExifData data = mExifImg->exifData();
metaDataN->mExifImg->setExifData(data); //explicit copy of list<Exifdatum>
metaDataN->mExifState = dirty;
//ImageFactory::create(type) may crash even if old Image object has that type
try {
//Load new Exiv2::Image object
int i_type = mExifImg->imageType();
metaDataN->mExifImg = Exiv2::ImageFactory::create(i_type);
//Copy exif data from old object into new object
Exiv2::ExifData data = mExifImg->exifData();
metaDataN->mExifImg->setExifData(data); //explicit copy of list<Exifdatum>
metaDataN->mExifState = dirty;
}
catch (...) {
metaDataN->mExifState = no_data;
}
}

return metaDataN;
Expand Down Expand Up @@ -119,6 +125,7 @@ void DkMetaDataT::readMetaData(const QString& filePath, QSharedPointer<QByteArra
// TODO: check crashes here
mExifState = no_data;
//qDebug() << "[Exiv2] could not open file for exif data";
qInfo() << "[Exiv2] could not load Exif data from file:" << filePath;
return;
}

Expand Down

0 comments on commit 5aa9c66

Please sign in to comment.