diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2012-11-25 02:36:34 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-11-25 02:40:59 +0100 |
commit | 48cbdaea157671d456750e00fde37c6d7595fad6 (patch) | |
tree | f70d7514d1d1e9066537809f4c9a3d59e96e134e /libavcodec/smacker.c | |
parent | e6305f7631317d358d64cc4cb60dea048efaec2e (diff) | |
download | ffmpeg-48cbdaea157671d456750e00fde37c6d7595fad6.tar.gz |
smacker: fix smacker_decode_header_tree() empty vlc table init
Fixes Ticket1858
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/smacker.c')
-rw-r--r-- | libavcodec/smacker.c | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/libavcodec/smacker.c b/libavcodec/smacker.c index dbcbbd54c8..ce1262d90b 100644 --- a/libavcodec/smacker.c +++ b/libavcodec/smacker.c @@ -207,27 +207,33 @@ static int smacker_decode_header_tree(SmackVContext *smk, GetBitContext *gb, int if(get_bits1(gb)) { smacker_decode_tree(gb, &tmp1, 0, 0); skip_bits1(gb); - res = init_vlc(&vlc[0], SMKTREE_BITS, tmp1.length, - tmp1.lengths, sizeof(int), sizeof(int), - tmp1.bits, sizeof(uint32_t), sizeof(uint32_t), INIT_VLC_LE); - if(res < 0) { - av_log(smk->avctx, AV_LOG_ERROR, "Cannot build VLC table\n"); - return AVERROR_INVALIDDATA; + if(tmp1.current > 1) { + res = init_vlc(&vlc[0], SMKTREE_BITS, tmp1.length, + tmp1.lengths, sizeof(int), sizeof(int), + tmp1.bits, sizeof(uint32_t), sizeof(uint32_t), INIT_VLC_LE); + if(res < 0) { + av_log(smk->avctx, AV_LOG_ERROR, "Cannot build VLC table\n"); + return AVERROR_INVALIDDATA; + } } - } else { + } + if (!vlc[0].table) { av_log(smk->avctx, AV_LOG_ERROR, "Skipping low bytes tree\n"); } if(get_bits1(gb)){ smacker_decode_tree(gb, &tmp2, 0, 0); skip_bits1(gb); - res = init_vlc(&vlc[1], SMKTREE_BITS, tmp2.length, - tmp2.lengths, sizeof(int), sizeof(int), - tmp2.bits, sizeof(uint32_t), sizeof(uint32_t), INIT_VLC_LE); - if(res < 0) { - av_log(smk->avctx, AV_LOG_ERROR, "Cannot build VLC table\n"); - return AVERROR_INVALIDDATA; + if(tmp2.current > 1) { + res = init_vlc(&vlc[1], SMKTREE_BITS, tmp2.length, + tmp2.lengths, sizeof(int), sizeof(int), + tmp2.bits, sizeof(uint32_t), sizeof(uint32_t), INIT_VLC_LE); + if(res < 0) { + av_log(smk->avctx, AV_LOG_ERROR, "Cannot build VLC table\n"); + return AVERROR_INVALIDDATA; + } } - } else { + } + if (!vlc[1].table) { av_log(smk->avctx, AV_LOG_ERROR, "Skipping high bytes tree\n"); } |