[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