mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
smacker: check the return value of smacker_decode_tree
Also prevent a memory leak. Reported-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind CC: libav-stable@libav.org Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
This commit is contained in:
parent
f52edef301
commit
bbb2945f2d
@ -629,7 +629,16 @@ static int smka_decode_frame(AVCodecContext *avctx, void *data,
|
|||||||
h[i].lengths = av_mallocz(256 * sizeof(int));
|
h[i].lengths = av_mallocz(256 * sizeof(int));
|
||||||
h[i].values = av_mallocz(256 * sizeof(int));
|
h[i].values = av_mallocz(256 * sizeof(int));
|
||||||
skip_bits1(&gb);
|
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);
|
skip_bits1(&gb);
|
||||||
if(h[i].current > 1) {
|
if(h[i].current > 1) {
|
||||||
res = init_vlc(&vlc[i], SMKTREE_BITS, h[i].length,
|
res = init_vlc(&vlc[i], SMKTREE_BITS, h[i].length,
|
||||||
|
Loading…
Reference in New Issue
Block a user