Commit baa69710 authored by reimar's avatar reimar

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.


git-svn-id: file:///var/local/repositories/ffmpeg/trunk@19355 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent 633739c7
...@@ -1788,29 +1788,34 @@ static av_cold int vp3_decode_init(AVCodecContext *avctx) ...@@ -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) ...@@ -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;
} }
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment