@@ -386,7 +386,7 @@ pub fn parse_sos<R: Read>(reader: &mut R, frame: &FrameInfo) -> Result<ScanInfo>
386
386
}
387
387
388
388
let spectral_selection_start = read_u8 ( reader) ?;
389
- let spectral_selection_end = read_u8 ( reader) ?;
389
+ let mut spectral_selection_end = read_u8 ( reader) ?;
390
390
391
391
let byte = read_u8 ( reader) ?;
392
392
let successive_approximation_high = byte >> 4 ;
@@ -436,6 +436,9 @@ pub fn parse_sos<R: Read>(reader: &mut R, frame: &FrameInfo) -> Result<ScanInfo>
436
436
}
437
437
}
438
438
else {
439
+ if spectral_selection_end == 0 {
440
+ spectral_selection_end = 63 ;
441
+ }
439
442
if spectral_selection_start != 0 || spectral_selection_end != 63 {
440
443
return Err ( Error :: Format ( "spectral selection is not allowed in non-progressive scan" . to_owned ( ) ) ) ;
441
444
}
@@ -613,12 +616,12 @@ pub fn parse_app<R: Read>(reader: &mut R, marker: Marker) -> Result<Option<AppDa
613
616
if length >= 6 {
614
617
let mut buffer = [ 0u8 ; 6 ] ;
615
618
reader. read_exact ( & mut buffer) ?;
616
- bytes_read = buffer. len ( ) ;
617
-
619
+ bytes_read = buffer. len ( ) ;
620
+
618
621
// https://web.archive.org/web/20190624045241if_/http://www.cipa.jp:80/std/documents/e/DC-008-Translation-2019-E.pdf
619
622
// 4.5.4 Basic Structure of JPEG Compressed Data
620
623
if & buffer == b"Exif\x00 \x00 " {
621
- let mut data = vec ! [ 0 ; length - bytes_read] ;
624
+ let mut data = vec ! [ 0 ; length - bytes_read] ;
622
625
reader. read_exact ( & mut data) ?;
623
626
bytes_read += data. len ( ) ;
624
627
result = Some ( AppData :: Exif ( data) ) ;
0 commit comments