Mercurial > libavformat.hg
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 |