From b5c1fb201343e84a68be00dec28f580d714e0f0c Mon Sep 17 00:00:00 2001 From: ConnorSkees <39542938+ConnorSkees@users.noreply.github.com> Date: Sun, 24 May 2020 13:08:31 -0400 Subject: [PATCH] ignore non-ascii numeric characters in numbers --- src/utils/number.rs | 2 +- src/value/parse.rs | 2 +- tests/units.rs | 5 +++++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/utils/number.rs b/src/utils/number.rs index e1727b8..0a3f167 100644 --- a/src/utils/number.rs +++ b/src/utils/number.rs @@ -124,7 +124,7 @@ pub(crate) fn eat_number<I: Iterator<Item = Token>>( fn eat_whole_number<I: Iterator<Item = Token>>(toks: &mut PeekMoreIterator<I>, buf: &mut String) { while let Some(c) = toks.peek() { - if !c.kind.is_numeric() { + if !c.kind.is_ascii_digit() { break; } let tok = toks.next().unwrap(); diff --git a/src/value/parse.rs b/src/value/parse.rs index a4f9216..0aa1252 100644 --- a/src/value/parse.rs +++ b/src/value/parse.rs @@ -682,7 +682,7 @@ impl Value { let unit = if let Some(tok) = toks.peek() { let Token { kind, pos } = *tok; match kind { - 'a'..='z' | 'A'..='Z' | '_' | '\\' => { + 'a'..='z' | 'A'..='Z' | '_' | '\\' | '\u{7f}'..=std::char::MAX => { let u = match eat_ident_no_interpolation(toks, true, pos) { Ok(v) => v, Err(e) => return Some(Err(e)), diff --git a/tests/units.rs b/tests/units.rs index 76c837e..6fbcc6a 100644 --- a/tests/units.rs +++ b/tests/units.rs @@ -84,6 +84,11 @@ test!( "a {\n color: unit(1\\9);\n}\n", "a {\n color: \"\\\\9 \";\n}\n" ); +test!( + non_ascii_numeric_interpreted_as_unit, + "a {\n color: 2߄;\n}\n", + "@charset \"UTF-8\";\na {\n color: 2߄;\n}" +); error!( display_single_mul, "a {\n color: 1rem * 1px;\n}\n", "Error: 1rem*px isn't a valid CSS value."