diff --git a/Changelog.md b/Changelog.md index 7d34d9a5..dccb8a78 100644 --- a/Changelog.md +++ b/Changelog.md @@ -17,6 +17,8 @@ - [#530]: Fix an infinity loop that leads to an infinity memory consumption during skipping events when `overlapped-lists` feature is active and malformed XML is parsed +- [#530]: Fix an error in the `Deserializer::read_to_end` when `overlapped-lists` + feature is active and malformed XML is parsed ### Misc Changes diff --git a/src/de/mod.rs b/src/de/mod.rs index 26bbab16..e63eb59a 100644 --- a/src/de/mod.rs +++ b/src/de/mod.rs @@ -2237,7 +2237,7 @@ where } Some(DeEvent::End(e)) if e.name() == name => { if depth == 0 { - return Ok(()); + break; } depth -= 1; } @@ -2247,9 +2247,19 @@ where // If we do not have skipped events, use effective reading that will // not allocate memory for events - None => return self.reader.read_to_end(name), + None => { + loop { + self.reader.read_to_end(name)?; + if depth == 0 { + break; + } + depth -= 1; + } + break; + } } } + Ok(()) } #[cfg(not(feature = "overlapped-lists"))] fn read_to_end(&mut self, name: QName) -> Result<(), DeError> {