Eduardo Vital Alencar Cunha
Committed by David PHAM-VAN

Fix raster crash on iOS and MacOS

- use guard let to prevent crashes when CGDataProvider cannot be instantiated
@@ -312,18 +312,19 @@ public class PrintJob: UIPrintPageRenderer, UIPrintInteractionControllerDelegate @@ -312,18 +312,19 @@ public class PrintJob: UIPrintPageRenderer, UIPrintInteractionControllerDelegate
312 } 312 }
313 313
314 public func rasterPdf(data: Data, pages: [Int]?, scale: CGFloat) { 314 public func rasterPdf(data: Data, pages: [Int]?, scale: CGFloat) {
315 - let provider = CGDataProvider(data: data as CFData)! 315 + guard
  316 + let provider = CGDataProvider(data: data as CFData),
316 let document = CGPDFDocument(provider) 317 let document = CGPDFDocument(provider)
317 - if document == nil { 318 + else {
318 printing.onPageRasterEnd(printJob: self, error: "Cannot raster a malformed PDF file") 319 printing.onPageRasterEnd(printJob: self, error: "Cannot raster a malformed PDF file")
319 return 320 return
320 } 321 }
321 322
322 DispatchQueue.global().async { 323 DispatchQueue.global().async {
323 - let pageCount = document!.numberOfPages 324 + let pageCount = document.numberOfPages
324 325
325 for pageNum in pages ?? Array(0 ... pageCount - 1) { 326 for pageNum in pages ?? Array(0 ... pageCount - 1) {
326 - guard let page = document!.page(at: pageNum + 1) else { continue } 327 + guard let page = document.page(at: pageNum + 1) else { continue }
327 let angle = CGFloat(page.rotationAngle) * CGFloat.pi / -180 328 let angle = CGFloat(page.rotationAngle) * CGFloat.pi / -180
328 let rect = page.getBoxRect(.mediaBox) 329 let rect = page.getBoxRect(.mediaBox)
329 let width = Int(abs((cos(angle) * rect.width + sin(angle) * rect.height) * scale)) 330 let width = Int(abs((cos(angle) * rect.width + sin(angle) * rect.height) * scale))
@@ -252,18 +252,19 @@ public class PrintJob: NSView, NSSharingServicePickerDelegate { @@ -252,18 +252,19 @@ public class PrintJob: NSView, NSSharingServicePickerDelegate {
252 } 252 }
253 253
254 public func rasterPdf(data: Data, pages: [Int]?, scale: CGFloat) { 254 public func rasterPdf(data: Data, pages: [Int]?, scale: CGFloat) {
255 - let provider = CGDataProvider(data: data as CFData)! 255 + guard
  256 + let provider = CGDataProvider(data: data as CFData),
256 let document = CGPDFDocument(provider) 257 let document = CGPDFDocument(provider)
257 - if document == nil { 258 + else {
258 printing.onPageRasterEnd(printJob: self, error: "Cannot raster a malformed PDF file") 259 printing.onPageRasterEnd(printJob: self, error: "Cannot raster a malformed PDF file")
259 return 260 return
260 } 261 }
261 262
262 DispatchQueue.global().async { 263 DispatchQueue.global().async {
263 - let pageCount = document!.numberOfPages 264 + let pageCount = document.numberOfPages
264 265
265 for pageNum in pages ?? Array(0 ... pageCount - 1) { 266 for pageNum in pages ?? Array(0 ... pageCount - 1) {
266 - guard let page = document!.page(at: pageNum + 1) else { continue } 267 + guard let page = document.page(at: pageNum + 1) else { continue }
267 let angle = CGFloat(page.rotationAngle) * CGFloat.pi / -180 268 let angle = CGFloat(page.rotationAngle) * CGFloat.pi / -180
268 let rect = page.getBoxRect(.mediaBox) 269 let rect = page.getBoxRect(.mediaBox)
269 let width = Int(abs((cos(angle) * rect.width + sin(angle) * rect.height) * scale)) 270 let width = Int(abs((cos(angle) * rect.width + sin(angle) * rect.height) * scale))