diff options
Diffstat (limited to 'ebml/src/read.rs')
-rw-r--r-- | ebml/src/read.rs | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/ebml/src/read.rs b/ebml/src/read.rs index 133f2ae..1b4159d 100644 --- a/ebml/src/read.rs +++ b/ebml/src/read.rs @@ -74,7 +74,7 @@ impl EbmlReader { Ok(EbmlSize::from_vint(self.read_vint_len()?)) } pub fn read_stuff(&mut self) -> Result<()> { - if let Some(e) = self.stack.last().map(|e| *e) { + while let Some(e) = self.stack.last().map(|e| *e) { if let Some(end) = e.end { if self.position >= end { if self.position != end { @@ -83,7 +83,11 @@ impl EbmlReader { self.stack.pop(); self.queue .push_back(MatroskaTag::construct_master(e.id, Master::End)?); + } else { + break; } + } else { + break; } } @@ -101,8 +105,7 @@ impl EbmlReader { // we have slightly different rules for closing tags implicitly // this closes as many tags as needed to make the next tag a valid child while let Some(tag @ StackTag { end: None, .. }) = self.stack.last() { - let valid_child = path.last() == Some(&tag.id); - if valid_child { + if path.last() == Some(&tag.id) { break; } else { self.queue.push_back(MatroskaTag::construct_master( |