]> granicus.if.org Git - libvpx/commitdiff
fix valgrind mem leak on garbage decode
authorJim Bankoski <jimbankoski@google.com>
Tue, 11 Sep 2012 23:30:19 +0000 (16:30 -0700)
committerJim Bankoski <jimbankoski@google.com>
Tue, 11 Sep 2012 23:34:36 +0000 (16:34 -0700)
Multiple decoders were getting allocated per frame.
If the decoder crashed we exitted with out freeing
them and the next time in we'd allocate over.

This fix removes the allocation and just has 8
boolcoders in the pbi structure

Change-Id: I638b5bda23b622b43b7992aec21dd7cf6f6278da

vp8/decoder/decodframe.c
vp8/decoder/onyxd_if.c
vp8/decoder/onyxd_int.h

index 1a462a2cc897418e3ea4733468a4d909b607e59c..ea8798f477dd1c99172eea90710cee50a1a65417 100644 (file)
@@ -831,9 +831,7 @@ static void setup_token_decoder(VP8D_COMP *pbi,
     num_token_partitions = 1 << pbi->common.multi_token_partition;
     if (num_token_partitions > 1)
     {
-        CHECK_MEM_ERROR(pbi->mbc, vpx_malloc(num_token_partitions *
-                                             sizeof(vp8_reader)));
-        bool_decoder = pbi->mbc;
+        bool_decoder = &pbi->mbc[0];
     }
 
     /* Check for partitions within the fragments and unpack the fragments
@@ -907,16 +905,6 @@ static void setup_token_decoder(VP8D_COMP *pbi,
 #endif
 }
 
-static void stop_token_decoder(VP8D_COMP *pbi)
-{
-    VP8_COMMON *pc = &pbi->common;
-
-    if (pc->multi_token_partition != ONE_PARTITION)
-    {
-        vpx_free(pbi->mbc);
-        pbi->mbc = NULL;
-    }
-}
 
 static void init_frame(VP8D_COMP *pbi)
 {
@@ -1441,8 +1429,6 @@ int vp8_decode_frame(VP8D_COMP *pbi)
         corrupt_tokens |= xd->corrupted;
     }
 
-    stop_token_decoder(pbi);
-
     /* Collect information about decoder corruption. */
     /* 1. Check first boolean decoder for errors. */
     pc->yv12_fb[pc->new_fb_idx].corrupted = vp8dx_bool_error(bc);
index 205c150bd43a9342c35659733a2148352a89ba27..95293f4214765018a11965e11b7730391ebda9bb 100644 (file)
@@ -120,7 +120,6 @@ void vp8dx_remove_decompressor(VP8D_COMP *pbi)
     vp8_de_alloc_overlap_lists(pbi);
 #endif
     vp8_remove_common(&pbi->common);
-    vpx_free(pbi->mbc);
     vpx_free(pbi);
 }
 
index 240f5f727adeef006fe16255d379e3f27b6fe058..e6c814accd7417181fc7d2484338beef6c70d021 100644 (file)
@@ -77,7 +77,7 @@ typedef struct VP8D_COMP
     /* end of threading data */
 #endif
 
-    vp8_reader *mbc;
+    vp8_reader mbc[8];
     int64_t last_time_stamp;
     int   ready_for_new_data;