diff options
author | metamuffin <metamuffin@disroot.org> | 2023-01-15 11:18:15 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2023-01-15 11:18:15 +0100 |
commit | ba6942c04945c2d9b9d4672a68c85d43ade0b5c8 (patch) | |
tree | ae5b03f86a66dde3ad3f9177b7ae057222572cbd /ebml/src/read.rs | |
parent | 3c77de369e3a6043af63f8e903ef77e990132258 (diff) | |
download | jellything-ba6942c04945c2d9b9d4672a68c85d43ade0b5c8.tar jellything-ba6942c04945c2d9b9d4672a68c85d43ade0b5c8.tar.bz2 jellything-ba6942c04945c2d9b9d4672a68c85d43ade0b5c8.tar.zst |
fixed implicit tag closing
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( |