Merge "Fixes the crash issues caused by exif corruption in jhead." am: e7dac1df82 am: dd71aecc72 * commit 'dd71aecc726f9d8b5534d0902406d41bfaa487b8': Fixes the crash issues caused by exif corruption in jhead. Change-Id: Ic45a855d8f2c03c9ee2361da8640a553cd720c41
diff --git a/README.version b/README.version new file mode 100644 index 0000000..4779cb9 --- /dev/null +++ b/README.version
@@ -0,0 +1,3 @@ +URL: http://www.sentex.net/~mwandel/jhead/jhead-2.87.tar.gz +Version: 2.87 +BugComponent: 43059
diff --git a/exif.c b/exif.c index f6d3536..561852b 100644 --- a/exif.c +++ b/exif.c
@@ -1125,7 +1125,7 @@ //-------------------------------------------------------------------------- void process_EXIF (unsigned char * ExifSection, unsigned int length) { - int FirstOffset; + unsigned FirstOffset; FocalplaneXRes = 0; FocalplaneUnits = 0; @@ -1164,9 +1164,8 @@ } FirstOffset = Get32u(ExifSection+12); - if (FirstOffset < 8 || FirstOffset > 16){ - // Usually set to 8, but other values valid too. - ErrNonfatal("Suspicious offset of first IFD value",0,0); + if (FirstOffset < 8 || FirstOffset+8 >= length) { + ErrNonfatal("Invalid offset of first IFD value: %u", FirstOffset, 0); return; } @@ -1792,7 +1791,7 @@ if (ImageInfo.DigitalZoomRatio > 1){ // Digital zoom used. Shame on you! - printf("Digital Zoom : %1.3fx\n", (double)ImageInfo.DigitalZoomRatio); + printf("Digital Zoom : %5.3fx\n", (double)ImageInfo.DigitalZoomRatio); } if (ImageInfo.CCDWidth){ @@ -1811,7 +1810,7 @@ printf("\n"); } if (ImageInfo.ApertureFNumber){ - printf("Aperture : f/%3.3f\n",(double)ImageInfo.ApertureFNumber); + printf("Aperture : f/%5.3f\n",(double)ImageInfo.ApertureFNumber); } if (ImageInfo.Distance){ if (ImageInfo.Distance < 0){ @@ -2004,7 +2003,7 @@ if (ImageInfo.ExposureTime <= 0.5){ printf(" (1/%d)",(int)(0.5 + 1/ImageInfo.ExposureTime)); }else{ - printf(" (%1.1f)",ImageInfo.ExposureTime); + printf(" (%3.1f)",ImageInfo.ExposureTime); } }
diff --git a/gpsinfo.c b/gpsinfo.c index cbf261e..ba2e82a 100644 --- a/gpsinfo.c +++ b/gpsinfo.c
@@ -257,7 +257,7 @@ case TAG_GPS_TIMESTAMP: snprintf(ImageInfo.GpsTimeStamp, - sizeof(ImageInfo.GpsTimeStamp), "%d:%d:%d", + sizeof(ImageInfo.GpsTimeStamp), "%02d:%02d:%02d", (int) ConvertAnyFormat(ValuePtr, Format), (int) ConvertAnyFormat(ValuePtr + 8, Format), (int) ConvertAnyFormat(ValuePtr + 16, Format)
diff --git a/jpgfile.c b/jpgfile.c index 214c888..8cc8125 100755 --- a/jpgfile.c +++ b/jpgfile.c
@@ -816,7 +816,7 @@ } int writeOk = FALSE; - int nWrite = 0; + size_t nWrite = 0; // Write all the misc sections for (a=0;a<SectionsRead-1;a++){ fputc(0xff,outfile);
diff --git a/main.c b/main.c index da45c1b..96c48bc 100644 --- a/main.c +++ b/main.c
@@ -641,7 +641,7 @@ if (ImageInfo.DigitalZoomRatio > 1.0){ // Digital zoom used. Shame on you! - bufLen = addKeyValueDouble(&buf, bufLen, "DigitalZoomRatio", ImageInfo.DigitalZoomRatio, "%1.3f"); + bufLen = addKeyValueDouble(&buf, bufLen, "DigitalZoomRatio", ImageInfo.DigitalZoomRatio, "%5.3f"); if (bufLen == 0) return NULL; } @@ -658,7 +658,7 @@ } if (ImageInfo.ApertureFNumber){ - bufLen = addKeyValueDouble(&buf, bufLen, "FNumber", (double)ImageInfo.ApertureFNumber, "%3.3f"); + bufLen = addKeyValueDouble(&buf, bufLen, "FNumber", (double)ImageInfo.ApertureFNumber, "%5.3f"); if (bufLen == 0) return NULL; }