[CSS Exclusions] SVG shape errors should invalidate exclusion shapes
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 23 Jul 2012 23:56:38 +0000 (23:56 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 23 Jul 2012 23:56:38 +0000 (23:56 +0000)
https://bugs.webkit.org/show_bug.cgi?id=91761

Patch by Bem Jones-Bey <bjonesbe@adobe.com> on 2012-07-23
Reviewed by Andreas Kling.

Source/WebCore:

CSS exclusion shapes that are specified with negative radiuses or
height/width are now considered invalid and ignored.

Tests added to
LayoutTests/fast/exclusions/parsing-wrap-shape-lengths.html

* css/CSSParser.cpp:
(WebCore::CSSParser::parseExclusionShapeRectangle):
(WebCore::CSSParser::parseExclusionShapeCircle):
(WebCore::CSSParser::parseExclusionShapeEllipse):

LayoutTests:

Test that negative heights. widths, and radiuses are ignored.

* fast/exclusions/parsing-wrap-shape-lengths-expected.txt:
* fast/exclusions/parsing-wrap-shape-lengths.html:

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

LayoutTests/ChangeLog
LayoutTests/fast/exclusions/parsing-wrap-shape-lengths-expected.txt
LayoutTests/fast/exclusions/parsing-wrap-shape-lengths.html
Source/WebCore/ChangeLog
Source/WebCore/css/CSSParser.cpp

index d81795e012b99b87c2d9d6ae60e8c6a5c4d173df..9e9c2acd61597add44d2bfd4158203a6971f6215 100644 (file)
@@ -1,3 +1,15 @@
+2012-07-23  Bem Jones-Bey  <bjonesbe@adobe.com>
+
+        [CSS Exclusions] SVG shape errors should invalidate exclusion shapes
+        https://bugs.webkit.org/show_bug.cgi?id=91761
+
+        Reviewed by Andreas Kling.
+
+        Test that negative heights. widths, and radiuses are ignored.
+
+        * fast/exclusions/parsing-wrap-shape-lengths-expected.txt:
+        * fast/exclusions/parsing-wrap-shape-lengths.html:
+
 2012-07-23  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>
 
         [Qt] css3/selectors3 rebaseline after new test fonts
index e158cdde715b8c3e0b21a173c840ce08b1a119d1..a6ade2acae0e12e45cd5d83d6d301a867cd63b4a 100644 (file)
@@ -37,6 +37,20 @@ PASS innerStyle("-webkit-shape-inside", "circle(1px, 1px, 1p)") is null
 PASS computedStyle("-webkit-shape-inside", "circle(1px, 1px, 1p)") is "auto"
 PASS innerStyle("-webkit-shape-inside", "circle(1px, 1px, calc())") is null
 PASS computedStyle("-webkit-shape-inside", "circle(1px, 1px, calc())") is "auto"
+PASS innerStyle("-webkit-shape-inside", "circle(-1.5px, +1.5px, -1.5px)") is null
+PASS computedStyle("-webkit-shape-inside", "circle(-1.5px, +1.5px, -1.5px)") is "auto"
+PASS innerStyle("-webkit-shape-inside", "rectangle(1cm, 1mm, 1in, 1px, -1pt, 1pc)") is null
+PASS computedStyle("-webkit-shape-inside", "rectangle(1cm, 1mm, 1in, 1px, -1pt, 1pc)") is "auto"
+PASS innerStyle("-webkit-shape-inside", "rectangle(1cm, 1mm, 1in, 1px, 1pt, -1pc)") is null
+PASS computedStyle("-webkit-shape-inside", "rectangle(1cm, 1mm, 1in, 1px, 1pt, -1pc)") is "auto"
+PASS innerStyle("-webkit-shape-inside", "ellipse(1em, 1em, -1em, 1em)") is null
+PASS computedStyle("-webkit-shape-inside", "ellipse(1em, 1em, -1em, 1em)") is "auto"
+PASS innerStyle("-webkit-shape-inside", "ellipse(1em, 1em, 1em, -1em)") is null
+PASS computedStyle("-webkit-shape-inside", "ellipse(1em, 1em, 1em, -1em)") is "auto"
+PASS innerStyle("-webkit-shape-inside", "rectangle(1cm, 1mm, -1in, 1px, 1pt, 1pc)") is null
+PASS computedStyle("-webkit-shape-inside", "rectangle(1cm, 1mm, -1in, 1px, 1pt, 1pc)") is "auto"
+PASS innerStyle("-webkit-shape-inside", "rectangle(1cm, 1mm, 1in, -1px, 1pt, 1pc)") is null
+PASS computedStyle("-webkit-shape-inside", "rectangle(1cm, 1mm, 1in, -1px, 1pt, 1pc)") is "auto"
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 241d109dff1483f0553c430ac4ffa2234447886c..97e7369d948f673856c8d2cfecf37917141d3117 100644 (file)
@@ -88,6 +88,18 @@ negativeTest("-webkit-shape-inside", "circle(1px, 1px, 1)");
 negativeTest("-webkit-shape-inside", "circle(1px, 1px, px)");
 negativeTest("-webkit-shape-inside", "circle(1px, 1px, 1p)");
 negativeTest("-webkit-shape-inside", "circle(1px, 1px, calc())");
+
+// reject negative radiuses
+negativeTest("-webkit-shape-inside", "circle(-1.5px, +1.5px, -1.5px)");
+negativeTest("-webkit-shape-inside", "rectangle(1cm, 1mm, 1in, 1px, -1pt, 1pc)");
+negativeTest("-webkit-shape-inside", "rectangle(1cm, 1mm, 1in, 1px, 1pt, -1pc)");
+negativeTest("-webkit-shape-inside", "ellipse(1em, 1em, -1em, 1em)");
+negativeTest("-webkit-shape-inside", "ellipse(1em, 1em, 1em, -1em)");
+
+// reject negative height and width
+negativeTest("-webkit-shape-inside", "rectangle(1cm, 1mm, -1in, 1px, 1pt, 1pc)");
+negativeTest("-webkit-shape-inside", "rectangle(1cm, 1mm, 1in, -1px, 1pt, 1pc)");
+
 </script>
 <script src="../js/resources/js-test-post.js"></script>
 </body>
index c6d8956d73f7931b8e9d917c9c86aef182b67a09..dde7c907210eb4b6af58c4b0177ef75412e21bd4 100644 (file)
@@ -1,3 +1,21 @@
+2012-07-23  Bem Jones-Bey  <bjonesbe@adobe.com>
+
+        [CSS Exclusions] SVG shape errors should invalidate exclusion shapes
+        https://bugs.webkit.org/show_bug.cgi?id=91761
+
+        Reviewed by Andreas Kling.
+
+        CSS exclusion shapes that are specified with negative radiuses or
+        height/width are now considered invalid and ignored.
+
+        Tests added to
+        LayoutTests/fast/exclusions/parsing-wrap-shape-lengths.html
+
+        * css/CSSParser.cpp:
+        (WebCore::CSSParser::parseExclusionShapeRectangle):
+        (WebCore::CSSParser::parseExclusionShapeCircle):
+        (WebCore::CSSParser::parseExclusionShapeEllipse):
+
 2012-07-23  Tien-Ren Chen  <trchen@chromium.org>
 
         [chromium] Implement scrollbar theme for Android
index d64398a4ca97eec0bdfbf9107525f9dace96e907..3b41b2cdca5795317aa98bac82b0016f7ea3405a 100644 (file)
@@ -4469,7 +4469,12 @@ PassRefPtr<CSSWrapShape> CSSParser::parseExclusionShapeRectangle(CSSParserValueL
     unsigned argumentNumber = 0;
     CSSParserValue* argument = args->current();
     while (argument) {
-        if (!validUnit(argument, FLength | FPercent))
+        Units unitFlags = FLength | FPercent;
+        if (argumentNumber > 1) {
+            // Arguments width, height, rx, and ry cannot be negative.
+            unitFlags = unitFlags | FNonNeg;
+        }
+        if (!validUnit(argument, unitFlags))
             return 0;
 
         RefPtr<CSSPrimitiveValue> length = createPrimitiveNumericValue(argument);
@@ -4522,7 +4527,13 @@ PassRefPtr<CSSWrapShape> CSSParser::parseExclusionShapeCircle(CSSParserValueList
     unsigned argumentNumber = 0;
     CSSParserValue* argument = args->current();
     while (argument) {
-        if (!validUnit(argument, FLength | FPercent))
+        Units unitFlags = FLength | FPercent;
+        if (argumentNumber == 2) {
+            // Argument radius cannot be negative.
+            unitFlags = unitFlags | FNonNeg;
+        }
+
+        if (!validUnit(argument, unitFlags))
             return 0;
 
         RefPtr<CSSPrimitiveValue> length = createPrimitiveNumericValue(argument);
@@ -4565,7 +4576,12 @@ PassRefPtr<CSSWrapShape> CSSParser::parseExclusionShapeEllipse(CSSParserValueLis
     unsigned argumentNumber = 0;
     CSSParserValue* argument = args->current();
     while (argument) {
-        if (!validUnit(argument, FLength | FPercent))
+        Units unitFlags = FLength | FPercent;
+        if (argumentNumber > 1) {
+            // Arguments radiusX and radiusY cannot be negative.
+            unitFlags = unitFlags | FNonNeg;
+        }
+        if (!validUnit(argument, unitFlags))
             return 0;
 
         RefPtr<CSSPrimitiveValue> length = createPrimitiveNumericValue(argument);