dpcm: ignore extra unpaired bytes in stereo streams.
Fixes: CVE-2011-3951 Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
This commit is contained in:
parent
3e13005cac
commit
ce7aee9b73
@ -183,6 +183,11 @@ static int dpcm_decode_frame(AVCodecContext *avctx, void *data,
|
|||||||
int stereo = s->channels - 1;
|
int stereo = s->channels - 1;
|
||||||
int16_t *output_samples;
|
int16_t *output_samples;
|
||||||
|
|
||||||
|
if (stereo && (buf_size & 1)) {
|
||||||
|
buf_size--;
|
||||||
|
buf_end--;
|
||||||
|
}
|
||||||
|
|
||||||
/* calculate output size */
|
/* calculate output size */
|
||||||
switch(avctx->codec->id) {
|
switch(avctx->codec->id) {
|
||||||
case CODEC_ID_ROQ_DPCM:
|
case CODEC_ID_ROQ_DPCM:
|
||||||
@ -317,7 +322,7 @@ static int dpcm_decode_frame(AVCodecContext *avctx, void *data,
|
|||||||
*got_frame_ptr = 1;
|
*got_frame_ptr = 1;
|
||||||
*(AVFrame *)data = s->frame;
|
*(AVFrame *)data = s->frame;
|
||||||
|
|
||||||
return buf_size;
|
return avpkt->size;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define DPCM_DECODER(id_, name_, long_name_) \
|
#define DPCM_DECODER(id_, name_, long_name_) \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user