- if let RIFFTag::List(ctag, clst) = CHUNKS[i].tag {
- if ctag == tag && clst == ltag {
- let mut rest_size = size - 4;
- let psize = (CHUNKS[i].parse)(self, rest_size)?;
+ if RIFFTag::List(tag, ltag) == CHUNKS[i].tag {
+ let mut rest_size = size - 4;
+ let psize = (CHUNKS[i].parse)(self, rest_size)?;
+ if psize > rest_size { return Err(InvalidData); }
+ rest_size -= psize;
+ while rest_size > 0 {
+ let (psize, _) = self.parse_chunk(end_tag, rest_size, depth+1)?;