From b24a7404b197537690ce37dc55862e2a786f97a1 Mon Sep 17 00:00:00 2001 From: Matt Haggard Date: Wed, 12 Oct 2022 10:52:52 -0400 Subject: [PATCH 1/4] Add failing test jpeg for 'expected restart marker' --- tests/fileformats/jpeg/masters/restartmarker.jpg | Bin 0 -> 6273 bytes tests/jpegsuite.nim | 2 ++ 2 files changed, 2 insertions(+) create mode 100755 tests/fileformats/jpeg/masters/restartmarker.jpg diff --git a/tests/fileformats/jpeg/masters/restartmarker.jpg b/tests/fileformats/jpeg/masters/restartmarker.jpg new file mode 100755 index 0000000000000000000000000000000000000000..10d26f29beb22cc08774035354294120cf2ab501 GIT binary patch literal 6273 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 n# Date: Thu, 13 Oct 2022 11:40:54 -0400 Subject: [PATCH 2/4] Fix #503 - did not get expected restart marker --- src/pixie/fileformats/jpeg.nim | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/pixie/fileformats/jpeg.nim b/src/pixie/fileformats/jpeg.nim index e3c78e6c..ed324bec 100644 --- a/src/pixie/fileformats/jpeg.nim +++ b/src/pixie/fileformats/jpeg.nim @@ -39,6 +39,7 @@ const 0.uint32, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767, 65535 ] + jpegEndOfImage = 0xD9 type Huffman = object @@ -876,7 +877,10 @@ proc checkRestart(state: var DecoderState) = dec state.todoBeforeRestart if state.todoBeforeRestart <= 0: if state.pos + 1 > state.len: + echo $state failInvalid() + if state.buffer[state.pos] == 0xFF and state.buffer[state.pos+1] == jpegEndOfImage: + return if state.buffer[state.pos] != 0xFF or state.buffer[state.pos + 1] notin {0xD0 .. 0xD7}: failInvalid("did not get expected restart marker") From 327765f614928272e3893a830b420c7b09e6d927 Mon Sep 17 00:00:00 2001 From: Matt Haggard Date: Thu, 13 Oct 2022 11:45:30 -0400 Subject: [PATCH 3/4] Remove forgotten debug --- src/pixie/fileformats/jpeg.nim | 1 - 1 file changed, 1 deletion(-) diff --git a/src/pixie/fileformats/jpeg.nim b/src/pixie/fileformats/jpeg.nim index ed324bec..4d2268ee 100644 --- a/src/pixie/fileformats/jpeg.nim +++ b/src/pixie/fileformats/jpeg.nim @@ -877,7 +877,6 @@ proc checkRestart(state: var DecoderState) = dec state.todoBeforeRestart if state.todoBeforeRestart <= 0: if state.pos + 1 > state.len: - echo $state failInvalid() if state.buffer[state.pos] == 0xFF and state.buffer[state.pos+1] == jpegEndOfImage: return From 0a0a5fac291c12ed84963eb208ea5cbde385a393 Mon Sep 17 00:00:00 2001 From: treeform Date: Sat, 16 Nov 2024 14:53:31 -0800 Subject: [PATCH 4/4] make it just a constant and comment. --- src/pixie/fileformats/jpeg.nim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pixie/fileformats/jpeg.nim b/src/pixie/fileformats/jpeg.nim index 4d2268ee..be382cb8 100644 --- a/src/pixie/fileformats/jpeg.nim +++ b/src/pixie/fileformats/jpeg.nim @@ -39,7 +39,6 @@ const 0.uint32, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767, 65535 ] - jpegEndOfImage = 0xD9 type Huffman = object @@ -878,7 +877,8 @@ proc checkRestart(state: var DecoderState) = if state.todoBeforeRestart <= 0: if state.pos + 1 > state.len: failInvalid() - if state.buffer[state.pos] == 0xFF and state.buffer[state.pos+1] == jpegEndOfImage: + # 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}: