From baf8a6cfc457695099be3f75e74b923625ed345f Mon Sep 17 00:00:00 2001 From: Josh Stoik Date: Wed, 24 Apr 2024 21:22:34 -0700 Subject: [PATCH] workaround: account for more stupid camera JPEG headers --- src/image/kind.rs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/image/kind.rs b/src/image/kind.rs index 5a9d1fc..2456f62 100644 --- a/src/image/kind.rs +++ b/src/image/kind.rs @@ -57,15 +57,21 @@ impl From for ImageKind { impl ImageKind { /// # Is JPEG? pub(crate) fn is_jpeg(src: &[u8]) -> bool { + const END: [u8; 2] = [0xFF, 0xD9]; + 12 < src.len() && src[..3] == [0xFF, 0xD8, 0xFF] && match src[3] { 0xE0 => src[6..11] == [b'J', b'F', b'I', b'F', 0x00] || - src[src.len() - 2..] == [0xFF, 0xD9], - 0xE1 => src[6..11] == [b'E', b'x', b'i', b'f', 0x00], - 0xE8 => src[6..12] == [b'S', b'P', b'I', b'F', b'F', 0x00], - 0xDB | 0xED | 0xEE => src[src.len() - 2..] == [0xFF, 0xD9], + src[src.len() - 2..] == END, + 0xE1 => src[6..11] == + [b'E', b'x', b'i', b'f', 0x00] || + src[src.len() - 2..] == END, + 0xE8 => src[6..12] == + [b'S', b'P', b'I', b'F', b'F', 0x00] || + src[src.len() - 2..] == END, + 0xDB | 0xE2..=0xEF => src[src.len() - 2..] == END, _ => false, } }