diff options
author | Kim Woelders <kim@woelders.dk> | 2019-09-29 18:58:13 +0200 |
---|---|---|
committer | Kim Woelders <kim@woelders.dk> | 2019-09-29 19:44:41 +0200 |
commit | 9977ac202642f3139c2f978ef2c7d50c03723ee4 (patch) | |
tree | 33e290286d29244c4085fc0bc637e703892fb871 | |
parent | 701f87ffa6a7e8bbaf816121595b4478e168f641 (diff) | |
download | imlib2-9977ac202642f3139c2f978ef2c7d50c03723ee4.tar.gz |
JPG loader: Fix memory leaks in error paths
-rw-r--r-- | src/modules/loaders/loader_jpeg.c | 14 |
1 files 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; } |