cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=d2b766a51d92e36f72929c7863da8a0ba7bdff40

commit d2b766a51d92e36f72929c7863da8a0ba7bdff40
Author: Cedric BAIL <ced...@osg.samsung.com>
Date:   Wed Jan 21 16:07:07 2015 +0100

    eet: properly handle failure and success case by not leaking memory.
    
    CID 1265601.
---
 src/lib/eet/eet_image.c | 35 ++++++++++++-----------------------
 1 file changed, 12 insertions(+), 23 deletions(-)

diff --git a/src/lib/eet/eet_image.c b/src/lib/eet/eet_image.c
index c72a385..4ac535a 100644
--- a/src/lib/eet/eet_image.c
+++ b/src/lib/eet/eet_image.c
@@ -2077,6 +2077,7 @@ eet_data_image_header_decode_cipher(const void   *data,
    int header[8];
    void *deciphered_d = NULL;
    unsigned int deciphered_sz = 0;
+   int r = 0;
 
    if (cipher_key)
      {
@@ -2095,11 +2096,7 @@ eet_data_image_header_decode_cipher(const void   *data,
 
    _eet_image_endian_check();
 
-   if (size < 32)
-     {
-        free(deciphered_d);
-        return 0;
-     }
+   if (size < 32) goto on_error;
 
    memcpy(header, data, 32);
    _eet_image_endian_swap(header, 8);
@@ -2113,16 +2110,10 @@ eet_data_image_header_decode_cipher(const void   *data,
         al = header[3];
         cp = header[4];
         if ((iw < 1) || (ih < 1) || (iw > 8192) || (ih > 8192))
-          {
-             free(deciphered_d);
-             return 0;
-          }
+          goto on_error;
 
         if ((cp == 0) && (size < ((iw * ih * 4) + 32)))
-          {
-             free(deciphered_d);
-             return 0;
-          }
+          goto on_error;
 
         if (w)
           *w = iw;
@@ -2142,7 +2133,7 @@ eet_data_image_header_decode_cipher(const void   *data,
         if (quality)
           *quality = 100;
 
-        return 1;
+        r = 1;
      }
    else if ((unsigned)header[0] == 0xbeeff00d)
      {
@@ -2154,10 +2145,7 @@ eet_data_image_header_decode_cipher(const void   *data,
         sz1 = header[1];
         sz2 = header[2];
         if ((sz1 <= 0) || (sz2 <= 0) || ((sz1 + sz2) > (size - 12)))
-          {
-             free(deciphered_d);
-             return 0;
-          }
+          goto on_error;
         dt = data;
         dt += 12;
         ok = eet_data_image_jpeg_header_decode(dt, sz1, &iw, &ih);
@@ -2181,7 +2169,7 @@ eet_data_image_header_decode_cipher(const void   *data,
              if (quality)
                *quality = 75;
 
-             return 1;
+             r = 1;
           }
      }
    else if (!strncmp(data, "TGV1", 4))
@@ -2210,11 +2198,11 @@ eet_data_image_header_decode_cipher(const void   *data,
              if (lossy) *lossy = EET_IMAGE_ETC1_ALPHA;
              break;
            default:
-             return 0;
+              goto on_error;
           }
         if (quality) *quality = 50;
 
-        return 1;
+        r = 1;
      }
    else
      {
@@ -2242,12 +2230,13 @@ eet_data_image_header_decode_cipher(const void   *data,
              if (quality)
                *quality = 75;
 
-             return 1;
+             r = 1;
           }
      }
 
+ on_error:
    free(deciphered_d);
-   return 0;
+   return r;
 }
 
 static const Eet_Colorspace _eet_etc1_colorspace[] = {

-- 


Reply via email to