Skip to content

Commit 432b417

Browse files
author
HeroicKatora
authored
Merge pull request #190 from vstroebel/master
Allow decoding with bad spectral selection end
2 parents 413869b + c6169f6 commit 432b417

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

src/parser.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -386,7 +386,7 @@ pub fn parse_sos<R: Read>(reader: &mut R, frame: &FrameInfo) -> Result<ScanInfo>
386386
}
387387

388388
let spectral_selection_start = read_u8(reader)?;
389-
let spectral_selection_end = read_u8(reader)?;
389+
let mut spectral_selection_end = read_u8(reader)?;
390390

391391
let byte = read_u8(reader)?;
392392
let successive_approximation_high = byte >> 4;
@@ -436,6 +436,9 @@ pub fn parse_sos<R: Read>(reader: &mut R, frame: &FrameInfo) -> Result<ScanInfo>
436436
}
437437
}
438438
else {
439+
if spectral_selection_end == 0 {
440+
spectral_selection_end = 63;
441+
}
439442
if spectral_selection_start != 0 || spectral_selection_end != 63 {
440443
return Err(Error::Format("spectral selection is not allowed in non-progressive scan".to_owned()));
441444
}
@@ -613,12 +616,12 @@ pub fn parse_app<R: Read>(reader: &mut R, marker: Marker) -> Result<Option<AppDa
613616
if length >= 6 {
614617
let mut buffer = [0u8; 6];
615618
reader.read_exact(&mut buffer)?;
616-
bytes_read = buffer.len();
617-
619+
bytes_read = buffer.len();
620+
618621
// https://web.archive.org/web/20190624045241if_/http://www.cipa.jp:80/std/documents/e/DC-008-Translation-2019-E.pdf
619622
// 4.5.4 Basic Structure of JPEG Compressed Data
620623
if &buffer == b"Exif\x00\x00" {
621-
let mut data = vec![0; length - bytes_read];
624+
let mut data = vec![0; length - bytes_read];
622625
reader.read_exact(&mut data)?;
623626
bytes_read += data.len();
624627
result = Some(AppData::Exif(data));

0 commit comments

Comments
 (0)