[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [digikam] libs/dmetadata: try to fix crash while parsing Exif std tags list to populate Exif viewer
From: Gilles Caulier <null () kde ! org>
Date: 2017-01-31 19:07:23
Message-ID: E1cYdlz-0001EE-4c () code ! kde ! org
[Download RAW message or body]
Git commit d93eb848855e1d81f9c994a1414482f0bef0b47e by Gilles Caulier.
Committed on 31/01/2017 at 19:06.
Pushed by cgilles into branch 'master'.
try to fix crash while parsing Exif std tags list to populate Exif viewer filter from \
Setup dialog
CCBUGS: 375809
M +3 -2 libs/dmetadata/metaengine_comments.cpp
M +21 -8 libs/dmetadata/metaengine_exif.cpp
M +13 -12 libs/dmetadata/metaengine_gps.cpp
M +4 -4 libs/dmetadata/metaengine_iptc.cpp
M +4 -4 libs/dmetadata/metaengine_xmp.cpp
https://commits.kde.org/digikam/d93eb848855e1d81f9c994a1414482f0bef0b47e
diff --git a/libs/dmetadata/metaengine_comments.cpp \
b/libs/dmetadata/metaengine_comments.cpp index 63423d490f..ad210e8ca1 100644
--- a/libs/dmetadata/metaengine_comments.cpp
+++ b/libs/dmetadata/metaengine_comments.cpp
@@ -41,14 +41,15 @@ bool MetaEngine::canWriteComment(const QString& filePath)
Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open((const char*)
(QFile::encodeName(filePath).constData()));
- Exiv2::AccessMode mode = image->checkMode(Exiv2::mdComment);
+ Exiv2::AccessMode mode = image->checkMode(Exiv2::mdComment);
+
return (mode == Exiv2::amWrite || mode == Exiv2::amReadWrite);
}
catch( Exiv2::Error& e )
{
std::string s(e.what());
qCCritical(DIGIKAM_METAENGINE_LOG) << "Cannot check Comment access mode \
using Exiv2 (Error #"
- << e.code() << ": " << s.c_str() << ")";
+ << e.code() << ": " << s.c_str() << ")";
}
catch(...)
{
diff --git a/libs/dmetadata/metaengine_exif.cpp b/libs/dmetadata/metaengine_exif.cpp
index a88f8c7bc4..a899f3f215 100644
--- a/libs/dmetadata/metaengine_exif.cpp
+++ b/libs/dmetadata/metaengine_exif.cpp
@@ -1076,6 +1076,7 @@ MetaEngine::TagsMap MetaEngine::getStdExifTagsList() const
++ti;
}
}
+
++gi;
}
@@ -1084,14 +1085,20 @@ MetaEngine::TagsMap MetaEngine::getStdExifTagsList() const
do
{
const Exiv2::TagInfo* const ti = *it;
- QString key = \
QLatin1String(Exiv2::ExifKey(*ti).key().c_str());
- QStringList values;
- values << QString::fromLatin1(ti->name_) << \
QString::fromLatin1(ti->title_) << QString::fromLatin1(ti->desc_);
- tagsMap.insert(key, values);
+
+ if (ti)
+ {
+ QString key = QLatin1String(Exiv2::ExifKey(*ti).key().c_str());
+ QStringList values;
+ values << QString::fromLatin1(ti->name_) << \
QString::fromLatin1(ti->title_) << QString::fromLatin1(ti->desc_); + \
tagsMap.insert(key, values); + }
+
++(*it);
}
while((*it)->tag_ != 0xffff);
}
+
return tagsMap;
}
catch( Exiv2::Error& e )
@@ -1128,6 +1135,7 @@ MetaEngine::TagsMap MetaEngine::getMakernoteTagsList() const
++ti;
}
}
+
++gi;
}
@@ -1136,10 +1144,15 @@ MetaEngine::TagsMap MetaEngine::getMakernoteTagsList() const
do
{
const Exiv2::TagInfo* const ti = *it;
- QString key = \
QLatin1String(Exiv2::ExifKey(*ti).key().c_str());
- QStringList values;
- values << QString::fromLatin1(ti->name_) << \
QString::fromLatin1(ti->title_) << QString::fromLatin1(ti->desc_);
- tagsMap.insert(key, values);
+
+ if (ti)
+ {
+ QString key = QLatin1String(Exiv2::ExifKey(*ti).key().c_str());
+ QStringList values;
+ values << QString::fromLatin1(ti->name_) << \
QString::fromLatin1(ti->title_) << QString::fromLatin1(ti->desc_); + \
tagsMap.insert(key, values); + }
+
++(*it);
}
while((*it)->tag_ != 0xffff);
diff --git a/libs/dmetadata/metaengine_gps.cpp b/libs/dmetadata/metaengine_gps.cpp
index 769c54916e..494e3186f9 100644
--- a/libs/dmetadata/metaengine_gps.cpp
+++ b/libs/dmetadata/metaengine_gps.cpp
@@ -281,6 +281,7 @@ bool MetaEngine::getGPSAltitude(double* const altitude) const
Exiv2::ExifKey exifKey3("Exif.GPSInfo.GPSAltitude");
Exiv2::ExifData exifData(d->exifMetadata());
Exiv2::ExifData::const_iterator it = exifData.findKey(exifKey3);
+
if (it != exifData.end() && (*it).count())
{
num = (double)((*it).toRational(0).first);
@@ -594,7 +595,7 @@ bool MetaEngine::removeGPSInfo(const bool setProgramName)
}
void MetaEngine::convertToRational(const double number, long int* const numerator,
- long int* const denominator, const int rounding)
+ long int* const denominator, const int rounding)
{
// This function converts the given decimal number
// to a rational (fractional) number.
@@ -721,9 +722,9 @@ void MetaEngine::convertToRationalSmallDenominator(const double \
number, long int }
QString MetaEngine::convertToGPSCoordinateString(const long int numeratorDegrees, \
const long int denominatorDegrees,
- const long int numeratorMinutes, const \
long int denominatorMinutes,
- const long int numeratorSeconds, long \
int denominatorSeconds,
- const char directionReference)
+ const long int numeratorMinutes, \
const long int denominatorMinutes, + \
const long int numeratorSeconds, long int denominatorSeconds, + \
const char directionReference) {
/**
* Precision:
@@ -835,10 +836,10 @@ QString MetaEngine::convertToGPSCoordinateString(const bool \
isLatitude, double c }
bool MetaEngine::convertFromGPSCoordinateString(const QString& gpsString,
- long int* const numeratorDegrees, long \
int* const denominatorDegrees,
- long int* const numeratorMinutes, long \
int* const denominatorMinutes,
- long int* const numeratorSeconds, long \
int* const denominatorSeconds,
- char* const directionReference)
+ long int* const numeratorDegrees, \
long int* const denominatorDegrees, + \
long int* const numeratorMinutes, long int* const denominatorMinutes, + \
long int* const numeratorSeconds, long int* const denominatorSeconds, + \
char* const directionReference) {
if (gpsString.isEmpty())
return false;
@@ -923,8 +924,8 @@ bool MetaEngine::convertFromGPSCoordinateString(const QString& \
gpsString, double }
bool MetaEngine::convertToUserPresentableNumbers(const QString& gpsString,
- int* const degrees, int* const minutes,
- double* const seconds, char* const \
directionReference) + int* const \
degrees, int* const minutes, + \
double* const seconds, char* const directionReference) {
if (gpsString.isEmpty())
return false;
@@ -959,8 +960,8 @@ bool MetaEngine::convertToUserPresentableNumbers(const QString& \
gpsString, }
void MetaEngine::convertToUserPresentableNumbers(const bool isLatitude, double \
coordinate,
- int* const degrees, int* const minutes,
- double* const seconds, char* const \
directionReference) + int* const \
degrees, int* const minutes, + \
double* const seconds, char* const directionReference) {
if (isLatitude)
{
diff --git a/libs/dmetadata/metaengine_iptc.cpp b/libs/dmetadata/metaengine_iptc.cpp
index ce7e52b7d3..2cf1b8ffec 100644
--- a/libs/dmetadata/metaengine_iptc.cpp
+++ b/libs/dmetadata/metaengine_iptc.cpp
@@ -489,8 +489,8 @@ QStringList MetaEngine::getIptcTagsStringList(const char* \
iptcTagName, bool esca }
bool MetaEngine::setIptcTagsStringList(const char* iptcTagName, int maxSize,
- const QStringList& oldValues, const QStringList& \
newValues,
- bool setProgramName) const
+ const QStringList& oldValues, const \
QStringList& newValues, + bool setProgramName) \
const {
if (!setProgramId(setProgramName))
return false;
@@ -691,7 +691,7 @@ QStringList MetaEngine::getIptcSubjects() const
}
bool MetaEngine::setIptcSubjects(const QStringList& oldSubjects, const QStringList& \
newSubjects,
- bool setProgramName) const
+ bool setProgramName) const
{
if (!setProgramId(setProgramName))
return false;
@@ -785,7 +785,7 @@ QStringList MetaEngine::getIptcSubCategories() const
}
bool MetaEngine::setIptcSubCategories(const QStringList& oldSubCategories, const \
QStringList& newSubCategories,
- bool setProgramName) const
+ bool setProgramName) const
{
if (!setProgramId(setProgramName))
return false;
diff --git a/libs/dmetadata/metaengine_xmp.cpp b/libs/dmetadata/metaengine_xmp.cpp
index f22be0d742..ad9e71fc97 100644
--- a/libs/dmetadata/metaengine_xmp.cpp
+++ b/libs/dmetadata/metaengine_xmp.cpp
@@ -624,7 +624,7 @@ QString MetaEngine::getXmpTagStringLangAlt(const char* \
xmpTagName, const QString }
bool MetaEngine::setXmpTagStringLangAlt(const char* xmpTagName, const QString& \
value,
- const QString& langAlt, bool setProgramName) \
const + const QString& langAlt, bool \
setProgramName) const {
#ifdef _XMP_SUPPORT_
@@ -739,7 +739,7 @@ QStringList MetaEngine::getXmpTagStringSeq(const char* \
xmpTagName, bool escapeCR }
bool MetaEngine::setXmpTagStringSeq(const char* xmpTagName, const QStringList& seq,
- bool setProgramName) const
+ bool setProgramName) const
{
#ifdef _XMP_SUPPORT_
@@ -839,7 +839,7 @@ QStringList MetaEngine::getXmpTagStringBag(const char* \
xmpTagName, bool escapeCR }
bool MetaEngine::setXmpTagStringBag(const char* xmpTagName, const QStringList& bag,
- bool setProgramName) const
+ bool setProgramName) const
{
#ifdef _XMP_SUPPORT_
@@ -888,7 +888,7 @@ bool MetaEngine::setXmpTagStringBag(const char* xmpTagName, const \
QStringList& b }
bool MetaEngine::addToXmpTagStringBag(const char* xmpTagName, const QStringList& \
entriesToAdd,
- bool setProgramName) const
+ bool setProgramName) const
{
if (!setProgramId(setProgramName))
return false;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic