From 53a9defa9f2823f17ab5ea6522ef05601a2452d7 Mon Sep 17 00:00:00 2001 From: Cameron McCormack Date: Wed, 25 May 2016 20:23:51 +1000 Subject: [PATCH] Don't consume invalid idents when parsing text-decoration. --- .../style/properties/longhand/text.mako.rs | 32 ++++++++++++------- .../html4/c71-fwd-parsing-003.htm.ini | 3 -- 2 files changed, 20 insertions(+), 15 deletions(-) delete mode 100644 tests/wpt/metadata-css/css21_dev/html4/c71-fwd-parsing-003.htm.ini diff --git a/components/style/properties/longhand/text.mako.rs b/components/style/properties/longhand/text.mako.rs index cd8606ab2ad..26a29a49f39 100644 --- a/components/style/properties/longhand/text.mako.rs +++ b/components/style/properties/longhand/text.mako.rs @@ -75,19 +75,27 @@ ${helpers.single_keyword("unicode-bidi", "normal embed isolate bidi-override iso } let mut blink = false; let mut empty = true; - while let Ok(ident) = input.expect_ident() { - match_ignore_ascii_case! { ident, - "underline" => if result.underline { return Err(()) } - else { empty = false; result.underline = true }, - "overline" => if result.overline { return Err(()) } - else { empty = false; result.overline = true }, - "line-through" => if result.line_through { return Err(()) } - else { empty = false; result.line_through = true }, - "blink" => if blink { return Err(()) } - else { empty = false; blink = true }, - _ => break - } + + while input.try(|input| { + if let Ok(ident) = input.expect_ident() { + match_ignore_ascii_case! { ident, + "underline" => if result.underline { return Err(()) } + else { empty = false; result.underline = true }, + "overline" => if result.overline { return Err(()) } + else { empty = false; result.overline = true }, + "line-through" => if result.line_through { return Err(()) } + else { empty = false; result.line_through = true }, + "blink" => if blink { return Err(()) } + else { empty = false; blink = true }, + _ => return Err(()) + } + } else { + return Err(()); + } + Ok(()) + }).is_ok() { } + if !empty { Ok(result) } else { Err(()) } } diff --git a/tests/wpt/metadata-css/css21_dev/html4/c71-fwd-parsing-003.htm.ini b/tests/wpt/metadata-css/css21_dev/html4/c71-fwd-parsing-003.htm.ini deleted file mode 100644 index f8f06a021a1..00000000000 --- a/tests/wpt/metadata-css/css21_dev/html4/c71-fwd-parsing-003.htm.ini +++ /dev/null @@ -1,3 +0,0 @@ -[c71-fwd-parsing-003.htm] - type: reftest - expected: FAIL