From: Jan P. <pa...@us...> - 2006-05-05 05:25:24
|
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 * |