@@ -45,7 +45,6 @@ impl<R: BufRead + Seek> PngDecoder<R> {
4545
4646 let max_bytes = usize:: try_from ( limits. max_alloc . unwrap_or ( u64:: MAX ) ) . unwrap_or ( usize:: MAX ) ;
4747 let mut decoder = png:: Decoder :: new_with_limits ( r, png:: Limits { bytes : max_bytes } ) ;
48- decoder. set_ignore_text_chunk ( true ) ;
4948
5049 let info = decoder. read_header_info ( ) . map_err ( ImageError :: from_png) ?;
5150 limits. check_dimensions ( info. width , info. height ) ?;
@@ -306,8 +305,13 @@ impl<R: BufRead + Seek> ApngDecoder<R> {
306305 if self . has_thumbnail {
307306 // Clone the limits so that our one-off allocation that's destroyed after this scope doesn't persist
308307 let mut limits = self . inner . limits . clone ( ) ;
309- limits. reserve_usize ( self . inner . reader . output_buffer_size ( ) ) ?;
310- let mut buffer = vec ! [ 0 ; self . inner. reader. output_buffer_size( ) ] ;
308+
309+ let buffer_size = self . inner . reader . output_buffer_size ( ) . ok_or_else ( || {
310+ ImageError :: Limits ( LimitError :: from_kind ( LimitErrorKind :: InsufficientMemory ) )
311+ } ) ?;
312+
313+ limits. reserve_usize ( buffer_size) ?;
314+ let mut buffer = vec ! [ 0 ; buffer_size] ;
311315 // TODO: add `png::Reader::change_limits()` and call it here
312316 // to also constrain the internal buffer allocations in the PNG crate
313317 self . inner
@@ -364,7 +368,10 @@ impl<R: BufRead + Seek> ApngDecoder<R> {
364368 let mut limits = self . inner . limits . clone ( ) ;
365369
366370 // Read next frame data.
367- let raw_frame_size = self . inner . reader . output_buffer_size ( ) ;
371+ let raw_frame_size = self . inner . reader . output_buffer_size ( ) . ok_or_else ( || {
372+ ImageError :: Limits ( LimitError :: from_kind ( LimitErrorKind :: InsufficientMemory ) )
373+ } ) ?;
374+
368375 limits. reserve_usize ( raw_frame_size) ?;
369376 let mut buffer = vec ! [ 0 ; raw_frame_size] ;
370377 // TODO: add `png::Reader::change_limits()` and call it here
@@ -597,21 +604,20 @@ impl<W: Write> PngEncoder<W> {
597604 ) )
598605 }
599606 } ;
607+
600608 let comp = match self . compression {
601- CompressionType :: Default => png:: Compression :: Default ,
602- CompressionType :: Best => png:: Compression :: Best ,
609+ CompressionType :: Default => png:: Compression :: Balanced ,
610+ CompressionType :: Best => png:: Compression :: High ,
603611 _ => png:: Compression :: Fast ,
604612 } ;
605- let ( filter, adaptive_filter) = match self . filter {
606- FilterType :: NoFilter => (
607- png:: FilterType :: NoFilter ,
608- png:: AdaptiveFilterType :: NonAdaptive ,
609- ) ,
610- FilterType :: Sub => ( png:: FilterType :: Sub , png:: AdaptiveFilterType :: NonAdaptive ) ,
611- FilterType :: Up => ( png:: FilterType :: Up , png:: AdaptiveFilterType :: NonAdaptive ) ,
612- FilterType :: Avg => ( png:: FilterType :: Avg , png:: AdaptiveFilterType :: NonAdaptive ) ,
613- FilterType :: Paeth => ( png:: FilterType :: Paeth , png:: AdaptiveFilterType :: NonAdaptive ) ,
614- FilterType :: Adaptive => ( png:: FilterType :: Sub , png:: AdaptiveFilterType :: Adaptive ) ,
613+
614+ let filter = match self . filter {
615+ FilterType :: NoFilter => png:: Filter :: NoFilter ,
616+ FilterType :: Sub => png:: Filter :: Sub ,
617+ FilterType :: Up => png:: Filter :: Up ,
618+ FilterType :: Avg => png:: Filter :: Avg ,
619+ FilterType :: Paeth => png:: Filter :: Paeth ,
620+ FilterType :: Adaptive => png:: Filter :: Adaptive ,
615621 } ;
616622
617623 let mut info = png:: Info :: with_size ( width, height) ;
@@ -630,7 +636,6 @@ impl<W: Write> PngEncoder<W> {
630636 encoder. set_depth ( bits) ;
631637 encoder. set_compression ( comp) ;
632638 encoder. set_filter ( filter) ;
633- encoder. set_adaptive_filter ( adaptive_filter) ;
634639 let mut writer = encoder
635640 . write_header ( )
636641 . map_err ( |e| ImageError :: IoError ( e. into ( ) ) ) ?;
0 commit comments