Title: [285713] trunk
Revision
285713
Author
[email protected]
Date
2021-11-12 04:28:01 -0800 (Fri, 12 Nov 2021)

Log Message

Stack overflow with revert and revert-layer
https://bugs.webkit.org/show_bug.cgi?id=233033
rdar://85336439

Reviewed by Antoine Quint.

Source/WebCore:

Test: fast/css/revert-layer-stack-overflow.html

We end up using a rollback cascade made for revert-layer to do revert and that leads to eternal recursion.

* style/StyleBuilder.cpp:
(WebCore::Style::Builder::ensureRollbackCascadeForRevert):
(WebCore::Style::Builder::ensureRollbackCascadeForRevertLayer):

Key the rollback cascade map with the reverted values instead of the original ones since the same
original keys produce different rollbacks depending on whether it is made for revert or revert-layer.

LayoutTests:

* fast/css/revert-layer-stack-overflow-expected.txt: Added.
* fast/css/revert-layer-stack-overflow.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (285712 => 285713)


--- trunk/LayoutTests/ChangeLog	2021-11-12 11:43:26 UTC (rev 285712)
+++ trunk/LayoutTests/ChangeLog	2021-11-12 12:28:01 UTC (rev 285713)
@@ -1,5 +1,16 @@
 2021-11-12  Antti Koivisto  <[email protected]>
 
+        Stack overflow with revert and revert-layer
+        https://bugs.webkit.org/show_bug.cgi?id=233033
+        rdar://85336439
+
+        Reviewed by Antoine Quint.
+
+        * fast/css/revert-layer-stack-overflow-expected.txt: Added.
+        * fast/css/revert-layer-stack-overflow.html: Added.
+
+2021-11-12  Antti Koivisto  <[email protected]>
+
         REGRESSION(r285624) Using revert keyword with a css variable hits assert
         https://bugs.webkit.org/show_bug.cgi?id=233031
         rdar://85332271

Added: trunk/LayoutTests/fast/css/revert-layer-stack-overflow-expected.txt (0 => 285713)


--- trunk/LayoutTests/fast/css/revert-layer-stack-overflow-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/css/revert-layer-stack-overflow-expected.txt	2021-11-12 12:28:01 UTC (rev 285713)
@@ -0,0 +1 @@
+This test passes if it doesn't crash.

Added: trunk/LayoutTests/fast/css/revert-layer-stack-overflow.html (0 => 285713)


--- trunk/LayoutTests/fast/css/revert-layer-stack-overflow.html	                        (rev 0)
+++ trunk/LayoutTests/fast/css/revert-layer-stack-overflow.html	2021-11-12 12:28:01 UTC (rev 285713)
@@ -0,0 +1,15 @@
+<style>
+  @layer l0 {
+    html {
+      width: revert;
+    }
+  }
+  html {
+    height: revert-layer;
+  }
+</style>
+This test passes if it doesn't crash.
+<script>
+if (window.testRunner)
+    testRunner.dumpAsText();
+</script>

Modified: trunk/Source/WebCore/ChangeLog (285712 => 285713)


--- trunk/Source/WebCore/ChangeLog	2021-11-12 11:43:26 UTC (rev 285712)
+++ trunk/Source/WebCore/ChangeLog	2021-11-12 12:28:01 UTC (rev 285713)
@@ -1,5 +1,24 @@
 2021-11-12  Antti Koivisto  <[email protected]>
 
+        Stack overflow with revert and revert-layer
+        https://bugs.webkit.org/show_bug.cgi?id=233033
+        rdar://85336439
+
+        Reviewed by Antoine Quint.
+
+        Test: fast/css/revert-layer-stack-overflow.html
+
+        We end up using a rollback cascade made for revert-layer to do revert and that leads to eternal recursion.
+
+        * style/StyleBuilder.cpp:
+        (WebCore::Style::Builder::ensureRollbackCascadeForRevert):
+        (WebCore::Style::Builder::ensureRollbackCascadeForRevertLayer):
+
+        Key the rollback cascade map with the reverted values instead of the original ones since the same
+        original keys produce different rollbacks depending on whether it is made for revert or revert-layer.
+
+2021-11-12  Antti Koivisto  <[email protected]>
+
         REGRESSION(r285624) Using revert keyword with a css variable hits assert
         https://bugs.webkit.org/show_bug.cgi?id=233031
         rdar://85332271

Modified: trunk/Source/WebCore/style/StyleBuilder.cpp (285712 => 285713)


--- trunk/Source/WebCore/style/StyleBuilder.cpp	2021-11-12 11:43:26 UTC (rev 285712)
+++ trunk/Source/WebCore/style/StyleBuilder.cpp	2021-11-12 12:28:01 UTC (rev 285713)
@@ -375,9 +375,11 @@
     if (rollbackCascadeLevel == CascadeLevel::UserAgent)
         return nullptr;
 
+    --rollbackCascadeLevel;
+
     auto key = makeRollbackCascadeKey(rollbackCascadeLevel, RuleSet::cascadeLayerPriorityForUnlayered);
     return m_rollbackCascades.ensure(key, [&] {
-        return makeUnique<const PropertyCascade>(m_cascade, --rollbackCascadeLevel, RuleSet::cascadeLayerPriorityForUnlayered);
+        return makeUnique<const PropertyCascade>(m_cascade, rollbackCascadeLevel, RuleSet::cascadeLayerPriorityForUnlayered);
     }).iterator->value.get();
 }
 
@@ -386,9 +388,11 @@
     if (!rollbackLayerPriority)
         return nullptr;
 
+    --rollbackLayerPriority;
+
     auto key = makeRollbackCascadeKey(cascadeLevel, rollbackLayerPriority);
     return m_rollbackCascades.ensure(key, [&] {
-        return makeUnique<const PropertyCascade>(m_cascade, cascadeLevel, rollbackLayerPriority - 1);
+        return makeUnique<const PropertyCascade>(m_cascade, cascadeLevel, rollbackLayerPriority);
     }).iterator->value.get();
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to