From 8f84448302a5eab8e91839a2198255a0d8e130a7 Mon Sep 17 00:00:00 2001 From: Simon Sapin Date: Tue, 11 Apr 2017 13:48:57 +0800 Subject: [PATCH] Fix #133 parsing corner case Unexpected tokens after U+ are not an error, just not part of the . --- Cargo.toml | 2 +- src/css-parsing-tests/urange.json | 4 ++++ src/unicode_range.rs | 6 ++---- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index f90abaf6..74b4a006 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "cssparser" -version = "0.12.1" +version = "0.12.2" authors = [ "Simon Sapin " ] description = "Rust implementation of CSS Syntax Level 3" diff --git a/src/css-parsing-tests/urange.json b/src/css-parsing-tests/urange.json index d3b6bb54..64fb7f35 100644 --- a/src/css-parsing-tests/urange.json +++ b/src/css-parsing-tests/urange.json @@ -55,6 +55,10 @@ null ], +"U+2 , U+???", [ + [2, 2], + [0, 4095] +], "u+20-3F, u+3F-3F, u+3F-3E, U+0-110000, U+0-10FFFF, U+100000-2, U+1000000-2, U+10-200000", [ [32, 63], diff --git a/src/unicode_range.rs b/src/unicode_range.rs index 0de8f1ee..f13a1ad2 100644 --- a/src/unicode_range.rs +++ b/src/unicode_range.rs @@ -82,10 +82,8 @@ fn concatenate_tokens(input: &mut Parser, remaining: &mut &mut [u8]) -> Result<( let int_value = positive_integer_with_plus_sign(value)?; write!(remaining, "{}", int_value)?; + let after_number = input.position(); match input.next_including_whitespace() { - // EOF here is fine - Err(()) => {}, - Ok(Token::Delim('?')) => { // If `remaining` is already full, `int_value` has too many digits // so we can use `result?` Rust syntax. @@ -105,7 +103,7 @@ fn concatenate_tokens(input: &mut Parser, remaining: &mut &mut [u8]) -> Result<( write!(remaining, "{}", int_value)? } - _ => return Err(Error) + _ => input.reset(after_number) } }