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 | |
parent | 3c77de369e3a6043af63f8e903ef77e990132258 (diff) | |
download | jellything-ba6942c04945c2d9b9d4672a68c85d43ade0b5c8.tar jellything-ba6942c04945c2d9b9d4672a68c85d43ade0b5c8.tar.bz2 jellything-ba6942c04945c2d9b9d4672a68c85d43ade0b5c8.tar.zst |
fixed implicit tag closing
Diffstat (limited to 'ebml')
-rw-r--r-- | ebml/Cargo.toml | 2 | ||||
-rw-r--r-- | ebml/src/lib.rs | 1 | ||||
-rw-r--r-- | ebml/src/read.rs | 9 |
3 files changed, 8 insertions, 4 deletions
diff --git a/ebml/Cargo.toml b/ebml/Cargo.toml index ec58cc4..6dfc8f9 100644 --- a/ebml/Cargo.toml +++ b/ebml/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "ebml" +name = "jellyebml" version = "0.1.0" edition = "2021" diff --git a/ebml/src/lib.rs b/ebml/src/lib.rs index 078995e..bcba8fd 100644 --- a/ebml/src/lib.rs +++ b/ebml/src/lib.rs @@ -2,6 +2,7 @@ pub mod matroska; pub mod read; pub mod size; pub mod write; +pub mod unflatten; use matroska::MatroskaTag; pub use read::ReadValue; 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( |