When loading an entry fails, do not add it to the IFD.
authorMarcus Meissner <marcus@jet.franken.de>
Thu, 19 Jan 2006 07:40:25 +0000 (08:40 +0100)
committerMarcus Meissner <marcus@jet.franken.de>
Thu, 19 Jan 2006 07:40:25 +0000 (08:40 +0100)
ChangeLog
libexif/exif-data.c

index 4f0a9b9..375c7af 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2006-01-19  Marcus Meissner  <marcus@jet.franken.de>
+
+       * libexif/exif-data.c: Let exif_data_load_data_entry() signal failure
+         and discard entry in caller if it does.
+
 2006-01-16  Hubert Figuiere  <hub@figuiere.net>
 
        * libexif/exif-mem.h, libexif/exif-loader.h: More documentation
index a16d911..54b68a6 100644 (file)
@@ -155,7 +155,7 @@ exif_data_new_from_data (const unsigned char *data, unsigned int size)
        return (edata);
 }
 
-static void
+static int
 exif_data_load_data_entry (ExifData *data, ExifEntry *entry,
                           const unsigned char *d,
                           unsigned int size, unsigned int offset)
@@ -176,7 +176,7 @@ exif_data_load_data_entry (ExifData *data, ExifEntry *entry,
         */
        s = exif_format_get_size (entry->format) * entry->components;
        if (!s)
-               return;
+               return 0;
        if (s > 4)
                doff = exif_get_long (d + offset + 8, data->priv->order);
        else
@@ -184,7 +184,7 @@ exif_data_load_data_entry (ExifData *data, ExifEntry *entry,
 
        /* Sanity check */
        if (size < doff + s)
-               return;
+               return 0;
 
        entry->data = exif_data_alloc (data, s);
        if (entry->data) {
@@ -203,6 +203,7 @@ exif_data_load_data_entry (ExifData *data, ExifEntry *entry,
                                               entry->data[6]);
                data->priv->offset_mnote = doff;
        }
+       return 1;
 }
 
 static void
@@ -413,9 +414,9 @@ exif_data_load_data_content (ExifData *data, ExifIfd ifd,
                                        break;
                        }
                        entry = exif_entry_new_mem (data->priv->mem);
-                       exif_data_load_data_entry (data, entry, d, ds,
-                                                  offset + 12 * i);
-                       exif_content_add_entry (data->ifd[ifd], entry);
+                       if (exif_data_load_data_entry (data, entry, d, ds,
+                                                  offset + 12 * i))
+                               exif_content_add_entry (data->ifd[ifd], entry);
                        exif_entry_unref (entry);
                        break;
                }