Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Crash in CGImageWithCorrectOrientation #67

Open
AvdLee opened this issue Apr 5, 2018 · 2 comments
Open

Crash in CGImageWithCorrectOrientation #67

AvdLee opened this issue Apr 5, 2018 · 2 comments

Comments

@AvdLee
Copy link

AvdLee commented Apr 5, 2018

We currently expire crashes in our app, which we "fixed" by removing force unwraps and adding logging to get more insights.

Crashlog

Crashed: com.apple.root.user-interactive-qos
0  Rabbit                         0x104977fc4 specialized static Toucan.Util.CGImageWithCorrectOrientation(UIImage) -> CGImage (Toucan.swift:571)
1  Rabbit                         0x10497871c specialized static Toucan.Resize.resizeImage(UIImage, size : CGSize, fitMode : Toucan.Resize.FitMode) -> UIImage? (Toucan.swift)
2  Rabbit                         0x1049c9100 specialized ThumbnailGenerator.generate(for : UIImage) -> [ThumbnailGenerator.GeneratedThumbnail] (ThumbnailGenerator.swift:61)
3  Rabbit                         0x1049fa134 specialized ContentMetadataFetcher.(generateVisualPreviews(for : Content, image : UIImage, storageController : LocalStorageController, completionHandler : ([VisualPreview]) -> ()) -> ()).(closure #2).(closure #1) (ContentMetadataFetcher+Thumbnails.swift:73)
4  Rabbit                         0x1049fa08c partial apply for ContentMetadataFetcher.(generateVisualPreviews(for : Content, image : UIImage, storageController : LocalStorageController, completionHandler : ([VisualPreview]) -> ()) -> ()).(closure #2).(closure #1) (ContentMetadataFetcher+Thumbnails.swift)
5  Rabbit                         0x10493db00 thunk (ContentCreationController.swift)
6  libdispatch.dylib              0x1851a6a54 _dispatch_call_block_and_release + 24
7  libdispatch.dylib              0x1851a6a14 _dispatch_client_callout + 16
8  libdispatch.dylib              0x1851b3ea4 _dispatch_root_queue_drain + 1032
9  libdispatch.dylib              0x1851b3a38 _dispatch_worker_thread3 + 120
10 libsystem_pthread.dylib        0x18544f06c _pthread_wqthread + 1268
11 libsystem_pthread.dylib        0x18544eb6c start_wqthread + 4

Device and system information

iOS 10 and iOS 11
iPad and iPhone

Known stats from logging

The crash is happening on this line which force unwraps the CGContext. It seems that scenarios exist in which the created context is nil.

After adding a guard and logging in the return statement, we've seen logs like this:

Error Domain=Toucan Code=-3 "width: 3840 height: 5760 bitsPerComponent: 8 bitmapInfo: 5" UserInfo={NSLocalizedDescription=width: 3840 height: 5760 bitsPerComponent: 8 bitmapInfo: 5}
Error Domain=Toucan Code=-3 "width: 120 height: 160 bitsPerComponent: 8 bitmapInfo: 0" UserInfo={NSLocalizedDescription=width: 120 height: 160 bitsPerComponent: 8 bitmapInfo: 0}

I've tried to reproduce the crash by hardcoding these values, but that didn't reproduce the crash. I've also made sure that the cgImage and Colorspace are non nil:

guard let cgImage = image.cgImage else {
    throw NSError(domain: "Toucan", code: -1, userInfo: [NSLocalizedDescriptionKey: "CGImage is nil"])
}

guard let colorSpace = cgImage.colorSpace else {
    throw NSError(domain: "Toucan", code: -2, userInfo: [NSLocalizedDescriptionKey: "Color space is nil"])
}

We've never seen these being logged.

Next steps

We for now prevented this crash from happening again by adding guards and throws instead of force unwrapping. It would be great if we can find the cause of this crash and fix it instead.

@gavinbunney
Copy link
Owner

Hi @AvdLee, I've been trying to reproduce this without much luck. Indeed, like you said, adding a guard for CGContext failing would silently fix the issue, but I'm interested in getting to the root cause, otherwise you'd end up with empty images (which isn't great).

Do you have any sample images on which this fails with? Another possibility is if it's being used on a table cell that's being reaped? There was a recent PR merged (#68) to fix those types of issues.

@AvdLee
Copy link
Author

AvdLee commented Jan 8, 2019

Hi @gavinbunney, thanks for taking the time to look into this.

Unfortunately, we didn't have any images reproducing this issue. On top of that, we're no longer using Toucan so this issue is no longer causing any issues on our side. This makes it hard to give any additional information on whether it's fixed or still occurring.

Let me know if you have any other questions and I see what I can do.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants