From 6e7f1cc31975ecbc369257fcb840b02cc933e8af Mon Sep 17 00:00:00 2001 From: ConnorSkees <39542938+ConnorSkees@users.noreply.github.com> Date: Sun, 17 May 2020 00:08:50 -0400 Subject: [PATCH] remove some panicking --- src/lib.rs | 5 ++++- src/value/parse.rs | 6 ++++-- tests/error.rs | 5 +++++ 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index a4a9db8..cdecd37 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -326,7 +326,10 @@ pub(crate) fn eat_expr>( } } '@' => { - toks.next(); + let span = toks.next().unwrap().pos(); + if toks.peek().is_none() { + return Err(("Expected identifier.", span).into()); + } let Spanned { node: ident, span } = eat_ident(toks, scope, super_selector)?; devour_whitespace(toks); let rule = AtRule::from_tokens( diff --git a/src/value/parse.rs b/src/value/parse.rs index 1ced72d..eadfff0 100644 --- a/src/value/parse.rs +++ b/src/value/parse.rs @@ -885,8 +885,10 @@ impl Value { } } ';' | '}' | '{' => return None, - ':' | '?' | ')' | '@' => return Some(Err(("expected \";\".", span).into())), - v if v.is_control() => return Some(Err(("Expected expression.", span).into())), + ':' | '?' | ')' | '@' | '^' => return Some(Err(("expected \";\".", span).into())), + v if v as u32 >= 0x80 || v.is_control() => { + return Some(Err(("Expected expression.", span).into())) + } v => todo!("unexpected token in value parsing: {:?}", v), })) } diff --git a/tests/error.rs b/tests/error.rs index ac25f26..011b9aa 100644 --- a/tests/error.rs +++ b/tests/error.rs @@ -57,3 +57,8 @@ error!( no_value_after_forward_slash, "a {color: 303/;}", "Error: Expected expression." ); +error!(xor_in_value, "a {color: a^;}", "Error: expected \";\"."); +error!( + nothing_after_at_sign, + "a {color: red; @", "Error: Expected identifier." +);