From f4f57913fff5de97da347a22558bbb74a1166369 Mon Sep 17 00:00:00 2001 From: matthias wandel Date: Wed, 1 Sep 2021 18:59:15 -0300 Subject: [PATCH] If exif header is complete garbage, don't keep it. Fixes issue 36 (cherry picked from commit c761620767ae72e5d61c697a73de262aebe0b591) --- exif.c | 12 +++++++----- jhead.h | 2 +- jpgfile.c | 5 ++++- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/exif.c b/exif.c index ba066b5..d250a8d 100755 --- a/exif.c +++ b/exif.c @@ -1005,7 +1005,7 @@ void Clear_EXIF () // Process a EXIF marker // Describes all the drivel that most digital cameras include... //-------------------------------------------------------------------------- -void process_EXIF (unsigned char * ExifSection, int length) +int process_EXIF (unsigned char * ExifSection, int length) { int FirstOffset; @@ -1020,7 +1020,7 @@ void process_EXIF (unsigned char * ExifSection, int length) static uchar ExifHeader[] = "Exif\0\0"; if (memcmp(ExifSection+2, ExifHeader,6)){ ErrNonfatal("Incorrect Exif header",0,0); - return; + return 0; } } @@ -1033,21 +1033,21 @@ void process_EXIF (unsigned char * ExifSection, int length) MotorolaOrder = 1; }else{ ErrNonfatal("Invalid Exif alignment marker.",0,0); - return; + return 0; } } // Check the next value for correctness. if (Get16u(ExifSection+10) != 0x2a){ ErrNonfatal("Invalid Exif start (1)",0,0); - return; + return 0; } FirstOffset = (int)Get32u(ExifSection+12); if (FirstOffset < 8 || FirstOffset > 16){ if (FirstOffset < 16 || FirstOffset > length-16 || length < 16){ ErrNonfatal("invalid offset for first Exif IFD value",0,0); - return; + return 0; } // Usually set to 8, but other values valid too. ErrNonfatal("Suspicious offset of first Exif IFD value",0,0); @@ -1086,6 +1086,7 @@ void process_EXIF (unsigned char * ExifSection, int length) ImageInfo.FocalLength35mmEquiv = (int)(ImageInfo.FocalLength/ImageInfo.CCDWidth*36 + 0.5); } } + return 1; } @@ -1235,6 +1236,7 @@ void create_EXIF(void) const char * ClearOrientation(void) { int a; + if (NumOrientations == 0) return NULL; for (a=0;a