File tree Expand file tree Collapse file tree 2 files changed +17
-5
lines changed Expand file tree Collapse file tree 2 files changed +17
-5
lines changed Original file line number Diff line number Diff line change @@ -470,13 +470,15 @@ impl<R: Read> IntoIterator for Decoder<R> {
470
470
fn into_iter ( self ) -> Self :: IntoIter {
471
471
DecoderIter {
472
472
inner : self ,
473
+ ended : false ,
473
474
}
474
475
}
475
476
}
476
477
477
478
/// Use `decoder.into_iter()` to iterate over the frames
478
479
pub struct DecoderIter < R : Read > {
479
480
inner : Decoder < R > ,
481
+ ended : bool ,
480
482
}
481
483
482
484
impl < R : Read > DecoderIter < R > {
@@ -494,10 +496,20 @@ impl<R: Read> Iterator for DecoderIter<R> {
494
496
type Item = Result < Frame < ' static > , DecodingError > ;
495
497
496
498
fn next ( & mut self ) -> Option < Self :: Item > {
497
- match self . inner . read_next_frame ( ) {
498
- Ok ( Some ( _) ) => self . inner . take_current_frame ( ) . map ( Ok ) ,
499
- Ok ( None ) => None ,
500
- Err ( err) => Some ( Err ( err) ) ,
499
+ if !self . ended {
500
+ match self . inner . read_next_frame ( ) {
501
+ Ok ( Some ( _) ) => self . inner . take_current_frame ( ) . map ( Ok ) ,
502
+ Ok ( None ) => {
503
+ self . ended = true ;
504
+ None
505
+ } ,
506
+ Err ( err) => {
507
+ self . ended = true ;
508
+ Some ( Err ( err) )
509
+ } ,
510
+ }
511
+ } else {
512
+ None
501
513
}
502
514
}
503
515
}
Original file line number Diff line number Diff line change @@ -51,7 +51,7 @@ fn test_truncated_file() {
51
51
let truncated = & data[ ..len] ;
52
52
// it's expected to fail often, but should not stall or panic
53
53
if let Ok ( d) = gif:: DecodeOptions :: new ( ) . read_info ( truncated) {
54
- let _ = d. into_iter ( ) . take_while ( |f| f . is_ok ( ) ) . count ( ) ;
54
+ let _ = d. into_iter ( ) . count ( ) ;
55
55
}
56
56
}
57
57
}
You can’t perform that action at this time.
0 commit comments