aboutsummaryrefslogtreecommitdiff
path: root/ebml/src
diff options
context:
space:
mode:
Diffstat (limited to 'ebml/src')
-rw-r--r--ebml/src/lib.rs1
-rw-r--r--ebml/src/read.rs9
2 files changed, 7 insertions, 3 deletions
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(