diff options
Diffstat (limited to 'package/imlib2/0002-GIF-loader-Simplify-error-handling.patch')
-rw-r--r-- | package/imlib2/0002-GIF-loader-Simplify-error-handling.patch | 175 |
1 files changed, 0 insertions, 175 deletions
diff --git a/package/imlib2/0002-GIF-loader-Simplify-error-handling.patch b/package/imlib2/0002-GIF-loader-Simplify-error-handling.patch deleted file mode 100644 index c2b52547a4..0000000000 --- a/package/imlib2/0002-GIF-loader-Simplify-error-handling.patch +++ /dev/null @@ -1,175 +0,0 @@ -From 908a179726d010963f4fe1b57fb5f7bf590d7d64 Mon Sep 17 00:00:00 2001 -From: Kim Woelders <kim@woelders.dk> -Date: Tue, 31 Dec 2013 18:13:45 +0100 -Subject: [PATCH 2/5] GIF loader: Simplify error handling. - -Also: -- Fix memory leak when image data allocation fails. -- Some aux data arrays may as well be const. ---- - src/modules/loaders/loader_gif.c | 80 ++++++++++++++++------------------------ - 1 file changed, 32 insertions(+), 48 deletions(-) - -diff --git a/src/modules/loaders/loader_gif.c b/src/modules/loaders/loader_gif.c -index d1c2ae2..a39c860 100644 ---- a/src/modules/loaders/loader_gif.c -+++ b/src/modules/loaders/loader_gif.c -@@ -8,6 +8,9 @@ char - load(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity, - char immediate_load) - { -+ static const int intoffset[] = { 0, 4, 2, 1 }; -+ static const int intjump[] = { 8, 8, 4, 2 }; -+ int rc; - DATA32 *ptr; - GifFileType *gif; - GifRowType *rows; -@@ -16,8 +19,6 @@ load(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity, - int i, j, done, bg, r, g, b, w = 0, h = 0; - float per = 0.0, per_inc; - int last_per = 0, last_y = 0; -- int intoffset[] = { 0, 4, 2, 1 }; -- int intjump[] = { 8, 8, 4, 2 }; - int transp; - int fd; - -@@ -49,6 +50,8 @@ load(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity, - return 0; - } - -+ rc = 0; /* Failure */ -+ - do - { - if (DGifGetRecordType(gif, &rec) == GIF_ERROR) -@@ -66,37 +69,19 @@ load(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity, - w = gif->Image.Width; - h = gif->Image.Height; - if (!IMAGE_DIMENSIONS_OK(w, h)) -- { -- DGifCloseFile(gif); -- return 0; -- } -- rows = malloc(h * sizeof(GifRowType *)); -+ goto quit2; -+ -+ rows = calloc(h, sizeof(GifRowType *)); - if (!rows) -- { -- DGifCloseFile(gif); -- return 0; -- } -- for (i = 0; i < h; i++) -- { -- rows[i] = NULL; -- } -+ goto quit2; -+ - for (i = 0; i < h; i++) - { - rows[i] = malloc(w * sizeof(GifPixelType)); - if (!rows[i]) -- { -- DGifCloseFile(gif); -- for (i = 0; i < h; i++) -- { -- if (rows[i]) -- { -- free(rows[i]); -- } -- } -- free(rows); -- return 0; -- } -+ goto quit; - } -+ - if (gif->Image.Interlace) - { - for (i = 0; i < 4; i++) -@@ -135,6 +120,7 @@ load(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity, - } - } - while (rec != TERMINATE_RECORD_TYPE); -+ - if (transp >= 0) - { - SET_FLAG(im->flags, F_HAS_ALPHA); -@@ -143,6 +129,7 @@ load(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity, - { - UNSET_FLAG(im->flags, F_HAS_ALPHA); - } -+ - /* set the format string member to the lower-case full extension */ - /* name for the format - so example names would be: */ - /* "png", "jpeg", "tiff", "ppm", "pgm", "pbm", "gif", "xpm" ... */ -@@ -150,17 +137,15 @@ load(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity, - im->h = h; - if (!im->format) - im->format = strdup("gif"); -+ - if (im->loader || immediate_load || progress) - { - bg = gif->SBackGroundColor; - cmap = (gif->Image.ColorMap ? gif->Image.ColorMap : gif->SColorMap); - im->data = (DATA32 *) malloc(sizeof(DATA32) * w * h); - if (!im->data) -- { -- DGifCloseFile(gif); -- free(rows); -- return 0; -- } -+ goto quit; -+ - ptr = im->data; - per_inc = 100.0 / (((float)w) * h); - for (i = 0; i < h; i++) -@@ -188,30 +173,29 @@ load(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity, - last_per = (int)per; - if (!(progress(im, (int)per, 0, last_y, w, i))) - { -- DGifCloseFile(gif); -- for (i = 0; i < h; i++) -- { -- free(rows[i]); -- } -- free(rows); -- return 2; -+ rc = 2; -+ goto quit; - } - last_y = i; - } - } - } -+ -+ if (progress) -+ progress(im, 100, 0, last_y, w, h); - } -- if (progress) -- { -- progress(im, 100, 0, last_y, w, h); -- } -- DGifCloseFile(gif); -+ -+ rc = 1; /* Success */ -+ -+ quit: - for (i = 0; i < h; i++) -- { -- free(rows[i]); -- } -+ free(rows[i]); - free(rows); -- return 1; -+ -+ quit2: -+ DGifCloseFile(gif); -+ -+ return rc; - } - - void --- -2.3.1 - |