comparison avidec.c @ 4552:da2be12b7b4b libavformat

Handle chunks with the MSB in size set correctly that is unsigned.
author michael
date Sat, 21 Feb 2009 20:11:34 +0000
parents a36f9f2eefcb
children e219c0cdcf8a
comparison
equal deleted inserted replaced
4551:68138429410b 4552:da2be12b7b4b
641 641
642 static int avi_read_packet(AVFormatContext *s, AVPacket *pkt) 642 static int avi_read_packet(AVFormatContext *s, AVPacket *pkt)
643 { 643 {
644 AVIContext *avi = s->priv_data; 644 AVIContext *avi = s->priv_data;
645 ByteIOContext *pb = s->pb; 645 ByteIOContext *pb = s->pb;
646 int n, d[8], size; 646 int n, d[8];
647 unsigned int size;
647 int64_t i, sync; 648 int64_t i, sync;
648 void* dstr; 649 void* dstr;
649 650
650 if (CONFIG_DV_DEMUXER && avi->dv_demux) { 651 if (CONFIG_DV_DEMUXER && avi->dv_demux) {
651 size = dv_get_packet(avi->dv_demux, pkt); 652 int size = dv_get_packet(avi->dv_demux, pkt);
652 if (size >= 0) 653 if (size >= 0)
653 return size; 654 return size;
654 } 655 }
655 656
656 if(avi->non_interleaved){ 657 if(avi->non_interleaved){
786 787
787 size= d[4] + (d[5]<<8) + (d[6]<<16) + (d[7]<<24); 788 size= d[4] + (d[5]<<8) + (d[6]<<16) + (d[7]<<24);
788 789
789 n= get_stream_idx(d+2); 790 n= get_stream_idx(d+2);
790 //av_log(s, AV_LOG_DEBUG, "%X %X %X %X %X %X %X %X %"PRId64" %d %d\n", d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], i, size, n); 791 //av_log(s, AV_LOG_DEBUG, "%X %X %X %X %X %X %X %X %"PRId64" %d %d\n", d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], i, size, n);
791 if(i + size > avi->fsize || d[0]<0) 792 if(i + (uint64_t)size > avi->fsize || d[0]<0)
792 continue; 793 continue;
793 794
794 //parse ix## 795 //parse ix##
795 if( (d[0] == 'i' && d[1] == 'x' && n < s->nb_streams) 796 if( (d[0] == 'i' && d[1] == 'x' && n < s->nb_streams)
796 //parse JUNK 797 //parse JUNK