Additional check for StripByteCounts correctness. Fixes

http://bugzilla.remotesensing.org/show_bug.cgi?id=320
This commit is contained in:
Andrey Kiselev 2003-04-16 19:27:57 +00:00
parent 55137ca309
commit ceb2af425e

View File

@ -1,4 +1,4 @@
/* $Header: /cvs/maptools/cvsroot/libtiff/libtiff/tif_dirread.c,v 1.14 2002-12-17 17:10:07 warmerda Exp $ */
/* $Header: /cvs/maptools/cvsroot/libtiff/libtiff/tif_dirread.c,v 1.15 2003-04-16 19:27:57 dron Exp $ */
/*
* Copyright (c) 1988-1997 Sam Leffler
@ -514,10 +514,17 @@ TIFFReadDirectory(TIFF* tif)
_TIFFFieldWithTag(tif,TIFFTAG_STRIPBYTECOUNTS)->field_name);
if (EstimateStripByteCounts(tif, dir, dircount) < 0)
goto bad;
/*
* Assume we have wrong StripByteCount value (in case of single strip) if:
* - it is equal to zero along with StripOffset;
* - it is larger than file itself (in case of uncompressed image);
* - it smaller than single row.
*/
#define BYTECOUNTLOOKSBAD \
((td->td_stripbytecount[0] == 0 && td->td_stripoffset[0] != 0) || \
( (td->td_stripbytecount[0] == 0 && td->td_stripoffset[0] != 0) || \
(td->td_compression == COMPRESSION_NONE && \
td->td_stripbytecount[0] > TIFFGetFileSize(tif) - td->td_stripoffset[0]))
td->td_stripbytecount[0] > TIFFGetFileSize(tif) - td->td_stripoffset[0] \
|| td->td_stripbytecount[0] < TIFFVTileSize(tif, 1)) )
} else if (td->td_nstrips == 1 && BYTECOUNTLOOKSBAD) {
/*
* Plexus (and others) sometimes give a value