2010-09-09 Yuzo Fujishima <yuzo@google.com>
authoryuzo@google.com <yuzo@google.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 10 Sep 2010 03:33:00 +0000 (03:33 +0000)
committeryuzo@google.com <yuzo@google.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 10 Sep 2010 03:33:00 +0000 (03:33 +0000)
        Reviewed by Darin Adler.

        Fix for Bug 24742 - CSS tokenizer allows color in 6 hex digit notation to be followed by the next token without separation
        https://bugs.webkit.org/show_bug.cgi?id=24742

        * fast/css/invalid-hex-color-expected.txt: Added.
        * fast/css/invalid-hex-color.html: Added.
        * svg/custom/invalid-fill-hex.svg: Changed to avoid a questionable behavior that this bug fix revealed.
2010-09-09  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Darin Adler.

        Fix for Bug 24742 - CSS tokenizer allows color in 6 hex digit notation to be followed by the next token without separation
        Stop checking in the flex definition the number of hexadecimal digits for a hex color.
        Instead, rely on the checking in Color::parseHexColor().
        The resultant grammar is actually more close to the one in http://www.w3.org/TR/CSS21/grammar.html .

        https://bugs.webkit.org/show_bug.cgi?id=24742

        Test: fast/css/invalid-hex-color.html

        * css/tokenizer.flex:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@67158 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/fast/css/invalid-hex-color-expected.txt [new file with mode: 0644]
LayoutTests/fast/css/invalid-hex-color.html [new file with mode: 0644]
LayoutTests/svg/custom/invalid-fill-hex.svg
WebCore/ChangeLog
WebCore/css/tokenizer.flex

index 1d1e926..3747171 100644 (file)
@@ -1,3 +1,14 @@
+2010-09-09  Yuzo Fujishima  <yuzo@google.com>
+
+        Reviewed by Darin Adler.
+
+        Fix for Bug 24742 - CSS tokenizer allows color in 6 hex digit notation to be followed by the next token without separation
+        https://bugs.webkit.org/show_bug.cgi?id=24742
+
+        * fast/css/invalid-hex-color-expected.txt: Added.
+        * fast/css/invalid-hex-color.html: Added.
+        * svg/custom/invalid-fill-hex.svg: Changed to avoid a questionable behavior that this bug fix revealed.
+
 2010-09-09  Dirk Pranke  <dpranke@chromium.org>
 
         Unreviewed, rolling out r67145.
diff --git a/LayoutTests/fast/css/invalid-hex-color-expected.txt b/LayoutTests/fast/css/invalid-hex-color-expected.txt
new file mode 100644 (file)
index 0000000..10388f6
--- /dev/null
@@ -0,0 +1,16 @@
+Test 0 (Invalid: 0 hexadecimal digits) [EXPECTED] [ACTUAL] PASS
+Test 1 (Invalid: 1 hexadecimal digits) [EXPECTED] [ACTUAL] PASS
+Test 2 (Invalid: 2 hexadecimal digits) [EXPECTED] [ACTUAL] PASS
+Test 3 (Valid: 3 hexadecimal digits) [EXPECTED] [ACTUAL] PASS
+Test 4 (Invalid: 4 hexadecimal digits) [EXPECTED] [ACTUAL] PASS
+Test 5 (Invalid: 5 hexadecimal digits) [EXPECTED] [ACTUAL] PASS
+Test 6 (Valid: 6 hexadecimal digits) [EXPECTED] [ACTUAL] PASS
+Test 7 (Invalid: 7 hexadecimal digits) [EXPECTED] [ACTUAL] PASS
+Test 8 (Invalid: 0 hexadecimal digits concatenated with 'px') [EXPECTED] [ACTUAL] PASS
+Test 9 (Invalid: 1 hexadecimal digits concatenated with 'px') [EXPECTED] [ACTUAL] PASS
+Test 10 (Invalid: 2 hexadecimal digits concatenated with 'px') [EXPECTED] [ACTUAL] PASS
+Test 11 (Invalid: 3 hexadecimal digits concatenated with 'px') [EXPECTED] [ACTUAL] PASS
+Test 12 (Invalid: 4 hexadecimal digits concatenated with 'px') [EXPECTED] [ACTUAL] PASS
+Test 13 (Invalid: 5 hexadecimal digits concatenated with 'px') [EXPECTED] [ACTUAL] PASS
+Test 14 (Invalid: 6 hexadecimal digits concatenated with 'px') [EXPECTED] [ACTUAL] PASS
+Test 15 (Invalid: 7 hexadecimal digits concatenated with 'px') [EXPECTED] [ACTUAL] PASS
diff --git a/LayoutTests/fast/css/invalid-hex-color.html b/LayoutTests/fast/css/invalid-hex-color.html
new file mode 100644 (file)
index 0000000..bdca29a
--- /dev/null
@@ -0,0 +1,68 @@
+<!doctype html>
+<html>
+<head>
+<title>Test for Bug 24742 - CSS tokenizer allows color in 6 hex digit notation to be followed by the next token without separation</title>
+<style>
+div {
+    margin-bottom:11px;
+}
+</style>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function test()
+{
+    var test_defs = [
+        /* description, expected style, test style */
+        ["Invalid: 0 hexadecimal digits", "", "border-bottom: solid #"],
+        ["Invalid: 1 hexadecimal digits", "", "border-bottom: solid #1"],
+        ["Invalid: 2 hexadecimal digits", "", "border-bottom: solid #11"],
+        ["Valid: 3 hexadecimal digits", "border-bottom: solid rgb(17,17,17)", "border-bottom: solid #111"],
+        ["Invalid: 4 hexadecimal digits", "", "border-bottom: solid #1111"],
+        ["Invalid: 5 hexadecimal digits", "", "border-bottom: solid #11111"],
+        ["Valid: 6 hexadecimal digits", "border-bottom: solid rgb(17,17,17)", "border-bottom: solid #111111"],
+        ["Invalid: 7 hexadecimal digits", "", "border-bottom: solid #1111111"],
+        ["Invalid: 0 hexadecimal digits concatenated with 'px'", "", "border-bottom: solid #px"],
+        ["Invalid: 1 hexadecimal digits concatenated with 'px'", "", "border-bottom: solid #1px"],
+        ["Invalid: 2 hexadecimal digits concatenated with 'px'", "", "border-bottom: solid #11px"],
+        ["Invalid: 3 hexadecimal digits concatenated with 'px'", "", "border-bottom: solid #111px"],
+        ["Invalid: 4 hexadecimal digits concatenated with 'px'", "", "border-bottom: solid #1111px"],
+        ["Invalid: 5 hexadecimal digits concatenated with 'px'", "", "border-bottom: solid #11111px"],
+        ["Invalid: 6 hexadecimal digits concatenated with 'px'", "", "border-bottom: solid #111111px"],
+        ["Invalid: 7 hexadecimal digits concatenated with 'px'", "", "border-bottom: solid #1111111px"],
+    ];
+
+    var testHtml = "";
+    for (var i = 0; i < test_defs.length; i++) {
+        var test_def = test_defs[i];
+        testHtml += "<div>Test " + i + " (" + test_def[0] + ")" +
+                    "<span id='expected_" + i + "' style='" + test_def[1] + "'> [EXPECTED] </span>" +
+                    "<span id='actual_" + i + "' style='" + test_def[2] + "'> [ACTUAL] </span>" +
+                    "<span id='result_" + i + "'></span></div>";
+    }
+    document.getElementById('tests').innerHTML = testHtml;
+
+    for (var i = 0; i < test_defs.length; i++) {
+        var expected = document.getElementById("expected_" + i).style.borderBottomColor;
+        var actual = document.getElementById("actual_" + i).style.borderBottomColor;
+        var message;
+        var color;
+        if (actual == expected) {
+            message = "PASS";
+            color = "green";
+        } else {
+            message = "FAIL: expected:'" + expected + "' actual:'" + actual + "'";
+            color = "red";
+        }
+        var result = document.getElementById("result_" + i);
+        result.innerHTML = message;
+        result.style.color = color;
+    }
+}
+</script>
+</head>
+<body onload="test()">
+<div id='tests'>Test didn't run</div>
+</html>
+
index 5e1b947..2b8dab1 100644 (file)
@@ -2,7 +2,7 @@
 <svg xmlns="http://www.w3.org/2000/svg">
   <g fill="orange">
     <rect width="100" height="100" fill="red"/>
-    <rect width="100" height="100" fill="#ff" stroke="#0"/>
+    <rect width="100" height="100" fill="#ff"/>
     <g fill="black">
       <text x="10" y="130">The above rect should be BLACK.</text>
       <text x="10" y="150">SVG 1.1 FULL says there should be a "highly perceivable error" message when an invalid fill is used.</text>
index e4aaa08..63dec74 100644 (file)
@@ -1,3 +1,18 @@
+2010-09-09  Yuzo Fujishima  <yuzo@google.com>
+
+        Reviewed by Darin Adler.
+
+        Fix for Bug 24742 - CSS tokenizer allows color in 6 hex digit notation to be followed by the next token without separation
+        Stop checking in the flex definition the number of hexadecimal digits for a hex color.
+        Instead, rely on the checking in Color::parseHexColor().
+        The resultant grammar is actually more close to the one in http://www.w3.org/TR/CSS21/grammar.html .
+
+        https://bugs.webkit.org/show_bug.cgi?id=24742
+
+        Test: fast/css/invalid-hex-color.html
+
+        * css/tokenizer.flex:
+
 2010-09-09  Chris Rogers  <crogers@google.com>
 
         Reviewed by Kenneth Russell.
index 290c590..4d226d9 100644 (file)
@@ -13,7 +13,6 @@ nmstart         [_a-zA-Z]|{nonascii}|{escape}
 nmchar          [_a-zA-Z0-9-]|{nonascii}|{escape}
 string1         \"([\t !#$%&(-~]|\\{nl}|\'|{nonascii}|{escape})*\"
 string2         \'([\t !#$%&(-~]|\\{nl}|\"|{nonascii}|{escape})*\'
-hexcolor        {h}{3}|{h}{6}
 
 ident           -?{nmstart}{nmchar}*
 name            {nmchar}+
@@ -48,8 +47,8 @@ nth             [\+-]?{intnum}*n([\+-]{intnum})?
 {ident}                 {yyTok = IDENT; return yyTok;}
 {nth}                   {yyTok = NTH; return yyTok;}
 
-"#"{hexcolor}           {yyTok = HEX; return yyTok;}
 "#"{ident}              {yyTok = IDSEL; return yyTok;}
+"#"{name}               {yyTok = HEX; return yyTok;}
 
 "@import"               {BEGIN(mediaquery); yyTok = IMPORT_SYM; return yyTok;}
 "@page"                 {yyTok = PAGE_SYM; return yyTok;}