diff options
Diffstat (limited to 'src/reader/parser/inside_doctype.rs')
-rw-r--r-- | src/reader/parser/inside_doctype.rs | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/src/reader/parser/inside_doctype.rs b/src/reader/parser/inside_doctype.rs index 93ea470..87595d6 100644 --- a/src/reader/parser/inside_doctype.rs +++ b/src/reader/parser/inside_doctype.rs @@ -31,8 +31,8 @@ impl PullParser { _ => None, }, DoctypeSubstate::String => match t { - Token::SingleQuote if self.data.quote != Some(QuoteToken::SingleQuoteToken) => { None }, - Token::DoubleQuote if self.data.quote != Some(QuoteToken::DoubleQuoteToken) => { None }, + Token::SingleQuote if self.data.quote != Some(QuoteToken::SingleQuoteToken) => None, + Token::DoubleQuote if self.data.quote != Some(QuoteToken::DoubleQuoteToken) => None, Token::SingleQuote | Token::DoubleQuote => { self.data.quote = None; self.into_state_continue(State::InsideDoctype(DoctypeSubstate::Outside)) @@ -51,12 +51,12 @@ impl PullParser { None }, Token::Character(c) if is_whitespace_char(c) => { - match self.buf.as_str() { + let buf = self.take_buf(); + match buf.as_str() { "ENTITY" => self.into_state_continue(State::InsideDoctype(DoctypeSubstate::BeforeEntityName)), "NOTATION" | "ELEMENT" | "ATTLIST" => self.into_state_continue(State::InsideDoctype(DoctypeSubstate::SkipDeclaration)), - s => Some(self.error(SyntaxError::UnknownMarkupDeclaration(s.into()))), + _ => Some(self.error(SyntaxError::UnknownMarkupDeclaration(buf.into()))), } - }, _ => Some(self.error(SyntaxError::UnexpectedToken(t))), }, @@ -69,6 +69,9 @@ impl PullParser { self.into_state_continue(State::InsideDoctype(DoctypeSubstate::PEReferenceDefinitionStart)) }, Token::Character(c) if is_name_start_char(c) => { + if self.data.name.len() > self.config.max_name_length { + return Some(self.error(SyntaxError::ExceededConfiguredLimit)); + } self.data.name.push(c); self.into_state_continue(State::InsideDoctype(DoctypeSubstate::EntityName)) }, @@ -80,6 +83,9 @@ impl PullParser { self.into_state_continue(State::InsideDoctype(DoctypeSubstate::BeforeEntityValue)) }, Token::Character(c) if is_name_char(c) => { + if self.data.name.len() > self.config.max_name_length { + return Some(self.error(SyntaxError::ExceededConfiguredLimit)); + } self.data.name.push(c); None }, @@ -144,6 +150,9 @@ impl PullParser { }, DoctypeSubstate::PEReferenceDefinition => match t { Token::Character(c) if is_name_char(c) => { + if self.data.name.len() > self.config.max_name_length { + return Some(self.error(SyntaxError::ExceededConfiguredLimit)); + } self.data.name.push(c); None }, |