Mercurial > libavcodec.hg
comparison cook.c @ 9565:5c1aeaf1bc12 libavcodec
Proper subpacket size check for cook multichannel files.
author | banan |
---|---|
date | Sat, 25 Apr 2009 20:09:34 +0000 |
parents | 2bc00c8d1311 |
children | 62d00a9c3824 |
comparison
equal
deleted
inserted
replaced
9564:2bc00c8d1311 | 9565:5c1aeaf1bc12 |
---|---|
70 int *previous; | 70 int *previous; |
71 } cook_gains; | 71 } cook_gains; |
72 | 72 |
73 typedef struct { | 73 typedef struct { |
74 int ch_idx; | 74 int ch_idx; |
75 unsigned int size; | 75 int size; |
76 int num_channels; | 76 int num_channels; |
77 int cookversion; | 77 int cookversion; |
78 int samples_per_frame; | 78 int samples_per_frame; |
79 int subbands; | 79 int subbands; |
80 int js_subband_start; | 80 int js_subband_start; |
1009 q->subpacket[0].size = avctx->block_align; | 1009 q->subpacket[0].size = avctx->block_align; |
1010 | 1010 |
1011 for(i=1;i<q->num_subpackets;i++){ | 1011 for(i=1;i<q->num_subpackets;i++){ |
1012 q->subpacket[i].size = 2 * buf[avctx->block_align - q->num_subpackets + i]; | 1012 q->subpacket[i].size = 2 * buf[avctx->block_align - q->num_subpackets + i]; |
1013 q->subpacket[0].size -= q->subpacket[i].size + 1; | 1013 q->subpacket[0].size -= q->subpacket[i].size + 1; |
1014 if (q->subpacket[0].size < 0) { | |
1015 av_log(avctx,AV_LOG_DEBUG,"frame subpacket size total > avctx->block_align!\n"); | |
1016 return -1; | |
1017 } | |
1014 } | 1018 } |
1015 | 1019 |
1016 /* decode supbackets */ | 1020 /* decode supbackets */ |
1017 *data_size = 0; | 1021 *data_size = 0; |
1018 for(i=0;i<q->num_subpackets;i++){ | 1022 for(i=0;i<q->num_subpackets;i++){ |