2008-09-02 Glenn Wilson <wilsong@gmail.com>
authormrowe@apple.com <mrowe@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 3 Sep 2008 06:51:31 +0000 (06:51 +0000)
committermrowe@apple.com <mrowe@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 3 Sep 2008 06:51:31 +0000 (06:51 +0000)
        Reviewed by Darin Adler.

        Fix for <https://bugs.webkit.org/show_bug.cgi?id=15360>
        Bug 15360: color:#{predefined colorName} is treated as colorName in Safari

        We would inappropriately interpret and apply an invalid CSS "color" property
        when the value is a predefined color preceded by a '#' symbol.  For example,
        style="color:#gray;" would apply the color gray when it should not.

        In the bison template, "hexcolor" was defined as both "HEX maybe_space" OR "IDENT maybe_space".
        This caused identifiers not fitting the appropriate hex format but preceded by a '#' to be
        interpreted as a valid color (CSSPrimitiveValue::CSS_PARSER_HEXCOLOR), when it was really just
        an ignorable token.

        To correct this, "IDENT maybe_space" was removed from "hexcolor" and added under "term" as
        '#' IDENT maybe_space, which is then processed as a CSSPrimitiveValue::CSS_STRING instead of
        CSSPrimitiveValue::CSS_PARSER_HEXCOLOR.

        Test: css1/color_and_background/invalid_color.html

        * css/CSSGrammar.y:

2008-09-02  Glenn Wilson  <wilsong@gmail.com>

        Reviewed by Darin Adler.

        Test for <https://bugs.webkit.org/show_bug.cgi?id=15360>
        Bug 15360: color:#{predefined colorName} is treated as colorName in Safari

        Added new test to verify that CSS "color" attributes with '#'-preceeded predefined color names
        are not rendered in those colors.

        * css1/color_and_background/invalid_color.html: Added.
        * css1/color_and_background/invalid_color-expected.txt: Added.

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

LayoutTests/ChangeLog
LayoutTests/css1/color_and_background/invalid_color-expected.txt [new file with mode: 0644]
LayoutTests/css1/color_and_background/invalid_color.html [new file with mode: 0644]
WebCore/ChangeLog
WebCore/css/CSSGrammar.y

index 1ef9b68..48c61e1 100644 (file)
@@ -1,3 +1,16 @@
+2008-09-02  Glenn Wilson  <wilsong@gmail.com>
+
+        Reviewed by Darin Adler.
+
+        Test for <https://bugs.webkit.org/show_bug.cgi?id=15360>
+        Bug 15360: color:#{predefined colorName} is treated as colorName in Safari
+
+        Added new test to verify that CSS "color" attributes with '#'-preceeded predefined color names
+        are not rendered in those colors.
+
+        * css1/color_and_background/invalid_color.html: Added.
+        * css1/color_and_background/invalid_color-expected.txt: Added.
+
 2008-09-02  Mihnea Ovidenie  <mihnea@adobe.com>
 
         Reviewed by Darin Adler.
diff --git a/LayoutTests/css1/color_and_background/invalid_color-expected.txt b/LayoutTests/css1/color_and_background/invalid_color-expected.txt
new file mode 100644 (file)
index 0000000..f40d4c6
--- /dev/null
@@ -0,0 +1,2 @@
+This test verifies that "color" style attributes with a preceeding '#' are not interpreted as predefined colors. This text should not be red.
+rgb(0, 0, 0)
diff --git a/LayoutTests/css1/color_and_background/invalid_color.html b/LayoutTests/css1/color_and_background/invalid_color.html
new file mode 100644 (file)
index 0000000..409813b
--- /dev/null
@@ -0,0 +1,16 @@
+<HTML>
+<SCRIPT>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+</SCRIPT>
+<BODY>
+<div id="invalid_color_div" style="color:#red;">This test verifies that "color" style attributes with a preceeding '#' are not interpreted as predefined colors.  This text should not be red.</a>
+
+<div id="console" style="color:red">
+    <script type="text/javascript" charset="utf-8">
+        document.write(window.getComputedStyle(document.getElementById("invalid_color_div")).color);
+    </script>
+</div>
+
+</BODY>
+</HTML>
index 51757e4..0780345 100644 (file)
@@ -1,3 +1,27 @@
+2008-09-02  Glenn Wilson  <wilsong@gmail.com>
+
+        Reviewed by Darin Adler.
+
+        Fix for <https://bugs.webkit.org/show_bug.cgi?id=15360>
+        Bug 15360: color:#{predefined colorName} is treated as colorName in Safari
+
+        We would inappropriately interpret and apply an invalid CSS "color" property
+        when the value is a predefined color preceded by a '#' symbol.  For example,
+        style="color:#gray;" would apply the color gray when it should not.
+
+        In the bison template, "hexcolor" was defined as both "HEX maybe_space" OR "IDENT maybe_space".
+        This caused identifiers not fitting the appropriate hex format but preceded by a '#' to be 
+        interpreted as a valid color (CSSPrimitiveValue::CSS_PARSER_HEXCOLOR), when it was really just
+        an ignorable token.
+
+        To correct this, "IDENT maybe_space" was removed from "hexcolor" and added under "term" as
+        '#' IDENT maybe_space, which is then processed as a CSSPrimitiveValue::CSS_STRING instead of
+        CSSPrimitiveValue::CSS_PARSER_HEXCOLOR.
+
+        Test: css1/color_and_background/invalid_color.html
+
+        * css/CSSGrammar.y:
+
 2008-09-02  Mihnea Ovidenie  <mihnea@adobe.com>
 
         Reviewed by Darin Adler.
index bd4ec4e..63889b3 100644 (file)
@@ -1328,6 +1328,7 @@ term:
   | URI maybe_space { $$.id = 0; $$.string = $1; $$.unit = CSSPrimitiveValue::CSS_URI; }
   | UNICODERANGE maybe_space { $$.id = 0; $$.string = $1; $$.unit = CSSPrimitiveValue::CSS_UNICODE_RANGE }
   | hexcolor { $$.id = 0; $$.string = $1; $$.unit = CSSPrimitiveValue::CSS_PARSER_HEXCOLOR; }
+  | '#' IDENT maybe_space { $$.id = 0; $$.string = $2; $$.unit = CSSPrimitiveValue::CSS_STRING; } /* Handle error case: "color:#{predefined color name};" */
   | '#' maybe_space { $$.id = 0; $$.string = CSSParserString(); $$.unit = CSSPrimitiveValue::CSS_PARSER_HEXCOLOR; } /* Handle error case: "color: #;" */
   /* FIXME: according to the specs a function can have a unary_operator in front. I know no case where this makes sense */
   | function {
@@ -1406,10 +1407,8 @@ function:
  */
 hexcolor:
   HEX maybe_space { $$ = $1; }
-  | IDSEL maybe_space { $$ = $1; }
   ;
 
-
 /* error handling rules */
 
 save_block: