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
@@ -32,7 +32,7 @@ public class PrintJob: UIPrintPageRenderer, UIPrintInteractionControllerDelegate @@ -32,7 +32,7 @@ public class PrintJob: UIPrintPageRenderer, UIPrintInteractionControllerDelegate
32 private let semaphore = DispatchSemaphore(value: 0) 32 private let semaphore = DispatchSemaphore(value: 0)
33 private var dynamic = false 33 private var dynamic = false
34 private var currentSize: CGSize? 34 private var currentSize: CGSize?
35 - 35 +
36 public init(printing: PrintingPlugin, index: Int) { 36 public init(printing: PrintingPlugin, index: Int) {
37 self.printing = printing 37 self.printing = printing
38 self.index = index 38 self.index = index
@@ -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)!  
316 - let document = CGPDFDocument(provider)  
317 - if document == nil { 315 + guard
  316 + let provider = CGDataProvider(data: data as CFData),
  317 + let document = CGPDFDocument(provider)
  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)!  
256 - let document = CGPDFDocument(provider)  
257 - if document == nil { 255 + guard
  256 + let provider = CGDataProvider(data: data as CFData),
  257 + let document = CGPDFDocument(provider)
  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))