added a safety net in content_remove, so we do not loop
authorMarcus Meissner <marcus@jet.franken.de>
Tue, 6 May 2008 07:58:13 +0000 (09:58 +0200)
committerMarcus Meissner <marcus@jet.franken.de>
Tue, 6 May 2008 07:58:13 +0000 (09:58 +0200)
endless. Fixes a problem caused by EOG on certain JPEG files.

libexif/exif-data.c

index 64ae076539f50a345a4db21967189a4a45b7ad24..15c5d9588242fba9748883dd2074563bb448a3fe 100644 (file)
@@ -1219,8 +1219,16 @@ fix_func (ExifContent *c, void *UNUSED(data))
                        exif_log (c->parent->priv->log, EXIF_LOG_CODE_DEBUG, "exif-data",
                                  "No thumbnail but entries on thumbnail. These entries have been "
                                  "removed.");
-                       while (c->count)
+                       while (c->count) {
+                               int cnt = c->count;
                                exif_content_remove_entry (c, c->entries[c->count - 1]);
+                               if (cnt == c->count) {
+                                       /* safety net */
+                                       exif_log (c->parent->priv->log, EXIF_LOG_CODE_DEBUG, "exif-data",
+                                       "failed to remove last entry from entries.");
+                                       c->count--;
+                               }
+                       }
                }
                break;
        default: