Title: [271738] trunk
Revision
271738
Author
[email protected]
Date
2021-01-21 22:22:56 -0800 (Thu, 21 Jan 2021)

Log Message

Handle shapeMargin becoming NaN
https://bugs.webkit.org/show_bug.cgi?id=220352

Patch by Rob Buis <[email protected]> on 2021-01-21
Reviewed by Zalan Bujtas.

Source/WebCore:

For large zoom factors shapeMargin can become NaN, in that case treat
it as zero.

Test: fast/shapes/shape-outside-floats/shape-outside-large-zoom.html

* rendering/shapes/ShapeOutsideInfo.cpp:
(WebCore::ShapeOutsideInfo::computedShape const):

LayoutTests:

Add test for this.

* fast/shapes/shape-outside-floats/shape-outside-large-zoom-expected.txt: Added.
* fast/shapes/shape-outside-floats/shape-outside-large-zoom.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (271737 => 271738)


--- trunk/LayoutTests/ChangeLog	2021-01-22 06:11:21 UTC (rev 271737)
+++ trunk/LayoutTests/ChangeLog	2021-01-22 06:22:56 UTC (rev 271738)
@@ -1,3 +1,15 @@
+2021-01-21  Rob Buis  <[email protected]>
+
+        Handle shapeMargin becoming NaN
+        https://bugs.webkit.org/show_bug.cgi?id=220352
+
+        Reviewed by Zalan Bujtas.
+
+        Add test for this.
+
+        * fast/shapes/shape-outside-floats/shape-outside-large-zoom-expected.txt: Added.
+        * fast/shapes/shape-outside-floats/shape-outside-large-zoom.html: Added.
+
 2021-01-21  Tim Horton  <[email protected]>
 
         REGRESSION (r271472): [ Mac WK2 ] intersection-observer/target-deleted.html is timing out

Added: trunk/LayoutTests/fast/shapes/shape-outside-floats/shape-outside-large-zoom-expected.txt (0 => 271738)


--- trunk/LayoutTests/fast/shapes/shape-outside-floats/shape-outside-large-zoom-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/shapes/shape-outside-floats/shape-outside-large-zoom-expected.txt	2021-01-22 06:22:56 UTC (rev 271738)
@@ -0,0 +1 @@
+This test passes if it doesn't crash.

Added: trunk/LayoutTests/fast/shapes/shape-outside-floats/shape-outside-large-zoom.html (0 => 271738)


--- trunk/LayoutTests/fast/shapes/shape-outside-floats/shape-outside-large-zoom.html	                        (rev 0)
+++ trunk/LayoutTests/fast/shapes/shape-outside-floats/shape-outside-large-zoom.html	2021-01-22 06:22:56 UTC (rev 271738)
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<style>
+body, head, style {
+  display: inline;
+  float: left;
+  shape-margin: 0;
+  shape-outside: radial-gradient(green 0, green 0);
+  zoom: 41234567890123;
+}
+style, script {
+  visibility: hidden;
+}
+</style>
+</head>
+<body>
+This test passes if it doesn't crash.
+<script>
+if (window.testRunner)
+    testRunner.dumpAsText()
+</script>
+</body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (271737 => 271738)


--- trunk/Source/WebCore/ChangeLog	2021-01-22 06:11:21 UTC (rev 271737)
+++ trunk/Source/WebCore/ChangeLog	2021-01-22 06:22:56 UTC (rev 271738)
@@ -1,3 +1,18 @@
+2021-01-21  Rob Buis  <[email protected]>
+
+        Handle shapeMargin becoming NaN
+        https://bugs.webkit.org/show_bug.cgi?id=220352
+
+        Reviewed by Zalan Bujtas.
+
+        For large zoom factors shapeMargin can become NaN, in that case treat
+        it as zero.
+
+        Test: fast/shapes/shape-outside-floats/shape-outside-large-zoom.html
+
+        * rendering/shapes/ShapeOutsideInfo.cpp:
+        (WebCore::ShapeOutsideInfo::computedShape const):
+
 2021-01-21  Devin Rousso  <[email protected]>
 
         [Apple Pay] use the first item in `shippingOptions` even when it's not `selected`

Modified: trunk/Source/WebCore/rendering/shapes/ShapeOutsideInfo.cpp (271737 => 271738)


--- trunk/Source/WebCore/rendering/shapes/ShapeOutsideInfo.cpp	2021-01-22 06:11:21 UTC (rev 271737)
+++ trunk/Source/WebCore/rendering/shapes/ShapeOutsideInfo.cpp	2021-01-22 06:22:56 UTC (rev 271738)
@@ -170,7 +170,10 @@
     const RenderStyle& containingBlockStyle = m_renderer.containingBlock()->style();
 
     WritingMode writingMode = containingBlockStyle.writingMode();
-    float margin = floatValueForLength(m_renderer.style().shapeMargin(), m_renderer.containingBlock() ? m_renderer.containingBlock()->contentWidth() : 0_lu);
+    auto margin = [&] {
+        auto shapeMargin = floatValueForLength(m_renderer.style().shapeMargin(), m_renderer.containingBlock() ? m_renderer.containingBlock()->contentWidth() : 0_lu);
+        return isnan(shapeMargin) ? 0.0f : shapeMargin;
+    }();
     float shapeImageThreshold = style.shapeImageThreshold();
     const ShapeValue& shapeValue = *style.shapeOutside();
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to