Fix two memory failures
authorKlaus Ethgen <Klaus@Ethgen.de>
Sun, 21 Jun 2009 22:52:08 +0000 (22:52 +0000)
committerKlaus Ethgen <Klaus@Ethgen.de>
Sun, 21 Jun 2009 22:52:08 +0000 (22:52 +0000)
1. if the description field for a exif information is empty the program
   dumps core when trying to change this. The reason is a strcmp with a
   NULL value.

   The fix add the small functionality to set the field to default when
   it is set empty.

2. There was a g_strdup miss in exif.c which could end in memory
   corruption.

src/bar_exif.c
src/exif.c

index 4703674..ee6d1df 100644 (file)
@@ -494,7 +494,13 @@ static void bar_pane_exif_edit_ok_cb(GenericDialog *gd, gpointer data)
                g_free(ee->key);
                ee->key = g_strdup(gtk_entry_get_text(GTK_ENTRY(cdd->key_entry)));
                title = gtk_entry_get_text(GTK_ENTRY(cdd->title_entry));
-               if (strcmp(ee->title, title) != 0)
+               if (!title || strlen(title) == 0)
+                       {
+                       g_free(ee->title);
+                       ee->title = exif_get_description_by_key(ee->key);
+                       ee->auto_title = TRUE;
+                       }
+               else if (!ee->title || strcmp(ee->title, title) != 0)
                        {
                        g_free(ee->title);
                        ee->title = g_strdup(title);
index 7db7842..ff98a8b 100644 (file)
@@ -1516,7 +1516,7 @@ gchar *exif_get_tag_description_by_key(const gchar *key)
        i = 0;
        while (ExifKnownGPSInfoMarkersList[i].tag > 0)
        {
-          if (strcmp(key, ExifKnownGPSInfoMarkersList[i].key) == 0) return _(ExifKnownGPSInfoMarkersList[i].description);
+          if (strcmp(key, ExifKnownGPSInfoMarkersList[i].key) == 0) return g_strdup(_(ExifKnownGPSInfoMarkersList[i].description));
           i++;
        }