aboutsummaryrefslogtreecommitdiff
path: root/ebml/src/read.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2023-01-15 11:18:15 +0100
committermetamuffin <metamuffin@disroot.org>2023-01-15 11:18:15 +0100
commitba6942c04945c2d9b9d4672a68c85d43ade0b5c8 (patch)
treeae5b03f86a66dde3ad3f9177b7ae057222572cbd /ebml/src/read.rs
parent3c77de369e3a6043af63f8e903ef77e990132258 (diff)
downloadjellything-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.rs9
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(