From 1c108f125ff23124dba0bdea2f0c71eb4ca2554d Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Wed, 7 Aug 2013 09:18:35 -0700 Subject: [PATCH] Fixed bug 2010 - Memory leaks in do_layer_surface function in IMG_xcf.c file Nitz In static int do_layer_surface (SDL_Surface * surface, SDL_RWops * src, xcf_header * head, xcf_layer * layer, load_tile_type load_tile) hierarchy, level and tile pointers are getting leak at default cases of switch statement. --- IMG_xcf.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/IMG_xcf.c b/IMG_xcf.c index d4215263..5445d91d 100644 --- a/IMG_xcf.c +++ b/IMG_xcf.c @@ -289,7 +289,7 @@ static void free_xcf_header (xcf_header * h) { if (h->cm_num) SDL_free (h->cm_map); if (h->layer_file_offsets) - SDL_free (h->layer_file_offsets); + SDL_free (h->layer_file_offsets); SDL_free (h); } @@ -625,6 +625,15 @@ static int do_layer_surface (SDL_Surface * surface, SDL_RWops * src, xcf_header break; default: fprintf (stderr, "Unknown Gimp image type (%d)\n", head->image_type); + if (hierarchy) + { + if (hierarchy->level_file_offsets) + SDL_free(hierarchy->level_file_offsets); + + free_xcf_hierarchy(hierarchy); + } + if (level) + free_xcf_level (level); return 1; } break; @@ -650,6 +659,12 @@ static int do_layer_surface (SDL_Surface * surface, SDL_RWops * src, xcf_header break; default: fprintf (stderr, "Unknown Gimp image type (%d)\n", head->image_type); + if (tile) + free_xcf_tile (tile); + if (level) + free_xcf_level (level); + if (hierarchy) + free_xcf_hierarchy (hierarchy); return 1; } break;