From faf4c1fb6012941134046db14370f60748184b05 Mon Sep 17 00:00:00 2001 From: Chris Young Date: Sat, 19 Nov 2016 21:08:41 +0000 Subject: Free and clear icondata to avoid a potential double-free --- frontends/amiga/bitmap.c | 9 +++++---- frontends/amiga/bitmap.h | 10 +++++----- frontends/amiga/icon.c | 2 +- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/frontends/amiga/bitmap.c b/frontends/amiga/bitmap.c index 7609d9451..124c116d5 100644 --- a/frontends/amiga/bitmap.c +++ b/frontends/amiga/bitmap.c @@ -730,14 +730,15 @@ void ami_bitmap_set_title(struct bitmap *bm, const char *title) bm->title = strdup(title); } -ULONG *ami_bitmap_get_icondata(struct bitmap *bm) +void ami_bitmap_set_icondata(struct bitmap *bm, ULONG *icondata) { - return bm->icondata; + bm->icondata = icondata; } -void ami_bitmap_set_icondata(struct bitmap *bm, ULONG *icondata) +void ami_bitmap_free_icondata(struct bitmap *bm) { - bm->icondata = icondata; + if(bm->icondata) FreeVec(bm->icondata); + bm->icondata = NULL; } bool ami_bitmap_is_nativebm(struct bitmap *bm, struct BitMap *nbm) diff --git a/frontends/amiga/bitmap.h b/frontends/amiga/bitmap.h index 771ded487..a32d740df 100755 --- a/frontends/amiga/bitmap.h +++ b/frontends/amiga/bitmap.h @@ -63,24 +63,24 @@ void ami_bitmap_set_url(struct bitmap *bm, struct nsurl *url); void ami_bitmap_set_title(struct bitmap *bm, const char *title); /** - * Get an icondata pointer + * Set an icondata pointer * * \param bm a bitmap, as returned by bitmap_create() - * \return pointer to the icondata area + * \param icondata a pointer to memory * * This function probably shouldn't be here! */ -ULONG *ami_bitmap_get_icondata(struct bitmap *bm); +void ami_bitmap_set_icondata(struct bitmap *bm, ULONG *icondata); /** - * Set an icondata pointer + * Free an icondata pointer * * \param bm a bitmap, as returned by bitmap_create() * \param icondata a pointer to memory * * This function probably shouldn't be here! */ -void ami_bitmap_set_icondata(struct bitmap *bm, ULONG *icondata); +void ami_bitmap_free_icondata(struct bitmap *bm); /** * Test if a BitMap is owned by a bitmap. diff --git a/frontends/amiga/icon.c b/frontends/amiga/icon.c index bd79a5502..fd996ef84 100644 --- a/frontends/amiga/icon.c +++ b/frontends/amiga/icon.c @@ -543,6 +543,6 @@ void amiga_icon_free(struct DiskObject *dobj) struct bitmap *bm = dobj->do_Gadget.UserData; FreeDiskObject(dobj); - if(bm) FreeVec(ami_bitmap_get_icondata(bm)); + if(bm) ami_bitmap_free_icondata(bm); } -- cgit v1.2.3