avcodec/bitstream: Dont try to free buffers for static VLCs
authorMichael Niedermayer <michaelni@gmx.at>
Thu, 8 Aug 2013 13:05:48 +0000 (15:05 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Thu, 8 Aug 2013 13:05:48 +0000 (15:05 +0200)
Such buffers are not malloced thus freeing would be bad.
Note though this condition never could have happened so this
is more for correctness sake and not a true bugfix

Fixes CID1061047

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavcodec/bitstream.c

index 859dc62..299ee23 100644 (file)
@@ -304,13 +304,15 @@ int ff_init_vlc_sparse(VLC *vlc, int nb_bits, int nb_codes,
             continue;                                                       \
         if (buf[j].bits > 3*nb_bits || buf[j].bits>32) {                    \
             av_log(NULL, AV_LOG_ERROR, "Too long VLC (%d) in init_vlc\n", buf[j].bits);\
-            av_free(buf);                                                   \
+            if (!(flags & INIT_VLC_USE_NEW_STATIC))                         \
+                av_free(buf);                                               \
             return -1;                                                      \
         }                                                                   \
         GET_DATA(buf[j].code, codes, i, codes_wrap, codes_size);            \
         if (buf[j].code >= (1LL<<buf[j].bits)) {                            \
             av_log(NULL, AV_LOG_ERROR, "Invalid code in init_vlc\n");       \
-            av_free(buf);                                                   \
+            if (!(flags & INIT_VLC_USE_NEW_STATIC))                         \
+                av_free(buf);                                               \
             return -1;                                                      \
         }                                                                   \
         if (flags & INIT_VLC_LE)                                            \