fn parse_strf_vids(dmx: &mut AVIDemuxer, strmgr: &mut StreamManager, size: usize) -> DemuxerResult<usize> {
if size < 40 { return Err(InvalidData); }
let bi_size = dmx.src.read_u32le()?;
- if (bi_size as usize) > size { return Err(InvalidData); }
+ if (bi_size as usize) < 40 { return Err(InvalidData); }
let width = dmx.src.read_u32le()?;
let height = dmx.src.read_u32le()? as i32;
let planes = dmx.src.read_u16le()?;
let soniton = NASoniton::new(bits_per_sample as u8, SONITON_FLAG_SIGNED);
let ahdr = NAAudioInfo::new(samplespersec, channels as u8, soniton, block_align as usize);
- let edata = dmx.read_extradata(size - 16)?;
+ let edata;
+ if size > 16 {
+ let edata_size = dmx.src.read_u16le()? as usize;
+ validate!(edata_size + 18 == size);
+ edata = dmx.read_extradata(size - 18)?;
+ } else {
+ edata = None;
+ }
let cname = match register::find_codec_from_wav_twocc(w_format_tag) {
None => "unknown",
Some(name) => name,