Changeset 52219 in webkit
- Timestamp:
- Dec 16, 2009 1:56:54 PM (14 years ago)
- Location:
- trunk
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r52202 r52219 1 2009-12-16 Dirk Schulze <krit@webkit.org> 2 3 Reviewed by Nikolas Zimmermann. 4 5 feMerge crahses if feMergeNodes attribute in is empty 6 https://bugs.webkit.org/show_bug.cgi?id=32489 7 8 The previous test only checked if feMerge works on empty node 9 without a last effect. In this case we get a source image and 10 everything works fine. This test also covers the case if there 11 is a last effect. 12 13 * platform/mac/svg/custom/empty-merge-expected.checksum: 14 * platform/mac/svg/custom/empty-merge-expected.png: 15 * platform/mac/svg/custom/empty-merge-expected.txt: 16 * svg/custom/empty-merge.svg: 17 1 18 2009-12-16 Dirk Schulze <krit@webkit.org> 2 19 -
trunk/LayoutTests/platform/mac/svg/custom/empty-merge-expected.checksum
r51800 r52219 1 2fd864fa7542ee18457a298ded77cec11 43d38b779dd3330bfb490ba26a4bff71 -
trunk/LayoutTests/platform/mac/svg/custom/empty-merge-expected.txt
r51800 r52219 1 KCanvasResource {id="MyFilter" [type=FILTER] [bounding box=at (0,0) size 100x100] [bounding box mode=0]} 1 KCanvasResource {id="MyFilter1" [type=FILTER] [bounding box=at (-10.00%,-10.00%) size 120.00%x120.00%]} 2 KCanvasResource {id="MyFilter2" [type=FILTER] [bounding box=at (-10.00%,-10.00%) size 120.00%x120.00%]} 2 3 layer at (0,0) size 800x600 3 4 RenderView at (0,0) size 800x600 4 5 layer at (0,0) size 800x600 5 RenderSVGRoot {svg} at ( -0.50,-0.50) size 102x1026 RenderSVGRoot {svg} at (10,10) size 220x100 6 7 RenderSVGHiddenContainer {defs} at (0,0) size 0x0 7 RenderPath {rect} at (0.50,0.50) size 101x101 [stroke={[type=SOLID] [color=#0000FF]}] [fill={[type=SOLID] [color=#888888]}] [data="M1.00,1.00 L101.00,1.00 L101.00,101.00 L1.00,101.00 Z"] 8 RenderSVGContainer {g} at (-0.50,-0.50) size 101x101 [filter=MyFilter] 9 RenderPath {rect} at (-0.50,-0.50) size 101x101 [stroke={[type=SOLID] [color=#0000FF]}] [fill={[type=SOLID] [color=#008000]}] [data="M0.00,0.00 L100.00,0.00 L100.00,100.00 L0.00,100.00 Z"] 8 RenderPath {rect} at (10,10) size 100x100 [fill={[type=SOLID] [color=#008000]}] [filter=MyFilter1] [data="M10.00,10.00 L110.00,10.00 L110.00,110.00 L10.00,110.00 Z"] 9 RenderPath {rect} at (130,10) size 100x100 [fill={[type=SOLID] [color=#008000]}] [filter=MyFilter2] [data="M130.00,10.00 L230.00,10.00 L230.00,110.00 L130.00,110.00 Z"] -
trunk/LayoutTests/svg/custom/empty-merge.svg
r16557 r52219 1 <?xml version="1.0"?>2 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"3 "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">4 1 <svg xmlns="http://www.w3.org/2000/svg" version="1.1"> 5 <title>TestCase for empty feMerge component</title> 6 <defs> 7 <filter id="MyFilter" filterUnits="userSpaceOnUse" x="0" y="0" width="100" height="100"> 8 <feMerge> 9 <feMergeNode/> 10 </feMerge> 11 </filter> 12 </defs> 13 <rect x="1" y="1" width="100" height="100" fill="#888888" stroke="blue" /> 14 <g filter="url(#MyFilter)" > 15 <rect fill="green" stroke="blue" x="0" y="0" width="100" height="100"/> 16 </g> 2 <!-- TestCase for empty feMerge component. You should see 2 green rects --> 3 <defs> 4 <filter id="MyFilter1"> 5 <feMerge> 6 <feMergeNode/> 7 </feMerge> 8 </filter> 9 <filter id="MyFilter2"> 10 <feOffset/> 11 <feMerge> 12 <feMergeNode/> 13 </feMerge> 14 </filter> 15 </defs> 16 <rect fill="green" x="10" y="10" width="100" height="100" filter="url(#MyFilter1)"/> 17 <rect fill="green" x="130" y="10" width="100" height="100" filter="url(#MyFilter2)"/> 17 18 </svg> -
trunk/WebCore/ChangeLog
r52217 r52219 1 2009-12-16 Dirk Schulze <krit@webkit.org> 2 3 Reviewed by Nikolas Zimmermann. 4 5 feMerge crahses if feMergeNodes attribute in is empty 6 https://bugs.webkit.org/show_bug.cgi?id=32489 7 8 SVGFEMergeElement only stored pointers to all effects of it's nodes 9 in a list. But it should store the RefPtr otherwise the effects get 10 dereferenced and WebKit crashes. 11 I also made a short clean-up in SVGFilterBuilder. No change in 12 functionality. 13 14 Test: I updated svg/custom/empty-merge.svg to cover this problem. 15 16 * svg/SVGFEMergeElement.cpp: 17 (WebCore::SVGFEMergeElement::build): 18 * svg/graphics/filters/SVGFEMerge.cpp: 19 (WebCore::FEMerge::FEMerge): 20 (WebCore::FEMerge::create): 21 (WebCore::FEMerge::mergeInputs): 22 (WebCore::FEMerge::setMergeInputs): 23 * svg/graphics/filters/SVGFEMerge.h: 24 * svg/graphics/filters/SVGFilterBuilder.cpp: 25 (WebCore::SVGFilterBuilder::add): 26 1 27 2009-12-16 Brian Weinstein <bweinstein@apple.com> 2 28 -
trunk/WebCore/svg/SVGFEMergeElement.cpp
r50583 r52219 40 40 bool SVGFEMergeElement::build(SVGResourceFilter* filterResource) 41 41 { 42 Vector< FilterEffect*> mergeInputs;42 Vector<RefPtr<FilterEffect> > mergeInputs; 43 43 for (Node* n = firstChild(); n != 0; n = n->nextSibling()) { 44 44 if (n->hasTagName(SVGNames::feMergeNodeTag)) { -
trunk/WebCore/svg/graphics/filters/SVGFEMerge.cpp
r51310 r52219 31 31 namespace WebCore { 32 32 33 FEMerge::FEMerge(const Vector< FilterEffect*>& mergeInputs)33 FEMerge::FEMerge(const Vector<RefPtr<FilterEffect> >& mergeInputs) 34 34 : FilterEffect() 35 35 , m_mergeInputs(mergeInputs) … … 37 37 } 38 38 39 PassRefPtr<FEMerge> FEMerge::create(const Vector< FilterEffect*>& mergeInputs)39 PassRefPtr<FEMerge> FEMerge::create(const Vector<RefPtr<FilterEffect> >& mergeInputs) 40 40 { 41 41 return adoptRef(new FEMerge(mergeInputs)); 42 42 } 43 43 44 const Vector< FilterEffect*>& FEMerge::mergeInputs() const44 const Vector<RefPtr<FilterEffect> >& FEMerge::mergeInputs() const 45 45 { 46 46 return m_mergeInputs; 47 47 } 48 48 49 void FEMerge::setMergeInputs(const Vector< FilterEffect*>& mergeInputs)49 void FEMerge::setMergeInputs(const Vector<RefPtr<FilterEffect> >& mergeInputs) 50 50 { 51 51 m_mergeInputs = mergeInputs; -
trunk/WebCore/svg/graphics/filters/SVGFEMerge.h
r44839 r52219 32 32 class FEMerge : public FilterEffect { 33 33 public: 34 static PassRefPtr<FEMerge> create(const Vector< FilterEffect*>&);34 static PassRefPtr<FEMerge> create(const Vector<RefPtr<FilterEffect> >&); 35 35 36 const Vector< FilterEffect*>& mergeInputs() const;37 void setMergeInputs(const Vector< FilterEffect*>& mergeInputs);36 const Vector<RefPtr<FilterEffect> >& mergeInputs() const; 37 void setMergeInputs(const Vector<RefPtr<FilterEffect> >& mergeInputs); 38 38 39 39 virtual FloatRect uniteChildEffectSubregions(Filter*); … … 43 43 44 44 private: 45 FEMerge(const Vector< FilterEffect*>&);45 FEMerge(const Vector<RefPtr<FilterEffect> >&); 46 46 47 Vector< FilterEffect*> m_mergeInputs;47 Vector<RefPtr<FilterEffect> > m_mergeInputs; 48 48 }; 49 49 -
trunk/WebCore/svg/graphics/filters/SVGFilterBuilder.cpp
r44338 r52219 43 43 { 44 44 if (id.isEmpty()) { 45 m_lastEffect = effect .get();45 m_lastEffect = effect; 46 46 return; 47 47 } … … 50 50 return; 51 51 52 m_lastEffect = effect .get();52 m_lastEffect = effect; 53 53 m_namedEffects.set(id, m_lastEffect); 54 54 }
Note: See TracChangeset
for help on using the changeset viewer.