Update of /cvsroot/libexif/libexif/libexif
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32090
Modified Files:
exif-content.c
Log Message:
fixed bug #1471060: wasted space in exif_content_add_entry()
& exif_content_remove_entry(); also safe handling of failed
realloc in exif_content_add_entry()
Index: exif-content.c
===================================================================
RCS file: /cvsroot/libexif/libexif/libexif/exif-content.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -p -d -r1.19 -r1.20
--- exif-content.c 19 Mar 2006 17:23:06 -0000 1.19
+++ exif-content.c 5 May 2006 05:25:20 -0000 1.20
@@ -131,6 +131,7 @@ exif_content_dump (ExifContent *content,
void
exif_content_add_entry (ExifContent *c, ExifEntry *entry)
{
+ ExifEntry **entries;
if (!c || !c->priv || !entry || entry->parent) return;
/* One tag can only be added once to an IFD. */
@@ -142,13 +143,13 @@ exif_content_add_entry (ExifContent *c,
return;
}
+ entries = exif_mem_realloc (c->priv->mem,
+ c->entries, sizeof (ExifEntry*) * (c->count + 1));
+ if (!entries) return;
entry->parent = c;
- c->entries = exif_mem_realloc (c->priv->mem,
- c->entries, sizeof (ExifEntry) * (c->count + 1));
- if (!c->entries) return;
- c->entries[c->count] = entry;
+ entries[c->count++] = entry;
+ c->entries = entries;
exif_entry_ref (entry);
- c->count++;
}
void
@@ -164,12 +165,12 @@ exif_content_remove_entry (ExifContent *
/* Remove the entry */
memmove (&c->entries[i], &c->entries[i + 1],
- sizeof (ExifEntry) * (c->count - i - 1));
+ sizeof (ExifEntry*) * (c->count - i - 1));
c->count--;
e->parent = NULL;
exif_entry_unref (e);
c->entries = exif_mem_realloc (c->priv->mem, c->entries,
- sizeof(ExifEntry) * c->count);
+ sizeof(ExifEntry*) * c->count);
}
ExifEntry *
|