Changeset 220048 in webkit
- Timestamp:
- Jul 30, 2017, 12:38:31 AM (9 years ago)
- Location:
- trunk
- 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
-
trunk/LayoutTests/ChangeLog
r220042 r220048 1 2017-07-30 Said Abou-Hallawa <sabouhallawa@apple.com> 2 3 RenderImageResourceStyleImage::image() should return the nullImage() if the image is not available 4 https://bugs.webkit.org/show_bug.cgi?id=174874 5 <rdar://problem/33530130> 6 7 Reviewed by Darin Adler. 8 9 * fast/images/image-element-image-content-data-expected.txt: Added. 10 * fast/images/image-element-image-content-data.html: Added. 11 1 12 2017-07-29 Nan Wang <n_wang@apple.com> 2 13 -
trunk/Source/WebCore/ChangeLog
r220045 r220048 1 2017-07-30 Said Abou-Hallawa <sabouhallawa@apple.com> 2 3 RenderImageResourceStyleImage::image() should return the nullImage() if the image is not available 4 https://bugs.webkit.org/show_bug.cgi?id=174874 5 <rdar://problem/33530130> 6 7 Reviewed by Darin Adler. 8 9 If an <img> element has image content data for a none cached image, e.g. 10 -webkit-named-image, RenderImageResourceStyleImage will be created and 11 attached to the RenderImage. RenderImageResourceStyleImage::m_cachedImage 12 will be set to null because the m_styleImage->isCachedImage() is false in 13 this case. When ImageLoader finishes loading the url of the src attribute, 14 RenderImageResource::setCachedImage() will be called to set m_cachedImage. 15 16 A crash will happen when the RenderImage is destroyed. Destroying the 17 RenderImage calls RenderImageResourceStyleImage::shutdown() which checks 18 m_cachedImage and finds it not null, so it calls RenderImageResourceStyleImage::image() 19 which ends up calling CSSNamedImageValue::image() which returns a null pointer 20 because the size is empty. RenderImageResourceStyleImage::shutdown() calls 21 image()->stopAnimation() without checking the return value of image(). 22 23 Like the base class virtual method RenderImageResource::image(), 24 RenderImageResourceStyleImage::image() should return the nullImage() if 25 the image is not available. 26 27 Test: fast/images/image-element-image-content-data.html 28 29 * css/CSSCrossfadeValue.cpp: 30 * css/CSSFilterImageValue.cpp: 31 * page/EventHandler.cpp: 32 * page/PageSerializer.cpp: 33 * rendering/RenderElement.cpp: 34 * rendering/RenderImageResource.cpp: 35 * rendering/RenderImageResourceStyleImage.cpp: 36 (WebCore::RenderImageResourceStyleImage::initialize): 37 38 (WebCore::RenderImageResourceStyleImage::shutdown): Revert back the changes 39 of r208511 in this function. Add a call to image()->stopAnimation() without 40 checking the return of image() since it will return the nullImage() if 41 the image not available. There is no need to check m_cachedImage before 42 calling image() because image() does not check or access m_cachedImage. 43 44 (WebCore::RenderImageResourceStyleImage::image): The base class method 45 RenderImageResource::image() returns the nullImage() if the image not 46 available. This is because CachedImage::imageForRenderer() returns 47 the nullImage() if the image is not available; see CachedImage.h. We should 48 do the same for the derived class for consistency. 49 50 * rendering/style/ContentData.cpp: 51 * rendering/style/StyleCachedImage.cpp: 52 * style/StylePendingResources.cpp: 53 1 54 2017-07-29 Filip Pizlo <fpizlo@apple.com> 2 55 -
trunk/Source/WebCore/css/CSSCrossfadeValue.cpp
r218890 r220048 34 34 #include "CrossfadeGeneratedImage.h" 35 35 #include "RenderElement.h" 36 #include "StyleCachedImage.h"37 36 #include <wtf/text/StringBuilder.h> 38 37 -
trunk/Source/WebCore/css/CSSFilterImageValue.cpp
r218890 r220048 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> -
trunk/Source/WebCore/page/EventHandler.cpp
r219961 r220048 87 87 #include "ShadowRoot.h" 88 88 #include "SpatialNavigation.h" 89 #include "StyleCachedImage.h"90 89 #include "TextEvent.h" 91 90 #include "TextIterator.h" -
trunk/Source/WebCore/page/PageSerializer.cpp
r216702 r220048 53 53 #include "Page.h" 54 54 #include "RenderElement.h" 55 #include "StyleCachedImage.h"56 55 #include "StyleImage.h" 57 56 #include "StyleProperties.h" -
trunk/Source/WebCore/rendering/RenderElement.cpp
r217893 r220048 51 51 #include "RenderFlexibleBox.h" 52 52 #include "RenderImage.h" 53 #include "RenderImageResourceStyleImage.h"54 53 #include "RenderInline.h" 55 54 #include "RenderIterator.h" -
trunk/Source/WebCore/rendering/RenderImageResource.cpp
r217012 r220048 33 33 #include "RenderElement.h" 34 34 #include "RenderImage.h" 35 #include "RenderImageResourceStyleImage.h"36 35 37 36 namespace WebCore { -
trunk/Source/WebCore/rendering/RenderImageResourceStyleImage.cpp
r219205 r220048 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 -
trunk/Source/WebCore/rendering/style/ContentData.cpp
r210758 r220048 26 26 #include "RenderImage.h" 27 27 #include "RenderImageResource.h" 28 #include "RenderImageResourceStyleImage.h"29 28 #include "RenderQuote.h" 30 29 #include "RenderStyle.h" -
trunk/Source/WebCore/rendering/style/StyleCachedImage.cpp
r215700 r220048 30 30 #include "CachedImage.h" 31 31 #include "RenderElement.h" 32 #include "RenderView.h"33 32 34 33 namespace WebCore { -
trunk/Source/WebCore/style/StylePendingResources.cpp
r210758 r220048 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.