mirror of
https://git.videolan.org/git/ffmpeg.git
synced 2024-08-28 12:16:12 +02:00
Fixed size given to init_get_bits() in xan decoder.
This commit is contained in:
parent
826c56d16e
commit
393d5031c6
@ -95,17 +95,18 @@ static av_cold int xan_decode_init(AVCodecContext *avctx)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int xan_huffman_decode(unsigned char *dest, const unsigned char *src,
|
static int xan_huffman_decode(unsigned char *dest, int dest_len,
|
||||||
int dest_len)
|
const unsigned char *src, int src_len)
|
||||||
{
|
{
|
||||||
unsigned char byte = *src++;
|
unsigned char byte = *src++;
|
||||||
unsigned char ival = byte + 0x16;
|
unsigned char ival = byte + 0x16;
|
||||||
const unsigned char * ptr = src + byte*2;
|
const unsigned char * ptr = src + byte*2;
|
||||||
|
int ptr_len = src_len - 1 - byte*2;
|
||||||
unsigned char val = ival;
|
unsigned char val = ival;
|
||||||
unsigned char *dest_end = dest + dest_len;
|
unsigned char *dest_end = dest + dest_len;
|
||||||
GetBitContext gb;
|
GetBitContext gb;
|
||||||
|
|
||||||
init_get_bits(&gb, ptr, 0); // FIXME: no src size available
|
init_get_bits(&gb, ptr, ptr_len * 8);
|
||||||
|
|
||||||
while ( val != 0x16 ) {
|
while ( val != 0x16 ) {
|
||||||
val = src[val - 0x17 + get_bits1(&gb) * byte];
|
val = src[val - 0x17 + get_bits1(&gb) * byte];
|
||||||
@ -270,7 +271,8 @@ static void xan_wc3_decode_frame(XanContext *s) {
|
|||||||
vector_segment = s->buf + AV_RL16(&s->buf[4]);
|
vector_segment = s->buf + AV_RL16(&s->buf[4]);
|
||||||
imagedata_segment = s->buf + AV_RL16(&s->buf[6]);
|
imagedata_segment = s->buf + AV_RL16(&s->buf[6]);
|
||||||
|
|
||||||
xan_huffman_decode(opcode_buffer, huffman_segment, opcode_buffer_size);
|
xan_huffman_decode(opcode_buffer, opcode_buffer_size,
|
||||||
|
huffman_segment, s->size - (huffman_segment - s->buf) );
|
||||||
|
|
||||||
if (imagedata_segment[0] == 2)
|
if (imagedata_segment[0] == 2)
|
||||||
xan_unpack(s->buffer2, &imagedata_segment[1], s->buffer2_size);
|
xan_unpack(s->buffer2, &imagedata_segment[1], s->buffer2_size);
|
||||||
|
Loading…
Reference in New Issue
Block a user