kwo pushed a commit to branch master.

http://git.enlightenment.org/legacy/imlib2.git/commit/?id=9977ac202642f3139c2f978ef2c7d50c03723ee4

commit 9977ac202642f3139c2f978ef2c7d50c03723ee4
Author: Kim Woelders <k...@woelders.dk>
Date:   Sun Sep 29 18:58:13 2019 +0200

    JPG loader: Fix memory leaks in error paths
---
 src/modules/loaders/loader_jpeg.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/src/modules/loaders/loader_jpeg.c 
b/src/modules/loaders/loader_jpeg.c
index 7a07394..de16168 100644
--- a/src/modules/loaders/loader_jpeg.c
+++ b/src/modules/loaders/loader_jpeg.c
@@ -50,11 +50,13 @@ load(ImlibImage * im, ImlibProgressFunction progress,
    struct jpeg_decompress_struct cinfo;
    struct ImLib_JPEG_error_mgr jerr;
    FILE               *f;
+   DATA8              *data;
 
    f = fopen(im->real_file, "rb");
    if (!f)
       return 0;
 
+   data = NULL;
    cinfo.err = jpeg_std_error(&(jerr.pub));
    jerr.pub.error_exit = _JPEGFatalErrorHandler;
    jerr.pub.emit_message = _JPEGErrorHandler2;
@@ -78,7 +80,7 @@ load(ImlibImage * im, ImlibProgressFunction progress,
 
    if (im->loader || immediate_load || progress)
      {
-        DATA8              *ptr, *line[16], *data;
+        DATA8              *ptr, *line[16];
         DATA32             *ptr2;
         int                 x, y, l, i, scans, count, prevy;
 
@@ -97,10 +99,7 @@ load(ImlibImage * im, ImlibProgressFunction progress,
         /* must set the im->data member before callign progress function */
         ptr2 = im->data = malloc(w * h * sizeof(DATA32));
         if (!im->data)
-          {
-             free(data);
-             goto quit_error;
-          }
+           goto quit_error;
 
         count = 0;
         prevy = 0;
@@ -120,7 +119,6 @@ load(ImlibImage * im, ImlibProgressFunction progress,
                   switch (cinfo.out_color_space)
                     {
                     default:
-                       free(data);
                        goto quit_error;
                     case JCS_GRAYSCALE:
                        for (x = 0; x < w; x++)
@@ -172,16 +170,18 @@ load(ImlibImage * im, ImlibProgressFunction progress,
 
       done:
         jpeg_finish_decompress(&cinfo);
-        free(data);
      }
 
  quit:
    jpeg_destroy_decompress(&cinfo);
+   free(data);
    fclose(f);
    return rc;
 
  quit_error:
    rc = 0;                      /* Error */
+   free(im->data);
+   im->data = NULL;
    im->w = im->h = 0;
    goto quit;
 }

-- 


Reply via email to