diff options
author | Kostya Shishkov <kostya.shishkov@gmail.com> | 2013-06-12 14:27:00 +0200 |
---|---|---|
committer | Reinhard Tartler <siretart@tauware.de> | 2013-06-30 16:06:30 +0200 |
commit | d7b7b10518ccd638131ef41062e1bc0c608628f7 (patch) | |
tree | 51e5a603b136585988b3488383a6c2805e061865 | |
parent | e96aaa5622ed2efeb3729f46331990d952208a17 (diff) | |
download | ffmpeg-d7b7b10518ccd638131ef41062e1bc0c608628f7.tar.gz |
smacker: check the return value of smacker_decode_tree
Reported-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
CC: libav-stable@libav.org
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
(cherry picked from commit a2f9937bb04b23a341b0ec0eb1d923bbeb420277)
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
-rw-r--r-- | libavcodec/smacker.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/libavcodec/smacker.c b/libavcodec/smacker.c index f74f0dbc54..e9192ffd0c 100644 --- a/libavcodec/smacker.c +++ b/libavcodec/smacker.c @@ -648,7 +648,16 @@ static int smka_decode_frame(AVCodecContext *avctx, void *data, h[i].lengths = av_mallocz(256 * sizeof(int)); h[i].values = av_mallocz(256 * sizeof(int)); skip_bits1(&gb); - smacker_decode_tree(&gb, &h[i], 0, 0); + if (smacker_decode_tree(&gb, &h[i], 0, 0) < 0) { + for (; i >= 0; i--) { + if (vlc[i].table) + ff_free_vlc(&vlc[i]); + av_free(h[i].bits); + av_free(h[i].lengths); + av_free(h[i].values); + } + return AVERROR_INVALIDDATA; + } skip_bits1(&gb); if(h[i].current > 1) { res = init_vlc(&vlc[i], SMKTREE_BITS, h[i].length, |