Changeset 271785 in webkit


Ignore:
Timestamp:
Jan 24, 2021 4:28:45 PM (18 months ago)
Author:
Simon Fraser
Message:

SVG reference filter chain with errors applies only some of the filters, producing incorrect output
https://bugs.webkit.org/show_bug.cgi?id=220893

Reviewed by Sam Weinig.

Source/WebCore:

If the CSS filter property refers to an invalid reference filter, ensure that
the entire reference filter is skipped. Previously, we'd add elements of the reference
filter up to the invalid one.

This behavior matches Gecko and Blink.

Tests: css3/filters/invalid-reference-filter-in-chain.html

css3/filters/invalid-reference-filter.html

  • rendering/CSSFilter.cpp:

(WebCore::CSSFilter::buildReferenceFilter):

LayoutTests:

  • css3/filters/invalid-reference-filter-expected.html: Added.
  • css3/filters/invalid-reference-filter-in-chain-expected.html: Added.
  • css3/filters/invalid-reference-filter-in-chain.html: Added.
  • css3/filters/invalid-reference-filter.html: Added.
Location:
trunk
Files:
4 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r271780 r271785  
     12021-01-24  Simon Fraser  <simon.fraser@apple.com>
     2
     3        SVG reference filter chain with errors applies only some of the filters, producing incorrect output
     4        https://bugs.webkit.org/show_bug.cgi?id=220893
     5
     6        Reviewed by Sam Weinig.
     7
     8        * css3/filters/invalid-reference-filter-expected.html: Added.
     9        * css3/filters/invalid-reference-filter-in-chain-expected.html: Added.
     10        * css3/filters/invalid-reference-filter-in-chain.html: Added.
     11        * css3/filters/invalid-reference-filter.html: Added.
     12
    1132021-01-23  Per Arne Vollan  <pvollan@apple.com>
    214
  • trunk/Source/WebCore/ChangeLog

    r271784 r271785  
     12021-01-24  Simon Fraser  <simon.fraser@apple.com>
     2
     3        SVG reference filter chain with errors applies only some of the filters, producing incorrect output
     4        https://bugs.webkit.org/show_bug.cgi?id=220893
     5
     6        Reviewed by Sam Weinig.
     7
     8        If the CSS filter property refers to an invalid reference filter, ensure that
     9        the entire reference filter is skipped. Previously, we'd add elements of the reference
     10        filter up to the invalid one.
     11
     12        This behavior matches Gecko and Blink.
     13
     14        Tests: css3/filters/invalid-reference-filter-in-chain.html
     15               css3/filters/invalid-reference-filter.html
     16
     17        * rendering/CSSFilter.cpp:
     18        (WebCore::CSSFilter::buildReferenceFilter):
     19
    1202021-01-24  Rob Buis  <rbuis@igalia.com>
    221
  • trunk/Source/WebCore/rendering/CSSFilter.cpp

    r266542 r271785  
    111111    }
    112112
    113     RefPtr<FilterEffect> effect;
    114 
    115113    auto builder = makeUnique<SVGFilterBuilder>(&previousEffect);
    116114    m_sourceAlpha = builder->getEffectById(SourceAlpha::effectName());
    117115
     116    RefPtr<FilterEffect> effect;
     117    Vector<Ref<FilterEffect>> referenceEffects;
     118
    118119    for (auto& effectElement : childrenOfType<SVGFilterPrimitiveStandardAttributes>(*filter)) {
    119120        effect = effectElement.build(builder.get(), *this);
    120         if (!effect)
    121             continue;
     121        if (!effect) {
     122            LOG_WITH_STREAM(Filters, stream << "CSSFilter " << this << " buildReferenceFilter: failed to build effect from " << effectElement);
     123            return nullptr;
     124        }
    122125
    123126        effectElement.setStandardAttributes(effect.get());
     
    126129
    127130        builder->add(effectElement.result(), effect);
    128         m_effects.append(*effect);
    129     }
     131        referenceEffects.append(*effect);
     132    }
     133   
     134    m_effects.appendVector(WTFMove(referenceEffects));
    130135    return effect;
    131136}
Note: See TracChangeset for help on using the changeset viewer.