Skip to content

Commit 1323326

Browse files
fix(ios): guard against nil markOpts and request to prevent EXC_BREAKPOINT crashes (#271)
1 parent 9f74cdb commit 1323326

1 file changed

Lines changed: 24 additions & 14 deletions

File tree

ios/RCTImageMarker/ImageMarker.swift

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,12 @@ public final class ImageMarker: NSObject, RCTBridgeModule {
3434
continuation.resume(throwing: error)
3535
}
3636
} else {
37-
let request = RCTConvert.nsurlRequest(img.src)
38-
imageLoader.loadImage(with: request!, size: CGSizeMake(img.rnSrc.width, img.rnSrc.height), scale: img.rnSrc.scale, clipped: false, resizeMode: RCTResizeMode.cover) { progress, total in
37+
guard let request = RCTConvert.nsurlRequest(img.src) else {
38+
let error = NSError(domain: ErrorDomainEnum.BASE.rawValue, code: 3, userInfo: [NSLocalizedDescriptionKey: "Failed to create URL request for image: \(img.uri)"])
39+
continuation.resume(throwing: error)
40+
return
41+
}
42+
imageLoader.loadImage(with: request, size: CGSizeMake(img.rnSrc.width, img.rnSrc.height), scale: img.rnSrc.scale, clipped: false, resizeMode: RCTResizeMode.cover) { progress, total in
3943
print("Loading image: \(img.uri) progress: \(progress) total\(total)")
4044
} partialLoad: { loadedImage in
4145
//
@@ -383,15 +387,18 @@ public final class ImageMarker: NSObject, RCTBridgeModule {
383387

384388
@objc(markWithText:resolver:rejecter:)
385389
func mark(withText opts: [AnyHashable: Any], resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) -> Void {
386-
let markOpts = MarkTextOptions.checkTextParams(opts, rejecter: rejecter)
387-
if markOpts === nil {
390+
guard let markOpts = MarkTextOptions.checkTextParams(opts, rejecter: rejecter) else {
388391
rejecter(ErrorDomainEnum.PARAMS_INVALID.rawValue, "opts invalid", nil)
392+
return
389393
}
390394
Task(priority: .userInitiated) {
391395
do {
392-
let images = try await loadImages(with: [(markOpts?.backgroundImage)!])
393-
let scaledImage = self.markImgWithText(images[0], markOpts!)
394-
let res = self.saveImageForMarker(scaledImage!, with: markOpts!)
396+
let images = try await self.loadImages(with: [markOpts.backgroundImage])
397+
guard let scaledImage = self.markImgWithText(images[0], markOpts) else {
398+
rejecter("error", "Failed to render watermarked image", nil)
399+
return
400+
}
401+
let res = self.saveImageForMarker(scaledImage, with: markOpts)
395402
resolver(res)
396403
print("Loaded images: \(images)")
397404
} catch {
@@ -403,18 +410,21 @@ public final class ImageMarker: NSObject, RCTBridgeModule {
403410

404411
@objc(markWithImage:resolver:rejecter:)
405412
func mark(withImage opts: [AnyHashable: Any], resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) -> Void {
406-
let markOpts = MarkImageOptions.checkImageParams(opts, rejecter: rejecter)
407-
if markOpts === nil {
413+
guard let markOpts = MarkImageOptions.checkImageParams(opts, rejecter: rejecter) else {
408414
rejecter(ErrorDomainEnum.PARAMS_INVALID.rawValue, "opts invalid", nil)
415+
return
409416
}
410417
Task(priority: .userInitiated) {
411418
do {
412-
let waterImages = markOpts?.watermarkImages.map { $0.imageOption }
413-
var images = try await loadImages(with: [(markOpts?.backgroundImage)!] + waterImages!)
414-
let scaledImage = self.markImage(with: images.remove(at: 0), waterImages: images, options: markOpts!)
415-
let res = self.saveImageForMarker(scaledImage!, with: markOpts!)
419+
let waterImages = markOpts.watermarkImages.map { $0.imageOption }
420+
var images = try await self.loadImages(with: [markOpts.backgroundImage] + waterImages)
421+
guard let scaledImage = self.markImage(with: images.remove(at: 0), waterImages: images, options: markOpts) else {
422+
rejecter("error", "Failed to render watermarked image", nil)
423+
return
424+
}
425+
let res = self.saveImageForMarker(scaledImage, with: markOpts)
416426
resolver(res)
417-
print("Loaded images: \(images), waterImages: \(String(describing: waterImages))")
427+
print("Loaded images: \(images), waterImages: \(waterImages)")
418428
} catch {
419429
print("Failed to load images, error: \(error).")
420430
rejecter("error", error.localizedDescription, error)

0 commit comments

Comments
 (0)