⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 285713 in webkit


Ignore:
Timestamp:
Nov 12, 2021, 4:28:01 AM (5 years ago)
Author:
Antti Koivisto
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.
Location:
trunk
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r285710 r285713  
     12021-11-12  Antti Koivisto  <antti@apple.com>
     2
     3        Stack overflow with revert and revert-layer
     4        https://bugs.webkit.org/show_bug.cgi?id=233033
     5        rdar://85336439
     6
     7        Reviewed by Antoine Quint.
     8
     9        * fast/css/revert-layer-stack-overflow-expected.txt: Added.
     10        * fast/css/revert-layer-stack-overflow.html: Added.
     11
    1122021-11-12  Antti Koivisto  <antti@apple.com>
    213
  • trunk/Source/WebCore/ChangeLog

    r285710 r285713  
     12021-11-12  Antti Koivisto  <antti@apple.com>
     2
     3        Stack overflow with revert and revert-layer
     4        https://bugs.webkit.org/show_bug.cgi?id=233033
     5        rdar://85336439
     6
     7        Reviewed by Antoine Quint.
     8
     9        Test: fast/css/revert-layer-stack-overflow.html
     10
     11        We end up using a rollback cascade made for revert-layer to do revert and that leads to eternal recursion.
     12
     13        * style/StyleBuilder.cpp:
     14        (WebCore::Style::Builder::ensureRollbackCascadeForRevert):
     15        (WebCore::Style::Builder::ensureRollbackCascadeForRevertLayer):
     16
     17        Key the rollback cascade map with the reverted values instead of the original ones since the same
     18        original keys produce different rollbacks depending on whether it is made for revert or revert-layer.
     19
    1202021-11-12  Antti Koivisto  <antti@apple.com>
    221
  • trunk/Source/WebCore/style/StyleBuilder.cpp

    r285624 r285713  
    376376        return nullptr;
    377377
     378    --rollbackCascadeLevel;
     379
    378380    auto key = makeRollbackCascadeKey(rollbackCascadeLevel, RuleSet::cascadeLayerPriorityForUnlayered);
    379381    return m_rollbackCascades.ensure(key, [&] {
    380         return makeUnique<const PropertyCascade>(m_cascade, --rollbackCascadeLevel, RuleSet::cascadeLayerPriorityForUnlayered);
     382        return makeUnique<const PropertyCascade>(m_cascade, rollbackCascadeLevel, RuleSet::cascadeLayerPriorityForUnlayered);
    381383    }).iterator->value.get();
    382384}
     
    387389        return nullptr;
    388390
     391    --rollbackLayerPriority;
     392
    389393    auto key = makeRollbackCascadeKey(cascadeLevel, rollbackLayerPriority);
    390394    return m_rollbackCascades.ensure(key, [&] {
    391         return makeUnique<const PropertyCascade>(m_cascade, cascadeLevel, rollbackLayerPriority - 1);
     395        return makeUnique<const PropertyCascade>(m_cascade, cascadeLevel, rollbackLayerPriority);
    392396    }).iterator->value.get();
    393397}
Note: See TracChangeset for help on using the changeset viewer.