mirror of https://git.ffmpeg.org/ffmpeg.git
Make decode_init fail if the huffman tables are invalid and thus init_vlc fails.
Otherwise this will crash during decoding because the vlc tables are NULL. Partially fixes ogv/smclock.ogv.1.101.ogv from issue 1240. Originally committed as revision 19355 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
31457d7a2e
commit
c4b7b8bf9c
|
@ -1788,29 +1788,34 @@ static av_cold int vp3_decode_init(AVCodecContext *avctx)
|
||||||
for (i = 0; i < 16; i++) {
|
for (i = 0; i < 16; i++) {
|
||||||
|
|
||||||
/* DC histograms */
|
/* DC histograms */
|
||||||
init_vlc(&s->dc_vlc[i], 5, 32,
|
if (init_vlc(&s->dc_vlc[i], 5, 32,
|
||||||
&s->huffman_table[i][0][1], 4, 2,
|
&s->huffman_table[i][0][1], 4, 2,
|
||||||
&s->huffman_table[i][0][0], 4, 2, 0);
|
&s->huffman_table[i][0][0], 4, 2, 0) < 0)
|
||||||
|
goto vlc_fail;
|
||||||
|
|
||||||
/* group 1 AC histograms */
|
/* group 1 AC histograms */
|
||||||
init_vlc(&s->ac_vlc_1[i], 5, 32,
|
if (init_vlc(&s->ac_vlc_1[i], 5, 32,
|
||||||
&s->huffman_table[i+16][0][1], 4, 2,
|
&s->huffman_table[i+16][0][1], 4, 2,
|
||||||
&s->huffman_table[i+16][0][0], 4, 2, 0);
|
&s->huffman_table[i+16][0][0], 4, 2, 0) < 0)
|
||||||
|
goto vlc_fail;
|
||||||
|
|
||||||
/* group 2 AC histograms */
|
/* group 2 AC histograms */
|
||||||
init_vlc(&s->ac_vlc_2[i], 5, 32,
|
if (init_vlc(&s->ac_vlc_2[i], 5, 32,
|
||||||
&s->huffman_table[i+16*2][0][1], 4, 2,
|
&s->huffman_table[i+16*2][0][1], 4, 2,
|
||||||
&s->huffman_table[i+16*2][0][0], 4, 2, 0);
|
&s->huffman_table[i+16*2][0][0], 4, 2, 0) < 0)
|
||||||
|
goto vlc_fail;
|
||||||
|
|
||||||
/* group 3 AC histograms */
|
/* group 3 AC histograms */
|
||||||
init_vlc(&s->ac_vlc_3[i], 5, 32,
|
if (init_vlc(&s->ac_vlc_3[i], 5, 32,
|
||||||
&s->huffman_table[i+16*3][0][1], 4, 2,
|
&s->huffman_table[i+16*3][0][1], 4, 2,
|
||||||
&s->huffman_table[i+16*3][0][0], 4, 2, 0);
|
&s->huffman_table[i+16*3][0][0], 4, 2, 0) < 0)
|
||||||
|
goto vlc_fail;
|
||||||
|
|
||||||
/* group 4 AC histograms */
|
/* group 4 AC histograms */
|
||||||
init_vlc(&s->ac_vlc_4[i], 5, 32,
|
if (init_vlc(&s->ac_vlc_4[i], 5, 32,
|
||||||
&s->huffman_table[i+16*4][0][1], 4, 2,
|
&s->huffman_table[i+16*4][0][1], 4, 2,
|
||||||
&s->huffman_table[i+16*4][0][0], 4, 2, 0);
|
&s->huffman_table[i+16*4][0][0], 4, 2, 0) < 0)
|
||||||
|
goto vlc_fail;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1844,6 +1849,10 @@ static av_cold int vp3_decode_init(AVCodecContext *avctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
vlc_fail:
|
||||||
|
av_log(avctx, AV_LOG_FATAL, "Invalid huffman table\n");
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue