Mercurial > mplayer.hg
changeset 22147:f4f90f0f5d2b
Add missing checks in RealVideo slice handling code.
author | reimar |
---|---|
date | Tue, 06 Feb 2007 18:30:56 +0000 |
parents | 9b6273ea9ce9 |
children | 19bfd17ba231 |
files | libmpcodecs/vd_ffmpeg.c |
diffstat | 1 files changed, 5 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/libmpcodecs/vd_ffmpeg.c Tue Feb 06 13:56:40 2007 +0000 +++ b/libmpcodecs/vd_ffmpeg.c Tue Feb 06 18:30:56 2007 +0000 @@ -764,15 +764,17 @@ if(sh->bih->biSize>=sizeof(*sh->bih)+8){ int i; dp_hdr_t *hdr= (dp_hdr_t*)data; + uint32_t *offsets = (uint32_t*)(data + hdr->chunktab) + 1; + char *end = data + len; if(avctx->slice_offset==NULL) avctx->slice_offset= av_malloc(sizeof(int)*1000); // for(i=0; i<25; i++) printf("%02X ", ((uint8_t*)data)[i]); - avctx->slice_count= hdr->chunks+1; - for(i=0; i<avctx->slice_count; i++) - avctx->slice_offset[i]= ((uint32_t*)(data+hdr->chunktab))[2*i+1]; + avctx->slice_count= FFMIN(hdr->chunks+1, 1000); + for(i=0; i<avctx->slice_count && end >= &offsets[2*i+1]; i++) + avctx->slice_offset[i]= offsets[2*i]; len=hdr->len; data+= sizeof(dp_hdr_t); }