From c9646904344b306b15313cf7a6d812e4e29d8e12 Mon Sep 17 00:00:00 2001 From: John Whitington Date: Tue, 14 Nov 2023 14:42:39 +0000 Subject: [PATCH] Allow Exit JPEGs --- cpdfjpeg.ml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/cpdfjpeg.ml b/cpdfjpeg.ml index 4b3e6cf..49164d0 100644 --- a/cpdfjpeg.ml +++ b/cpdfjpeg.ml @@ -1,20 +1,25 @@ open Pdfutil open Pdfio -(* Return the width and height of a JPEG image, per Michael Petrov's C version. *) +(* Return the width and height of a JPEG image, per Michael Petrov's C version. + Altered to accept Exif too. *) exception Answer of int * int let jpeg_dimensions bs = try let get = bget bs in let i = ref 0 in - if get !i = 0xFF && get (!i + 1) = 0xD8 && get (!i + 2) = 0xFF && get (!i + 3) = 0xE0 then + if get !i = 0xFF && get (!i + 1) = 0xD8 && get (!i + 2) = 0xFF && (get (!i + 3) = 0xE0 || get (!i + 3) = 0xE1) then begin i += 4; if get (!i + 2) = int_of_char 'J' && get (!i + 3) = int_of_char 'F' && get (!i + 4) = int_of_char 'I' && get (!i + 5) = int_of_char 'F' && get (!i + 6) = 0 + || + get (!i + 2) = int_of_char 'E' && get (!i + 3) = int_of_char 'x' + && get (!i + 4) = int_of_char 'i' && get (!i + 5) = int_of_char 'f' + && get (!i + 6) = 0 then let block_length = ref (get !i * 256 + get (!i + 1)) in while !i < bytes_size bs do