diff --git a/src/pixie/fileformats/jpeg.nim b/src/pixie/fileformats/jpeg.nim index e3c78e6c..be382cb8 100644 --- a/src/pixie/fileformats/jpeg.nim +++ b/src/pixie/fileformats/jpeg.nim @@ -877,6 +877,9 @@ proc checkRestart(state: var DecoderState) = if state.todoBeforeRestart <= 0: if state.pos + 1 > state.len: failInvalid() + # Handle getting a restart marker right at the end. + if state.buffer[state.pos] == 0xFF and state.buffer[state.pos+1] == 0xD9: + return if state.buffer[state.pos] != 0xFF or state.buffer[state.pos + 1] notin {0xD0 .. 0xD7}: failInvalid("did not get expected restart marker") diff --git a/tests/fileformats/jpeg/masters/restartmarker.jpg b/tests/fileformats/jpeg/masters/restartmarker.jpg new file mode 100755 index 00000000..10d26f29 Binary files /dev/null and b/tests/fileformats/jpeg/masters/restartmarker.jpg differ diff --git a/tests/jpegsuite.nim b/tests/jpegsuite.nim index c073954b..51d04e91 100644 --- a/tests/jpegsuite.nim +++ b/tests/jpegsuite.nim @@ -45,4 +45,6 @@ const jpegSuiteFiles* = [ "tests/fileformats/jpeg/masters/f6-exif.jpg", "tests/fileformats/jpeg/masters/f7-exif.jpg", "tests/fileformats/jpeg/masters/f8-exif.jpg", + + "tests/fileformats/jpeg/masters/restartmarker.jpg", ]