diff options
Diffstat (limited to 'src/reader/parser/outside_tag.rs')
-rw-r--r-- | src/reader/parser/outside_tag.rs | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/reader/parser/outside_tag.rs b/src/reader/parser/outside_tag.rs index 8104224..e62f862 100644 --- a/src/reader/parser/outside_tag.rs +++ b/src/reader/parser/outside_tag.rs @@ -31,6 +31,8 @@ impl PullParser { if self.buf.is_empty() { self.push_pos(); + } else if self.buf.len() > self.config.max_data_length { + return Some(self.error(SyntaxError::ExceededConfiguredLimit)); } self.buf.push(c); None @@ -47,7 +49,10 @@ impl PullParser { if let Some(s) = t.as_static_str() { if self.buf.is_empty() { self.push_pos(); + } else if self.buf.len() > self.config.max_data_length { + return Some(self.error(SyntaxError::ExceededConfiguredLimit)); } + self.buf.push_str(s); } None @@ -60,6 +65,9 @@ impl PullParser { Token::ReferenceEnd if self.depth() > 0 => { // Semi-colon in a text outside an entity self.inside_whitespace = false; + if self.buf.len() > self.config.max_data_length { + return Some(self.error(SyntaxError::ExceededConfiguredLimit)); + } Token::ReferenceEnd.push_to_string(&mut self.buf); None }, @@ -85,6 +93,7 @@ impl PullParser { if self.inside_whitespace && self.config.c.trim_whitespace { None } else if self.inside_whitespace && !self.config.c.whitespace_to_characters { + debug_assert!(buf.chars().all(|ch| ch.is_whitespace()), "ws={buf:?}"); Some(Ok(XmlEvent::Whitespace(buf))) } else if self.config.c.trim_whitespace { Some(Ok(XmlEvent::Characters(buf.trim_matches(is_whitespace_char).into()))) @@ -166,7 +175,7 @@ impl PullParser { self.into_state(State::OutsideTag, next_event) }, - Token::CommentStart => { + Token::CommentStart => { let next_event = self.set_encountered(Encountered::Comment); self.into_state(State::InsideComment, next_event) } |