File tree 1 file changed +19
-1
lines changed
1 file changed +19
-1
lines changed Original file line number Diff line number Diff line change 1
1
use crate :: bitmap:: { Bitmap , BitmapFormat } ;
2
2
use crate :: error:: Error ;
3
+ use png:: DecodingError ;
3
4
use std:: borrow:: Cow ;
4
5
use std:: io:: Read ;
5
6
use swf:: Color ;
@@ -379,7 +380,24 @@ fn decode_png(data: &[u8]) -> Result<Bitmap, Error> {
379
380
let mut reader = decoder. read_info ( ) ?;
380
381
381
382
let mut data = vec ! [ 0 ; reader. output_buffer_size( ) ] ;
382
- let info = reader. next_frame ( & mut data) ?;
383
+ let info = match reader. next_frame ( & mut data) {
384
+ Ok ( info) => info,
385
+ Err ( e) => {
386
+ if let DecodingError :: Format ( _) = e {
387
+ // PNG is malformed, however we don't want to panic here
388
+ // we just return an empty bitmap.
389
+ tracing:: warn!( "Malformed PNG: {:?}" , e) ;
390
+ return Ok ( Bitmap :: new (
391
+ reader. info ( ) . width ,
392
+ reader. info ( ) . height ,
393
+ BitmapFormat :: Rgba ,
394
+ vec ! [ ] ,
395
+ ) ) ;
396
+ } else {
397
+ return Err ( Error :: InvalidPng ( e) ) ;
398
+ }
399
+ }
400
+ } ;
383
401
384
402
let ( format, data) = match info. color_type {
385
403
ColorType :: Rgb => ( BitmapFormat :: Rgb , data) ,
You can’t perform that action at this time.
0 commit comments