Skip to content

Commit

Permalink
CrashTracer: com.apple.WebKit.WebContent at CoreGraphics: CGDataProvi…
Browse files Browse the repository at this point in the history
…derCopyData

https://bugs.webkit.org/show_bug.cgi?id=259296
rdar://29394886

Reviewed by Simon Fraser.

The change in https://commits.webkit.org/262607@main has caused an
occasional out of memory exception to be thrown in CGDataProviderCopyData.
Catch and ignore this exception, while bailing out of the method.

I've added some logging to give more information if we see it again.

This involved changing a .cpp file to .mm.

* Source/WebKit/Shared/cg/ShareableBitmapCG.mm: Renamed from Source/WebKit/Shared/cg/ShareableBitmapCG.cpp.
(WebKit::ShareableBitmapConfiguration::ShareableBitmapConfiguration):
(WebKit::ShareableBitmapConfiguration::validateColorSpace):
(WebKit::wantsExtendedRange):
(WebKit::ShareableBitmapConfiguration::calculateBytesPerPixel):
(WebKit::ShareableBitmapConfiguration::calculateBytesPerRow):
(WebKit::ShareableBitmapConfiguration::calculateBitmapInfo):
(WebKit::ShareableBitmap::createFromImagePixels):
(WebKit::ShareableBitmap::createGraphicsContext):
(WebKit::ShareableBitmap::paint):
(WebKit::ShareableBitmap::makeCGImageCopy):
(WebKit::ShareableBitmap::makeCGImage):
(WebKit::ShareableBitmap::createPlatformImage):
(WebKit::ShareableBitmap::createCGImage const):
(WebKit::ShareableBitmap::releaseBitmapContextData):
(WebKit::ShareableBitmap::createImage):
* Source/WebKit/SourcesCocoa.txt:
* Source/WebKit/WebKit.xcodeproj/project.pbxproj:

Canonical link: https://commits.webkit.org/266119@main
  • Loading branch information
grorg committed Jul 18, 2023
1 parent f59ad3e commit a5aad74
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ CheckedUint32 ShareableBitmapConfiguration::calculateBytesPerRow(const IntSize&
#if HAVE(IOSURFACE)
if (bytesPerRow.hasOverflowed())
return bytesPerRow;
size_t alignmentMask = IOSurface::bytesPerRowAlignment() - 1;
size_t alignmentMask = WebCore::IOSurface::bytesPerRowAlignment() - 1;
return (bytesPerRow + alignmentMask) & ~alignmentMask;
#else
return bytesPerRow;
Expand Down Expand Up @@ -115,7 +115,20 @@ RefPtr<ShareableBitmap> ShareableBitmap::createFromImagePixels(NativeImage& imag
if (colorSpace != DestinationColorSpace::SRGB())
return nullptr;

auto pixels = adoptCF(CGDataProviderCopyData(CGImageGetDataProvider(image.platformImage().get())));
auto configuration = ShareableBitmapConfiguration(image);

RetainPtr<CFDataRef> pixels;
@try {
pixels = adoptCF(CGDataProviderCopyData(CGImageGetDataProvider(image.platformImage().get())));
} @catch (id exception) {
LOG_WITH_STREAM(Images, stream
<< "ShareableBitmap::createFromImagePixels() failed CGDataProviderCopyData "
<< " CGImage size: " << configuration.size()
<< " CGImage bytesPerRow: " << configuration.bytesPerRow()
<< " CGImage sizeInBytes: " << configuration.sizeInBytes());
return nullptr;
}

if (!pixels)
return nullptr;

Expand All @@ -124,10 +137,9 @@ RefPtr<ShareableBitmap> ShareableBitmap::createFromImagePixels(NativeImage& imag
if (!bytes || !sizeInBytes || sizeInBytes.hasOverflowed())
return nullptr;

auto configuration = ShareableBitmapConfiguration(image);
if (configuration.sizeInBytes() != sizeInBytes) {
LOG_WITH_STREAM(Images, stream
<< "ShareableBitmap::createFromImagePixels() " << image. platformImage().get()
<< "ShareableBitmap::createFromImagePixels() " << image.platformImage().get()
<< " CGImage size: " << configuration.size()
<< " CGImage bytesPerRow: " << configuration.bytesPerRow()
<< " CGImage sizeInBytes: " << configuration.sizeInBytes()
Expand Down
2 changes: 1 addition & 1 deletion Source/WebKit/SourcesCocoa.txt
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ Shared/WebSQLiteDatabaseTracker.cpp
Shared/cf/ArgumentCodersCF.cpp @no-unify
Shared/cf/CookieStorageUtilsCF.mm

Shared/cg/ShareableBitmapCG.cpp
Shared/cg/ShareableBitmapCG.mm

Shared/Authentication/cocoa/AuthenticationChallengeDispositionCocoa.mm
Shared/Authentication/cocoa/AuthenticationManagerCocoa.mm
Expand Down
4 changes: 2 additions & 2 deletions Source/WebKit/WebKit.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -6711,7 +6711,7 @@
BCFD5489132D82680055D816 /* WKErrorCF.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKErrorCF.cpp; sourceTree = "<group>"; };
BCFD548A132D82680055D816 /* WKErrorCF.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKErrorCF.h; sourceTree = "<group>"; };
BFA6179E12F0B99D0033E0CA /* WKViewPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKViewPrivate.h; sourceTree = "<group>"; };
C01A260012662F2100C9ED55 /* ShareableBitmapCG.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ShareableBitmapCG.cpp; sourceTree = "<group>"; };
C01A260012662F2100C9ED55 /* ShareableBitmapCG.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ShareableBitmapCG.mm; sourceTree = "<group>"; };
C02BFF1512514FD8009CCBEA /* NativeWebKeyboardEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NativeWebKeyboardEvent.h; sourceTree = "<group>"; };
C02BFF1D1251502E009CCBEA /* NativeWebKeyboardEventMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = NativeWebKeyboardEventMac.mm; sourceTree = "<group>"; };
C0337DAD127A24FE008FF4F4 /* WebEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebEvent.cpp; sourceTree = "<group>"; };
Expand Down Expand Up @@ -13245,7 +13245,7 @@
C01A25FF12662F2100C9ED55 /* cg */ = {
isa = PBXGroup;
children = (
C01A260012662F2100C9ED55 /* ShareableBitmapCG.cpp */,
C01A260012662F2100C9ED55 /* ShareableBitmapCG.mm */,
);
path = cg;
sourceTree = "<group>";
Expand Down

0 comments on commit a5aad74

Please sign in to comment.