Enhance error handling for save functions in webp 41/243341/1
authorjiyong.min <jiyong.min@samsung.com>
Mon, 7 Sep 2020 01:16:56 +0000 (10:16 +0900)
committerjiyong.min <jiyong.min@samsung.com>
Mon, 7 Sep 2020 01:16:56 +0000 (10:16 +0900)
  - Add to check invalid parameters
  - Add to check frame_count for no animation

Change-Id: Idc5875c9d8c3f3336f997a63746a35d7429d25a1

webp/mm_util_webp.c

index b898e35..88cbec5 100644 (file)
@@ -28,6 +28,7 @@ typedef struct {
        WebPMuxAnimParams anim_params;
        bool lossless;
        unsigned int timestamp;
+       unsigned int frame_count;
 } mm_util_webp_anim_enc_t;
 
 
@@ -54,6 +55,8 @@ static void __webp_anim_enc_deinit(mm_util_webp_anim_enc_t *anim_enc)
                return;
 
        WebPAnimEncoderDelete(anim_enc->enc);
+       anim_enc->frame_count = 0;
+       anim_enc->timestamp = 0;
        anim_enc->enc = NULL;
 }
 
@@ -258,6 +261,7 @@ int mm_util_webp_anim_enc_add_image(mm_util_webp_anim_enc_h anim_enc_h, mm_util_
        } else {
                // convert the delay between frames to timestamp of each frame
                anim_enc->timestamp += frame->delay_time;
+               anim_enc->frame_count++;
        }
 
        WebPPictureFree(&picture);
@@ -275,6 +279,7 @@ int mm_util_webp_anim_enc_save_to_file(mm_util_webp_anim_enc_h anim_enc_h, const
        GError *g_error = NULL;
 
        mm_util_retvm_if(!anim_enc_h, MM_UTIL_ERROR_INVALID_PARAMETER, "invalid anim_enc_h");
+       mm_util_retvm_if(anim_enc->frame_count == 0, MM_UTIL_ERROR_INVALID_PARAMETER, "invalid frame_count");
 
        WebPDataInit(&webp_data);
 
@@ -304,6 +309,9 @@ int mm_util_webp_anim_enc_save_to_buffer(mm_util_webp_anim_enc_h anim_enc_h, voi
        WebPData webp_data;
 
        mm_util_retvm_if(!anim_enc_h, MM_UTIL_ERROR_INVALID_PARAMETER, "invalid anim_enc_h");
+       mm_util_retvm_if(!buf, MM_UTIL_ERROR_INVALID_PARAMETER, "invalid buf");
+       mm_util_retvm_if(!buf_size, MM_UTIL_ERROR_INVALID_PARAMETER, "invalid buf_size");
+       mm_util_retvm_if(anim_enc->frame_count == 0, MM_UTIL_ERROR_INVALID_PARAMETER, "invalid frame_count");
 
        WebPDataInit(&webp_data);