Changeset 220066 in webkit
- Timestamp:
- Jul 31, 2017, 7:37:42 AM (9 years ago)
- Location:
- branches/safari-604-branch
- Files:
-
- 2 added
- 12 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/fast/images/image-element-image-content-data-expected.txt (added)
-
LayoutTests/fast/images/image-element-image-content-data.html (added)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/css/CSSCrossfadeValue.cpp (modified) (1 diff)
-
Source/WebCore/css/CSSFilterImageValue.cpp (modified) (1 diff)
-
Source/WebCore/page/EventHandler.cpp (modified) (1 diff)
-
Source/WebCore/page/PageSerializer.cpp (modified) (1 diff)
-
Source/WebCore/rendering/RenderElement.cpp (modified) (1 diff)
-
Source/WebCore/rendering/RenderImageResource.cpp (modified) (1 diff)
-
Source/WebCore/rendering/RenderImageResourceStyleImage.cpp (modified) (4 diffs)
-
Source/WebCore/rendering/style/ContentData.cpp (modified) (1 diff)
-
Source/WebCore/rendering/style/StyleCachedImage.cpp (modified) (1 diff)
-
Source/WebCore/style/StylePendingResources.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
branches/safari-604-branch/LayoutTests/ChangeLog
r220065 r220066 1 2017-07-31 Jason Marcell <jmarcell@apple.com> 2 3 Cherry-pick r220048. rdar://problem/33619591 4 5 2017-07-30 Said Abou-Hallawa <sabouhallawa@apple.com> 6 7 RenderImageResourceStyleImage::image() should return the nullImage() if the image is not available 8 https://bugs.webkit.org/show_bug.cgi?id=174874 9 <rdar://problem/33530130> 10 11 Reviewed by Darin Adler. 12 13 * fast/images/image-element-image-content-data-expected.txt: Added. 14 * fast/images/image-element-image-content-data.html: Added. 15 1 16 2017-07-31 Jason Marcell <jmarcell@apple.com> 2 17 -
branches/safari-604-branch/Source/WebCore/ChangeLog
r220065 r220066 1 2017-07-31 Jason Marcell <jmarcell@apple.com> 2 3 Cherry-pick r220048. rdar://problem/33619591 4 5 2017-07-30 Said Abou-Hallawa <sabouhallawa@apple.com> 6 7 RenderImageResourceStyleImage::image() should return the nullImage() if the image is not available 8 https://bugs.webkit.org/show_bug.cgi?id=174874 9 <rdar://problem/33530130> 10 11 Reviewed by Darin Adler. 12 13 If an <img> element has image content data for a none cached image, e.g. 14 -webkit-named-image, RenderImageResourceStyleImage will be created and 15 attached to the RenderImage. RenderImageResourceStyleImage::m_cachedImage 16 will be set to null because the m_styleImage->isCachedImage() is false in 17 this case. When ImageLoader finishes loading the url of the src attribute, 18 RenderImageResource::setCachedImage() will be called to set m_cachedImage. 19 20 A crash will happen when the RenderImage is destroyed. Destroying the 21 RenderImage calls RenderImageResourceStyleImage::shutdown() which checks 22 m_cachedImage and finds it not null, so it calls RenderImageResourceStyleImage::image() 23 which ends up calling CSSNamedImageValue::image() which returns a null pointer 24 because the size is empty. RenderImageResourceStyleImage::shutdown() calls 25 image()->stopAnimation() without checking the return value of image(). 26 27 Like the base class virtual method RenderImageResource::image(), 28 RenderImageResourceStyleImage::image() should return the nullImage() if 29 the image is not available. 30 31 Test: fast/images/image-element-image-content-data.html 32 33 * css/CSSCrossfadeValue.cpp: 34 * css/CSSFilterImageValue.cpp: 35 * page/EventHandler.cpp: 36 * page/PageSerializer.cpp: 37 * rendering/RenderElement.cpp: 38 * rendering/RenderImageResource.cpp: 39 * rendering/RenderImageResourceStyleImage.cpp: 40 (WebCore::RenderImageResourceStyleImage::initialize): 41 42 (WebCore::RenderImageResourceStyleImage::shutdown): Revert back the changes 43 of r208511 in this function. Add a call to image()->stopAnimation() without 44 checking the return of image() since it will return the nullImage() if 45 the image not available. There is no need to check m_cachedImage before 46 calling image() because image() does not check or access m_cachedImage. 47 48 (WebCore::RenderImageResourceStyleImage::image): The base class method 49 RenderImageResource::image() returns the nullImage() if the image not 50 available. This is because CachedImage::imageForRenderer() returns 51 the nullImage() if the image is not available; see CachedImage.h. We should 52 do the same for the derived class for consistency. 53 54 * rendering/style/ContentData.cpp: 55 * rendering/style/StyleCachedImage.cpp: 56 * style/StylePendingResources.cpp: 57 1 58 2017-07-31 Jason Marcell <jmarcell@apple.com> 2 59 -
branches/safari-604-branch/Source/WebCore/css/CSSCrossfadeValue.cpp
r218890 r220066 34 34 #include "CrossfadeGeneratedImage.h" 35 35 #include "RenderElement.h" 36 #include "StyleCachedImage.h"37 36 #include <wtf/text/StringBuilder.h> 38 37 -
branches/safari-604-branch/Source/WebCore/css/CSSFilterImageValue.cpp
r218890 r220066 34 34 #include "ImageBuffer.h" 35 35 #include "RenderElement.h" 36 #include "StyleCachedImage.h"37 36 #include "StyleResolver.h" 38 37 #include <wtf/text/StringBuilder.h> -
branches/safari-604-branch/Source/WebCore/page/EventHandler.cpp
r220023 r220066 86 86 #include "ShadowRoot.h" 87 87 #include "SpatialNavigation.h" 88 #include "StyleCachedImage.h"89 88 #include "TextEvent.h" 90 89 #include "TextIterator.h" -
branches/safari-604-branch/Source/WebCore/page/PageSerializer.cpp
r216702 r220066 53 53 #include "Page.h" 54 54 #include "RenderElement.h" 55 #include "StyleCachedImage.h"56 55 #include "StyleImage.h" 57 56 #include "StyleProperties.h" -
branches/safari-604-branch/Source/WebCore/rendering/RenderElement.cpp
r217893 r220066 51 51 #include "RenderFlexibleBox.h" 52 52 #include "RenderImage.h" 53 #include "RenderImageResourceStyleImage.h"54 53 #include "RenderInline.h" 55 54 #include "RenderIterator.h" -
branches/safari-604-branch/Source/WebCore/rendering/RenderImageResource.cpp
r217012 r220066 33 33 #include "RenderElement.h" 34 34 #include "RenderImage.h" 35 #include "RenderImageResourceStyleImage.h"36 35 37 36 namespace WebCore { -
branches/safari-604-branch/Source/WebCore/rendering/RenderImageResourceStyleImage.cpp
r219205 r220066 31 31 #include "CachedImage.h" 32 32 #include "RenderElement.h" 33 #include "StyleCachedImage.h"34 33 35 34 namespace WebCore { … … 49 48 50 49 if (m_styleImage->isCachedImage()) 51 m_cachedImage = m_styleImage .get().cachedImage();50 m_cachedImage = m_styleImage->cachedImage(); 52 51 53 52 m_styleImage->addClient(m_renderer); … … 57 56 { 58 57 ASSERT(m_renderer); 58 image()->stopAnimation(); 59 59 m_styleImage->removeClient(m_renderer); 60 if (m_cachedImage) { 61 image()->stopAnimation(); 62 m_cachedImage = nullptr; 63 } 60 m_cachedImage = nullptr; 64 61 } 65 62 … … 67 64 { 68 65 // Generated content may trigger calls to image() while we're still pending, don't assert but gracefully exit. 69 return !m_styleImage->isPending() ? m_styleImage->image(m_renderer, size) : &Image::nullImage(); 66 if (m_styleImage->isPending()) 67 return &Image::nullImage(); 68 if (auto image = m_styleImage->image(m_renderer, size)) 69 return image; 70 return &Image::nullImage(); 70 71 } 71 72 -
branches/safari-604-branch/Source/WebCore/rendering/style/ContentData.cpp
r210758 r220066 26 26 #include "RenderImage.h" 27 27 #include "RenderImageResource.h" 28 #include "RenderImageResourceStyleImage.h"29 28 #include "RenderQuote.h" 30 29 #include "RenderStyle.h" -
branches/safari-604-branch/Source/WebCore/rendering/style/StyleCachedImage.cpp
r215700 r220066 30 30 #include "CachedImage.h" 31 31 #include "RenderElement.h" 32 #include "RenderView.h"33 32 34 33 namespace WebCore { -
branches/safari-604-branch/Source/WebCore/style/StylePendingResources.cpp
r210758 r220066 35 35 #include "RenderStyle.h" 36 36 #include "SVGURIReference.h" 37 #include "StyleCachedImage.h"38 37 #include "StyleGeneratedImage.h" 39 38 #include "TransformFunctions.h"
Note:
See TracChangeset
for help on using the changeset viewer.