Fix coverity issue 58/196258/2 accepted/tizen/unified/20190108.062240 submit/tizen/20190107.021730
authorjiyong.min <jiyong.min@samsung.com>
Wed, 26 Dec 2018 23:52:49 +0000 (08:52 +0900)
committerjiyong.min <jiyong.min@samsung.com>
Thu, 27 Dec 2018 01:01:13 +0000 (10:01 +0900)
 - Resource leak
 - Dereference before null check
 - Large stack use

Change-Id: Ib7713f0fd1ae54ac0a6e140794afedd07a4cc1c2

gif/mm_util_gif.c
gif/test/mm_util_gif_testsuite.c
packaging/libmm-utility.spec

index b70534e..702b6b1 100644 (file)
@@ -546,7 +546,6 @@ int _gif_image_write_ext_block(gif_file_s *gif_file, unsigned int delay_time)
 
        ret = _gif_image_create_ext_block(GRAPHICS_EXT_FUNC_CODE, GRAPHIC_EXT_BLOCK_SIZE, &_ext_block);
        mm_util_retvm_if(ret != MM_UTIL_ERROR_NONE, ret, "_gif_image_alloc_ext_block failed");
-       mm_util_retvm_if(_ext_block->Bytes == NULL, MM_UTIL_ERROR_OUT_OF_MEMORY, "_gif_image_alloc_ext_block failed");
 
        /* use fixed graphics control */
        graphic_control_block.DisposalMode = MM_UTIL_GIF_DISPOSAL_UNSPECIFIED;
@@ -562,10 +561,8 @@ int _gif_image_write_ext_block(gif_file_s *gif_file, unsigned int delay_time)
        }
 
        /* release extension blocks */
-       if (_ext_block != NULL) {
-               MMUTIL_SAFE_FREE(_ext_block->Bytes);
-               MMUTIL_SAFE_FREE(_ext_block);
-       }
+       MMUTIL_SAFE_FREE(_ext_block->Bytes);
+       MMUTIL_SAFE_FREE(_ext_block);
 
        return MM_UTIL_ERROR_NONE;
 }
@@ -726,18 +723,34 @@ int mm_util_encode_to_gif_file(mm_image_info_s **images, const unsigned int imag
        mm_util_retvm_if(ret != MM_UTIL_ERROR_NONE, ret, "mm_util_gif_encode_create failed %d", ret);
 
        ret = mm_util_gif_encode_set_file(gif_file_h, path);
-       mm_util_retvm_if(ret != MM_UTIL_ERROR_NONE, ret, "mm_util_gif_encode_set_file failed %d", ret);
+       if (ret != MM_UTIL_ERROR_NONE) {
+               mm_util_error("mm_util_gif_encode_set_file failed");
+               mm_util_gif_encode_destroy(gif_file_h);
+               return ret;
+       }
 
        ret = _mm_util_gif_encode_start(gif_file_h, images[0]->width, images[0]->height);
-       mm_util_retvm_if(ret != MM_UTIL_ERROR_NONE, ret, "_mm_util_gif_encode_start failed");
+       if (ret != MM_UTIL_ERROR_NONE) {
+               mm_util_error("_mm_util_gif_encode_start failed");
+               mm_util_gif_encode_destroy(gif_file_h);
+               return ret;
+       }
 
        for (i = 0; i < image_count; i++) {
                ret = mm_util_gif_encode_add_image(gif_file_h, images[i]);
-               mm_util_retvm_if(ret != MM_UTIL_ERROR_NONE, ret, "mm_util_gif_encode_add_image failed");
+               if (ret != MM_UTIL_ERROR_NONE) {
+                       mm_util_error("mm_util_gif_encode_add_image failed");
+                       mm_util_gif_encode_destroy(gif_file_h);
+                       return ret;
+               }
        }
 
        ret = mm_util_gif_encode_save(gif_file_h);
-       mm_util_retvm_if(ret != MM_UTIL_ERROR_NONE, ret, "mm_util_gif_encode_save failed");
+       if (ret != MM_UTIL_ERROR_NONE) {
+               mm_util_error("mm_util_gif_encode_save failed");
+               mm_util_gif_encode_destroy(gif_file_h);
+               return ret;
+       }
 
        mm_util_fleave();
 
@@ -760,18 +773,36 @@ int mm_util_encode_to_gif_memory(mm_image_info_s **images, const unsigned int im
        mm_util_retvm_if(ret != MM_UTIL_ERROR_NONE, ret, "mm_util_gif_encode_create failed %d", ret);
 
        ret = mm_util_gif_encode_set_mem(gif_file_h, buffer, size);
-       mm_util_retvm_if(ret != MM_UTIL_ERROR_NONE, ret, "mm_util_gif_encode_set_mem failed %d", ret);
+       if (ret != MM_UTIL_ERROR_NONE) {
+               mm_util_error("mm_util_gif_encode_set_mem failed");
+               mm_util_gif_encode_destroy(gif_file_h);
+               return ret;
+       }
 
        ret = _mm_util_gif_encode_start(gif_file_h, images[0]->width, images[0]->height);
-       mm_util_retvm_if(ret != MM_UTIL_ERROR_NONE, ret, "_mm_util_gif_encode_start failed");
+       if (ret != MM_UTIL_ERROR_NONE) {
+               mm_util_error("_mm_util_gif_encode_start failed");
+               mm_util_gif_encode_destroy(gif_file_h);
+               return ret;
+       }
 
        for (i = 0; i < image_count; i++) {
                ret = mm_util_gif_encode_add_image(gif_file_h, images[i]);
-               mm_util_retvm_if(ret != MM_UTIL_ERROR_NONE, ret, "mm_util_gif_encode_add_image failed");
+               if (ret != MM_UTIL_ERROR_NONE) {
+                       mm_util_error("mm_util_gif_encode_add_image failed");
+                       mm_util_gif_encode_destroy(gif_file_h);
+                       return ret;
+               }
        }
 
        ret = mm_util_gif_encode_save(gif_file_h);
-       mm_util_retvm_if(ret != MM_UTIL_ERROR_NONE, ret, "mm_util_gif_encode_save failed");
+       if (ret != MM_UTIL_ERROR_NONE) {
+               mm_util_error("mm_util_gif_encode_save failed");
+               mm_util_gif_encode_destroy(gif_file_h);
+               return ret;
+       }
+
+       mm_util_gif_encode_destroy(gif_file_h);
 
        mm_util_fleave();
 
@@ -792,4 +823,5 @@ void mm_util_gif_encode_destroy(mm_gif_file_h gif_file_h)
 
        MMUTIL_SAFE_G_FREE(gif_file->filename);
        MMUTIL_SAFE_FREE(gif_file->write_data_ptr.mem);
+       MMUTIL_SAFE_FREE(gif_file);
 }
index ea3191c..d23b4c1 100644 (file)
@@ -28,7 +28,7 @@
 #include <tzplatform_config.h>
 
 #define ENCODE_RESULT_PATH tzplatform_mkpath(TZ_USER_CONTENT, "encode_test.gif")
-#define ANIMATED_FRAME_MAX     100
+#define ANIMATED_FRAME_MAX     2       /* change the max frames for animated gif before using it */
 
 static gboolean g_encode_mem = FALSE;
 
index 5c5ebee..7c878a0 100755 (executable)
@@ -1,6 +1,6 @@
 Name:       libmm-utility
 Summary:    Multimedia Framework Utility Library
-Version:    0.1.29
+Version:    0.1.30
 Release:    0
 Group:      System/Libraries
 License:    Apache-2.0