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

Changeset 99782 in webkit


Ignore:
Timestamp:
Nov 9, 2011, 4:39:21 PM (15 years ago)
Author:
timothy_horton@apple.com
Message:

feImage referencing a primitive draws incorrectly
https://bugs.webkit.org/show_bug.cgi?id=71731
<rdar://problem/10408178>

Reviewed by Simon Fraser.

Don't attempt to resolve an <feImage>'s referenced element until it's used, as it
may not exist at the time the attribute is set on the <feImage>.

Don't attempt to render an <feImage> if the referenced element is of size 0x0.

Tests: svg/filters/feImage-reference-svg-primitive.svg

svg/filters/feImage-zero-size-crash.svg

  • svg/SVGFEImageElement.cpp:

(WebCore::SVGFEImageElement::parseMappedAttribute):
(WebCore::SVGFEImageElement::build):

Add a test (feImage-reference-svg-primitive) that ensures that having
an <feImage> referencing an SVG primitive which is declared after it
successfully paints the referenced object.

Add a test (feImage-zero-size-crash) to see if we crash when <feImage>
references an object with 0x0 size.

  • platform/mac/svg/filters/feImage-reference-svg-primitive-expected.png: Added.
  • platform/mac/svg/filters/feImage-reference-svg-primitive-expected.txt: Added.
  • svg/filters/feImage-reference-svg-primitive.svg: Added.
  • svg/filters/feImage-zero-size-crash-expected.txt: Added.
  • svg/filters/feImage-zero-size-crash.svg: Added.
Location:
trunk
Files:
5 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r99772 r99782  
     12011-11-09  Tim Horton  <timothy_horton@apple.com>
     2
     3        feImage referencing a primitive draws incorrectly
     4        https://bugs.webkit.org/show_bug.cgi?id=71731
     5        <rdar://problem/10408178>
     6
     7        Reviewed by Simon Fraser.
     8
     9        Add a test (feImage-reference-svg-primitive) that ensures that having
     10        an <feImage> referencing an SVG primitive which is declared after it
     11        successfully paints the referenced object.
     12       
     13        Add a test (feImage-zero-size-crash) to see if we crash when <feImage>
     14        references an object with 0x0 size.
     15
     16        * platform/mac/svg/filters/feImage-reference-svg-primitive-expected.png: Added.
     17        * platform/mac/svg/filters/feImage-reference-svg-primitive-expected.txt: Added.
     18        * svg/filters/feImage-reference-svg-primitive.svg: Added.
     19        * svg/filters/feImage-zero-size-crash-expected.txt: Added.
     20        * svg/filters/feImage-zero-size-crash.svg: Added.
     21
    1222011-11-09  Kentaro Hara  <haraken@chromium.org>
    223
  • trunk/Source/WebCore/ChangeLog

    r99780 r99782  
     12011-11-09  Tim Horton  <timothy_horton@apple.com>
     2
     3        feImage referencing a primitive draws incorrectly
     4        https://bugs.webkit.org/show_bug.cgi?id=71731
     5        <rdar://problem/10408178>
     6
     7        Reviewed by Simon Fraser.
     8       
     9        Don't attempt to resolve an <feImage>'s referenced element until it's used, as it
     10        may not exist at the time the attribute is set on the <feImage>.
     11       
     12        Don't attempt to render an <feImage> if the referenced element is of size 0x0.
     13
     14        Tests: svg/filters/feImage-reference-svg-primitive.svg
     15               svg/filters/feImage-zero-size-crash.svg
     16
     17        * svg/SVGFEImageElement.cpp:
     18        (WebCore::SVGFEImageElement::parseMappedAttribute):
     19        (WebCore::SVGFEImageElement::build):
     20
    1212011-11-09  Dominic Cooney  <dominicc@chromium.org>
    222
  • trunk/Source/WebCore/svg/SVGFEImageElement.cpp

    r97448 r99782  
    114114
    115115    if (SVGURIReference::parseMappedAttribute(attr)) {
    116         requestImageResource();
     116        m_cachedImage = 0;
     117        m_targetImage.clear();
    117118        return;
    118119    }
     
    163164PassRefPtr<FilterEffect> SVGFEImageElement::build(SVGFilterBuilder*, Filter* filter)
    164165{
     166    if (!m_cachedImage && !m_targetImage)
     167        requestImageResource();
     168
    165169    if (!m_cachedImage && !m_targetImage) {
    166170        Element* hrefElement = SVGURIReference::targetElementFromIRIString(href(), document());
     
    173177
    174178        IntRect targetRect = enclosingIntRect(renderer->objectBoundingBox());
     179
     180        if (targetRect.isEmpty())
     181            return 0;
     182
    175183        m_targetImage = ImageBuffer::create(targetRect.size(), ColorSpaceLinearRGB);
    176184
Note: See TracChangeset for help on using the changeset viewer.