From f8b8025d7c1801bdd0004f6b018fb551861d0548 Mon Sep 17 00:00:00 2001 From: ConnorSkees <39542938+ConnorSkees@users.noreply.github.com> Date: Sun, 17 May 2020 11:09:21 -0400 Subject: [PATCH] fix panic when missing colon in style --- src/lib.rs | 7 +++---- src/style.rs | 10 ++++++---- tests/error.rs | 4 ++++ 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index f838fb1..58ef1c4 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -190,21 +190,20 @@ pub(crate) fn eat_expr>( span = span.merge(tok.pos()); match tok.kind { ':' => { - let tok = toks.next(); + let tok = toks.next().unwrap(); + values.push(tok); if devour_whitespace(toks) { let prop = Style::parse_property( &mut values.into_iter().peekmore(), scope, super_selector, String::new(), - tok.unwrap().pos, + tok.pos, )?; return Ok(Some(Spanned { node: Style::from_tokens(toks, scope, super_selector, prop)?, span, })); - } else { - values.push(tok.unwrap()); } } ';' => { diff --git a/src/style.rs b/src/style.rs index 71aac9a..84e9220 100644 --- a/src/style.rs +++ b/src/style.rs @@ -199,19 +199,21 @@ impl<'a> StyleParser<'a> { span_before: Span, ) -> SassResult { devour_whitespace(toks); - let property = eat_ident(toks, self.scope, self.super_selector, span_before)?.node; + let property = eat_ident(toks, self.scope, self.super_selector, span_before)?; devour_whitespace_or_comment(toks)?; if toks.peek().is_some() && toks.peek().unwrap().kind == ':' { toks.next(); devour_whitespace_or_comment(toks)?; + } else { + return Err(("Expected \":\".", property.span).into()); } if super_property.is_empty() { - Ok(property) + Ok(property.node) } else { - super_property.reserve(1 + property.len()); + super_property.reserve(1 + property.node.len()); super_property.push('-'); - super_property.push_str(&property); + super_property.push_str(&property.node); Ok(super_property) } } diff --git a/tests/error.rs b/tests/error.rs index 011b9aa..26820d1 100644 --- a/tests/error.rs +++ b/tests/error.rs @@ -62,3 +62,7 @@ error!( nothing_after_at_sign, "a {color: red; @", "Error: Expected identifier." ); +error!( + missing_colon_in_style, + "a {color, red;}", "Error: Expected \":\"." +);