From 8f063d49c2e1dffb5548e40b69782963e18b1171 Mon Sep 17 00:00:00 2001 From: Christian Soffke Date: Mon, 20 Dec 2021 00:33:34 +0100 Subject: ImageViewer: Fix FS#13329 (GIF File handle/memory leaks) Change-Id: Ib3ef22716c8ba35c7bb78231ca4f5c7155f16018 --- apps/plugins/imageviewer/gif/gif.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'apps/plugins/imageviewer/gif/gif.c') diff --git a/apps/plugins/imageviewer/gif/gif.c b/apps/plugins/imageviewer/gif/gif.c index b78709556d..0521c29e3a 100644 --- a/apps/plugins/imageviewer/gif/gif.c +++ b/apps/plugins/imageviewer/gif/gif.c @@ -132,6 +132,8 @@ static int load_image(char *filename, struct image_info *info, time = *rb->current_tick - time; } + gif_decoder_destroy_memory_pool(p_decoder); + if (!iv->running_slideshow && !p_decoder->error) { rb->snprintf(print, sizeof(print), " %ld.%02ld sec ", time/HZ, time%HZ); @@ -142,6 +144,9 @@ static int load_image(char *filename, struct image_info *info, if (p_decoder->error) { + if (p_decoder->error == D_GIF_ERR_NOT_ENOUGH_MEM) + return PLUGIN_OUTOFMEM; + rb->splashf(HZ, "%s", GifErrorString(p_decoder->error)); return PLUGIN_ERROR; } @@ -157,12 +162,9 @@ static int load_image(char *filename, struct image_info *info, img_size = (p_decoder->native_img_size*p_decoder->frames_count + 3) & ~3; disp_size = (sizeof(unsigned char *)*p_decoder->frames_count*4 + 3) & ~3; + /* No memory to allocate disp matrix */ if (memory_size < img_size + disp_size) - { - /* No memory to allocate disp matrix */ - rb->splashf(HZ, "%s", GifErrorString(D_GIF_ERR_NOT_ENOUGH_MEM)); - return PLUGIN_ERROR; - } + return PLUGIN_OUTOFMEM; disp = (unsigned char **)(p_decoder->mem + img_size); disp_buf = (unsigned char *)disp + disp_size; -- cgit v1.2.3