Committed by
David PHAM-VAN
Fix raster crash on iOS and MacOS
- use guard let to prevent crashes when CGDataProvider cannot be instantiated
Showing
2 changed files
with
13 additions
and
11 deletions
@@ -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)) |
-
Please register or login to post a comment