summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCedric BAIL <cedric@osg.samsung.com>2015-04-25 19:27:20 +0200
committerCedric BAIL <cedric@osg.samsung.com>2015-04-25 19:27:20 +0200
commit888057f0bc4a4af91d91e05f15197cce169fbcfc (patch)
treedc1f6474ab07364ee39354f31779d0afd7607e1e
parent5d59a403cd4797af8e084a7a32313dd9c51389bd (diff)
downloadefl-888057f0bc4a4af91d91e05f15197cce169fbcfc.tar.gz
emile: fix memory leak.
CID 1288924 & 1288923
-rw-r--r--src/lib/emile/emile_image.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/lib/emile/emile_image.c b/src/lib/emile/emile_image.c
index c5eb1f3461..06a5da4e88 100644
--- a/src/lib/emile/emile_image.c
+++ b/src/lib/emile/emile_image.c
@@ -1599,6 +1599,9 @@ _emile_jpeg_data(Emile_Image *image,
volatile int degree = 0;
volatile Eina_Bool change_wh = EINA_FALSE;
Eina_Bool line_done = EINA_FALSE;
+ Eina_Bool ptrg_free = EINA_FALSE;
+ Eina_Bool ptrag_free = EINA_FALSE;
+ Eina_Bool r = EINA_FALSE;
unsigned int length;
if (sizeof(Emile_Image_Property) != property_size)
@@ -1781,11 +1784,13 @@ _emile_jpeg_data(Emile_Image *image,
{
ptrg = malloc(w * h * sizeof(uint8_t));
ptrg_rotate = ptrg;
+ ptrg_free = EINA_TRUE;
}
else if (prop->cspace == EMILE_COLORSPACE_AGRY88)
{
ptrag = malloc(w * h * sizeof(uint16_t));
ptrag_rotate = ptrag;
+ ptrag_free = EINA_TRUE;
}
else
{
@@ -2216,15 +2221,17 @@ done:
}
/* end data decoding */
jpeg_finish_decompress(&cinfo);
- jpeg_destroy_decompress(&cinfo);
- _emile_jpeg_membuf_src_term(&cinfo);
*error = EMILE_IMAGE_LOAD_ERROR_NONE;
- return EINA_TRUE;
+ r = EINA_TRUE;
+
+ on_error:
+ if (ptrg_free) free(ptrg);
+ if (ptrag_free) free(ptrag);
-on_error:
jpeg_destroy_decompress(&cinfo);
_emile_jpeg_membuf_src_term(&cinfo);
- return EINA_FALSE;
+ return r;
+
}
static void