<rdar://problem/
9606676>
Callers should be robust against WebImage::create() returning an image with a null snapshot
Reviewed by Dan Bernstein.
* Shared/API/c/cg/WKImageCG.cpp:
(WKImageCreateCGImage):
Return 0 if no bitmap was created.
(WKImageCreateFromCGImage):
Ditto.
* Shared/UserMessageCoders.h:
(WebKit::UserMessageEncoder::baseEncode):
Check for null before dereferencing image->bitmap() in two places.
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::snapshotInViewCoordinates):
Return 0 if no bitmap was created.
(WebKit::WebPage::scaledSnapshotInDocumentCoordinates):
Ditto.
(WebKit::WebPage::createSnapshotOfVisibleContent):
Bail out if no bitmap was created.
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@88856
268f45cc-cd09-0410-ab3c-
d52691b4dbfc
+2011-06-14 John Sullivan <sullivan@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ <https://bugs.webkit.org/show_bug.cgi?id=62666>
+ <rdar://problem/9606676>
+ Callers should be robust against WebImage::create() returning an image with a null snapshot
+
+ * Shared/API/c/cg/WKImageCG.cpp:
+ (WKImageCreateCGImage):
+ Return 0 if no bitmap was created.
+ (WKImageCreateFromCGImage):
+ Ditto.
+
+ * Shared/UserMessageCoders.h:
+ (WebKit::UserMessageEncoder::baseEncode):
+ Check for null before dereferencing image->bitmap() in two places.
+
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::snapshotInViewCoordinates):
+ Return 0 if no bitmap was created.
+ (WebKit::WebPage::scaledSnapshotInDocumentCoordinates):
+ Ditto.
+ (WebKit::WebPage::createSnapshotOfVisibleContent):
+ Bail out if no bitmap was created.
+
2011-06-14 Anders Carlsson <andersca@apple.com>
Reviewed by Darin Adler.
CGImageRef WKImageCreateCGImage(WKImageRef imageRef)
{
- return toImpl(imageRef)->bitmap()->makeCGImageCopy().leakRef();
+ if (!imageRef)
+ return 0;
+
+ WebImage* webImage = toImpl(imageRef);
+ if (!webImage || !webImage->bitmap())
+ return 0;
+
+ return webImage->bitmap()->makeCGImageCopy().leakRef();
}
WKImageRef WKImageCreateFromCGImage(CGImageRef imageRef, WKImageOptions options)
{
+ if (!imageRef)
+ return 0;
+
IntSize imageSize(CGImageGetWidth(imageRef), CGImageGetHeight(imageRef));
RefPtr<WebImage> webImage = WebImage::create(imageSize, toImageOptions(options));
+ if (!webImage || !webImage->bitmap())
+ return 0;
+
OwnPtr<GraphicsContext> graphicsContext = webImage->bitmap()->createGraphicsContext();
CGContextDrawImage(graphicsContext->platformContext(), CGRectMake(0, 0, imageSize.width(), imageSize.height()), imageRef);
return toAPI(webImage.release().leakRef());
}
case APIObject::TypeImage: {
WebImage* image = static_cast<WebImage*>(m_root);
- if (!image->bitmap()->isBackedBySharedMemory()) {
+ if (!image->bitmap() || !image->bitmap()->isBackedBySharedMemory()) {
encoder->encode(false);
return true;
}
ShareableBitmap::Handle handle;
- if (!image->bitmap()->createHandle(handle))
+ if (!image->bitmap() || !image->bitmap()->createHandle(handle))
return false;
encoder->encode(true);
frameView->setPaintBehavior(oldBehavior | PaintBehaviorFlattenCompositingLayers);
RefPtr<WebImage> snapshot = WebImage::create(rect.size(), options);
+ if (!snapshot->bitmap())
+ return 0;
+
OwnPtr<WebCore::GraphicsContext> graphicsContext = snapshot->bitmap()->createGraphicsContext();
graphicsContext->save();
size = IntSize(ceil(rect.width() * scaleFactor), ceil(rect.height() * scaleFactor));
RefPtr<WebImage> snapshot = WebImage::create(size, options);
+ if (!snapshot->bitmap())
+ return 0;
+
OwnPtr<WebCore::GraphicsContext> graphicsContext = snapshot->bitmap()->createGraphicsContext();
graphicsContext->save();
FrameView* frameView = m_mainFrame->coreFrame()->view();
if (!frameView)
return;
+
IntRect contentRect = frameView->visibleContentRect(false);
RefPtr<WebImage> snapshotImage = scaledSnapshotInDocumentCoordinates(contentRect, 1, ImageOptionsShareable);
+ if (!snapshotImage->bitmap())
+ return;
+
snapshotImage->bitmap()->createHandle(snapshotHandle);
}