@@ -366,7 +366,7 @@ pub fn parse_sos<R: Read>(reader: &mut R, frame: &FrameInfo) -> Result<ScanInfo>
366
366
}
367
367
368
368
let spectral_selection_start = read_u8 ( reader) ?;
369
- let spectral_selection_end = read_u8 ( reader) ?;
369
+ let mut spectral_selection_end = read_u8 ( reader) ?;
370
370
371
371
let byte = read_u8 ( reader) ?;
372
372
let successive_approximation_high = byte >> 4 ;
@@ -393,6 +393,9 @@ pub fn parse_sos<R: Read>(reader: &mut R, frame: &FrameInfo) -> Result<ScanInfo>
393
393
}
394
394
}
395
395
else {
396
+ if spectral_selection_end == 0 {
397
+ spectral_selection_end = 63 ;
398
+ }
396
399
if spectral_selection_start != 0 || spectral_selection_end != 63 {
397
400
return Err ( Error :: Format ( "spectral selection is not allowed in non-progressive scan" . to_owned ( ) ) ) ;
398
401
}
@@ -568,12 +571,12 @@ pub fn parse_app<R: Read>(reader: &mut R, marker: Marker) -> Result<Option<AppDa
568
571
if length >= 6 {
569
572
let mut buffer = [ 0u8 ; 6 ] ;
570
573
reader. read_exact ( & mut buffer) ?;
571
- bytes_read = buffer. len ( ) ;
572
-
574
+ bytes_read = buffer. len ( ) ;
575
+
573
576
// https://web.archive.org/web/20190624045241if_/http://www.cipa.jp:80/std/documents/e/DC-008-Translation-2019-E.pdf
574
577
// 4.5.4 Basic Structure of JPEG Compressed Data
575
578
if & buffer == b"Exif\x00 \x00 " {
576
- let mut data = vec ! [ 0 ; length - bytes_read] ;
579
+ let mut data = vec ! [ 0 ; length - bytes_read] ;
577
580
reader. read_exact ( & mut data) ?;
578
581
bytes_read += data. len ( ) ;
579
582
result = Some ( AppData :: Exif ( data) ) ;
0 commit comments