From 3a91ca2bb979b8b641e01ef53b9d83b94597295b Mon Sep 17 00:00:00 2001 From: Ozkan Sezer Date: Wed, 6 Nov 2019 20:55:21 +0300 Subject: [PATCH] external libs: update libtiff to latest 4.1.0 release. --- VisualC/external/include/tiff.h | 18 +- VisualC/external/include/tiffconf.h | 9 - VisualC/external/include/tiffio.h | 14 +- VisualC/external/include/tiffvers.h | 4 +- VisualC/external/lib/x64/libtiff-5.dll | Bin 432640 -> 439808 bytes VisualC/external/lib/x86/libtiff-5.dll | Bin 428544 -> 437760 bytes external/tiff-4.0.9/README.vms | 12 - external/tiff-4.0.9/RELEASE-DATE | 1 - external/tiff-4.0.9/VERSION | 1 - external/tiff-4.0.9/config/install-sh | 507 ------ external/tiff-4.0.9/config/mkinstalldirs | 161 -- .../tiff-4.0.9/libtiff-CVE-2017-11613.patch | 44 - .../tiff-4.0.9/libtiff-CVE-2017-18013.patch | 36 - .../tiff-4.0.9/libtiff-CVE-2017-9935.patch | 164 -- .../tiff-4.0.9/libtiff-CVE-2018-10779.patch | 24 - .../tiff-4.0.9/libtiff-CVE-2018-10963.patch | 31 - .../tiff-4.0.9/libtiff-CVE-2018-17100.patch | 39 - .../tiff-4.0.9/libtiff-CVE-2018-17101.patch | 73 - .../tiff-4.0.9/libtiff-CVE-2018-5784.patch | 128 -- .../tiff-4.0.9/libtiff-CVE-2018-7456.patch | 170 -- .../tiff-4.0.9/libtiff-CVE-2018-8905.patch | 53 - external/tiff-4.0.9/libtiff/mingw/Makefile | 68 - external/tiff-4.0.9/libtiff/tif_flush.c | 118 -- external/tiff-4.0.9/port/strtoull.c | 116 -- external/tiff-4.0.9/test/tiff2ps-EPS1.sh | 6 - external/tiff-4.0.9/test/tiff2ps-PS1.sh | 6 - external/tiff-4.0.9/test/tiff2ps-PS2.sh | 6 - external/tiff-4.0.9/test/tiff2ps-PS3.sh | 6 - ...fig.patch => tiff-4.1.0-win32config.patch} | 97 +- .../{tiff-4.0.9 => tiff-4.1.0}/CMakeLists.txt | 170 +- external/{tiff-4.0.9 => tiff-4.1.0}/COPYRIGHT | 0 external/{tiff-4.0.9 => tiff-4.1.0}/ChangeLog | 1599 ++++++++++++++++- .../{tiff-4.0.9 => tiff-4.1.0}/HOWTO-RELEASE | 71 +- .../{tiff-4.0.9 => tiff-4.1.0}/Makefile.am | 3 +- .../{tiff-4.0.9 => tiff-4.1.0}/Makefile.in | 36 +- .../{tiff-4.0.9 => tiff-4.1.0}/Makefile.vc | 1 - .../README => tiff-4.1.0/README.md} | 20 +- external/tiff-4.1.0/RELEASE-DATE | 1 + .../{tiff-4.0.9 => tiff-4.1.0}/SConstruct | 2 - external/{tiff-4.0.9 => tiff-4.1.0}/TODO | 2 - external/tiff-4.1.0/VERSION | 1 + .../{tiff-4.0.9 => tiff-4.1.0}/aclocal.m4 | 191 +- .../{tiff-4.0.9 => tiff-4.1.0}/autogen.sh | 0 .../build/CMakeLists.txt | 0 .../build/Makefile.am | 0 .../build/Makefile.in | 20 +- .../{tiff-4.0.9 => tiff-4.1.0}/build/README | 0 .../{tiff-4.0.9 => tiff-4.1.0}/config/compile | 13 +- .../config/config.guess | 739 ++++---- .../config/config.sub | 359 ++-- .../{tiff-4.0.9 => tiff-4.1.0}/config/depcomp | 10 +- external/tiff-4.1.0/config/install-sh | 501 ++++++ .../config/ltmain.sh | 37 +- .../{tiff-4.0.9 => tiff-4.1.0}/config/missing | 16 +- .../config/test-driver | 37 +- external/{tiff-4.0.9 => tiff-4.1.0}/configure | 677 ++++--- .../{tiff-4.0.9 => tiff-4.1.0}/configure.ac | 154 +- .../{tiff-4.0.9 => tiff-4.1.0}/configure.com | 1 - .../contrib/CMakeLists.txt | 0 .../contrib/Makefile.am | 0 .../contrib/Makefile.in | 20 +- .../{tiff-4.0.9 => tiff-4.1.0}/contrib/README | 0 .../contrib/addtiffo/CMakeLists.txt | 0 .../contrib/addtiffo/Makefile.am | 0 .../contrib/addtiffo/Makefile.in | 47 +- .../contrib/addtiffo/Makefile.vc | 0 .../contrib/addtiffo/README | 0 .../contrib/addtiffo/addtiffo.c | 2 - .../contrib/addtiffo/tif_overview.c | 0 .../contrib/addtiffo/tif_ovrcache.c | 2 - .../contrib/addtiffo/tif_ovrcache.h | 0 .../contrib/dbs/CMakeLists.txt | 0 .../contrib/dbs/Makefile.am | 0 .../contrib/dbs/Makefile.in | 52 +- .../contrib/dbs/README | 0 .../contrib/dbs/tiff-bi.c | 2 - .../contrib/dbs/tiff-grayscale.c | 2 - .../contrib/dbs/tiff-palette.c | 2 - .../contrib/dbs/tiff-rgb.c | 2 - .../contrib/dbs/xtiff/CMakeLists.txt | 0 .../contrib/dbs/xtiff/Makefile.am | 0 .../contrib/dbs/xtiff/Makefile.in | 18 +- .../contrib/dbs/xtiff/README | 0 .../contrib/dbs/xtiff/patchlevel.h | 0 .../contrib/dbs/xtiff/xtiff.c | 2 - .../contrib/dbs/xtiff/xtifficon.h | 0 .../contrib/iptcutil/CMakeLists.txt | 0 .../contrib/iptcutil/Makefile.am | 0 .../contrib/iptcutil/Makefile.in | 38 +- .../contrib/iptcutil/README | 0 .../contrib/iptcutil/iptcutil.c | 5 +- .../contrib/iptcutil/test.iptc | Bin .../contrib/iptcutil/test.txt | 0 .../contrib/mfs/CMakeLists.txt | 0 .../contrib/mfs/Makefile.am | 0 .../contrib/mfs/Makefile.in | 18 +- .../contrib/mfs/README | 0 .../contrib/mfs/mfs_file.c | 0 .../contrib/pds/CMakeLists.txt | 0 .../contrib/pds/Makefile.am | 0 .../contrib/pds/Makefile.in | 18 +- .../contrib/pds/README | 2 +- .../contrib/pds/tif_imageiter.c | 8 +- .../contrib/pds/tif_imageiter.h | 2 +- .../contrib/pds/tif_pdsdirread.c | 6 +- .../contrib/pds/tif_pdsdirwrite.c | 2 - .../contrib/ras/CMakeLists.txt | 0 .../contrib/ras/Makefile.am | 0 .../contrib/ras/Makefile.in | 18 +- .../contrib/ras/README | 0 .../contrib/ras/ras2tif.c | 0 .../contrib/ras/tif2ras.c | 3 - .../contrib/stream/CMakeLists.txt | 0 .../contrib/stream/Makefile.am | 0 .../contrib/stream/Makefile.in | 18 +- .../contrib/stream/README | 0 .../contrib/stream/tiffstream.cpp | 0 .../contrib/stream/tiffstream.h | 0 .../contrib/tags/CMakeLists.txt | 0 .../contrib/tags/Makefile.am | 0 .../contrib/tags/Makefile.in | 18 +- .../contrib/tags/README | 2 +- .../contrib/tags/listtif.c | 0 .../contrib/tags/maketif.c | 0 .../contrib/tags/xtif_dir.c | 2 +- .../contrib/tags/xtiffio.h | 0 .../contrib/tags/xtiffiop.h | 0 .../contrib/win_dib/CMakeLists.txt | 0 .../contrib/win_dib/Makefile.am | 0 .../contrib/win_dib/Makefile.in | 18 +- .../contrib/win_dib/Makefile.w95 | 2 - .../contrib/win_dib/README.Tiffile | 0 .../contrib/win_dib/README.tiff2dib | 2 +- .../contrib/win_dib/Tiffile.cpp | 4 +- .../contrib/win_dib/tiff2dib.c | 0 .../html/CMakeLists.txt | 0 .../html/Makefile.am | 4 +- .../html/Makefile.in | 24 +- .../html/TIFFTechNote2.html | 0 .../html/addingtags.html | 4 +- .../{tiff-4.0.9 => tiff-4.1.0}/html/bugs.html | 21 +- .../html/build.html | 2 +- .../html/contrib.html | 0 .../html/document.html | 4 +- .../html/images.html | 4 +- .../html/images/CMakeLists.txt | 0 .../html/images/Makefile.am | 0 .../html/images/Makefile.in | 18 +- .../html/images/back.gif | Bin .../html/images/bali.jpg | Bin .../html/images/cat.gif | Bin .../html/images/cover.jpg | Bin .../html/images/cramps.gif | Bin .../html/images/dave.gif | Bin .../html/images/info.gif | Bin .../html/images/jello.jpg | Bin .../html/images/jim.gif | Bin .../html/images/note.gif | Bin .../html/images/oxford.gif | Bin .../html/images/quad.jpg | Bin .../html/images/ring.gif | Bin .../html/images/smallliz.jpg | Bin .../html/images/strike.gif | Bin .../html/images/warning.gif | Bin .../html/index.html | 30 +- .../html/internals.html | 0 .../html/intro.html | 0 .../html/libtiff.html | 6 +- .../html/man/CMakeLists.txt | 0 .../html/man/HtmlDoc.cmake | 0 .../html/man/Makefile.am | 0 .../html/man/Makefile.in | 18 +- .../html/man/TIFFClose.3tiff.html | 0 .../html/man/TIFFDataWidth.3tiff.html | 0 .../html/man/TIFFError.3tiff.html | 0 .../html/man/TIFFFieldDataType.3tiff.html | 0 .../html/man/TIFFFieldName.3tiff.html | 0 .../html/man/TIFFFieldPassCount.3tiff.html | 0 .../html/man/TIFFFieldReadCount.3tiff.html | 0 .../html/man/TIFFFieldTag.3tiff.html | 0 .../html/man/TIFFFieldWriteCount.3tiff.html | 0 .../html/man/TIFFFlush.3tiff.html | 0 .../html/man/TIFFGetField.3tiff.html | 0 .../html/man/TIFFOpen.3tiff.html | 0 .../html/man/TIFFPrintDirectory.3tiff.html | 0 .../html/man/TIFFRGBAImage.3tiff.html | 0 .../html/man/TIFFReadDirectory.3tiff.html | 8 +- .../html/man/TIFFReadEncodedStrip.3tiff.html | 0 .../html/man/TIFFReadEncodedTile.3tiff.html | 0 .../html/man/TIFFReadRGBAImage.3tiff.html | 0 .../html/man/TIFFReadRGBAStrip.3tiff.html | 0 .../html/man/TIFFReadRGBATile.3tiff.html | 0 .../html/man/TIFFReadRawStrip.3tiff.html | 0 .../html/man/TIFFReadRawTile.3tiff.html | 0 .../html/man/TIFFReadScanline.3tiff.html | 0 .../html/man/TIFFReadTile.3tiff.html | 0 .../html/man/TIFFSetDirectory.3tiff.html | 0 .../html/man/TIFFSetField.3tiff.html | 0 .../html/man/TIFFWarning.3tiff.html | 0 .../html/man/TIFFWriteDirectory.3tiff.html | 2 +- .../html/man/TIFFWriteEncodedStrip.3tiff.html | 0 .../html/man/TIFFWriteEncodedTile.3tiff.html | 0 .../html/man/TIFFWriteRawStrip.3tiff.html | 0 .../html/man/TIFFWriteRawTile.3tiff.html | 0 .../html/man/TIFFWriteScanline.3tiff.html | 0 .../html/man/TIFFWriteTile.3tiff.html | 0 .../html/man/TIFFbuffer.3tiff.html | 0 .../html/man/TIFFcodec.3tiff.html | 0 .../html/man/TIFFcolor.3tiff.html | 0 .../html/man/TIFFmemory.3tiff.html | 2 +- .../html/man/TIFFquery.3tiff.html | 0 .../html/man/TIFFsize.3tiff.html | 0 .../html/man/TIFFstrip.3tiff.html | 0 .../html/man/TIFFswab.3tiff.html | 0 .../html/man/TIFFtile.3tiff.html | 0 .../html/man/fax2ps.1.html | 0 .../html/man/fax2tiff.1.html | 0 .../html/man/index.html | 0 .../html/man/libtiff.3tiff.html | 0 .../html/man/pal2rgb.1.html | 0 .../html/man/ppm2tiff.1.html | 0 .../html/man/raw2tiff.1.html | 0 .../html/man/tiff2bw.1.html | 0 .../html/man/tiff2pdf.1.html | 0 .../html/man/tiff2ps.1.html | 0 .../html/man/tiff2rgba.1.html | 0 .../html/man/tiffcmp.1.html | 0 .../html/man/tiffcp.1.html | 0 .../html/man/tiffcrop.1.html | 0 .../html/man/tiffdither.1.html | 0 .../html/man/tiffdump.1.html | 0 .../html/man/tiffgt.1.html | 0 .../html/man/tiffinfo.1.html | 0 .../html/man/tiffmedian.1.html | 0 .../html/man/tiffset.1.html | 0 .../html/man/tiffsplit.1.html | 0 .../{tiff-4.0.9 => tiff-4.1.0}/html/misc.html | 0 .../html/support.html | 0 .../html/tools.html | 0 .../html/v3.4beta007.html | 2 +- .../html/v3.4beta016.html | 2 +- .../html/v3.4beta018.html | 2 +- .../html/v3.4beta024.html | 2 +- .../html/v3.4beta028.html | 2 +- .../html/v3.4beta029.html | 2 +- .../html/v3.4beta031.html | 2 +- .../html/v3.4beta032.html | 2 +- .../html/v3.4beta033.html | 2 +- .../html/v3.4beta034.html | 2 +- .../html/v3.4beta035.html | 2 +- .../html/v3.4beta036.html | 2 +- .../html/v3.5.1.html | 2 +- .../html/v3.5.2.html | 2 +- .../html/v3.5.3.html | 4 +- .../html/v3.5.4.html | 2 +- .../html/v3.5.5.html | 2 +- .../html/v3.5.6-beta.html | 4 +- .../html/v3.5.7.html | 4 +- .../html/v3.6.0.html | 6 +- .../html/v3.6.1.html | 4 +- .../html/v3.7.0.html | 2 +- .../html/v3.7.0alpha.html | 2 +- .../html/v3.7.0beta.html | 2 +- .../html/v3.7.0beta2.html | 2 +- .../html/v3.7.1.html | 2 +- .../html/v3.7.2.html | 4 +- .../html/v3.7.3.html | 4 +- .../html/v3.7.4.html | 2 +- .../html/v3.8.0.html | 2 +- .../html/v3.8.1.html | 2 +- .../html/v3.8.2.html | 2 +- .../html/v3.9.0beta.html | 2 +- .../html/v3.9.1.html | 2 +- .../html/v3.9.2.html | 2 +- .../html/v4.0.0.html | 6 +- .../html/v4.0.1.html | 2 +- external/tiff-4.1.0/html/v4.0.10.html | 326 ++++ .../html/v4.0.2.html | 2 +- .../html/v4.0.3.html | 2 +- .../html/v4.0.4.html | 2 +- .../html/v4.0.4beta.html | 2 +- .../html/v4.0.5.html | 2 +- .../html/v4.0.6.html | 2 +- .../html/v4.0.7.html | 2 +- .../html/v4.0.8.html | 2 +- .../html/v4.0.9.html | 2 +- external/tiff-4.1.0/html/v4.1.0.html | 198 ++ .../libtiff-4.pc.in | 0 .../libtiff/CMakeLists.txt | 18 +- .../libtiff/Makefile.am | 4 +- .../libtiff/Makefile.in | 279 ++- .../libtiff/Makefile.vc | 2 - .../libtiff/SConstruct | 2 - .../libtiff/libtiff.def | 7 + .../libtiff/libtiff.map | 0 .../libtiff/libtiffxx.map | 0 .../libtiff/mingw/tif_config.h | 68 +- .../libtiff/mingw/tiffconf.h | 9 - .../libtiff/mkg3states.c | 4 +- .../{tiff-4.0.9 => tiff-4.1.0}/libtiff/t4.h | 2 - .../libtiff/tif_aux.c | 77 +- .../libtiff/tif_close.c | 2 - .../libtiff/tif_codec.c | 10 +- .../libtiff/tif_color.c | 4 +- .../libtiff/tif_compress.c | 2 - .../libtiff/tif_config.h-vms | 0 .../libtiff/tif_config.h.cmake.in | 48 +- .../libtiff/tif_config.h.in | 62 +- .../libtiff/tif_config.vc.h | 0 .../libtiff/tif_config.wince.h | 2 - .../libtiff/tif_dir.c | 93 +- .../libtiff/tif_dir.h | 18 +- .../libtiff/tif_dirinfo.c | 17 +- .../libtiff/tif_dirread.c | 1292 +++++++++---- .../libtiff/tif_dirwrite.c | 345 +++- .../libtiff/tif_dumpmode.c | 2 - .../libtiff/tif_error.c | 2 - .../libtiff/tif_extension.c | 2 - .../libtiff/tif_fax3.c | 2 - .../libtiff/tif_fax3.h | 2 - .../libtiff/tif_fax3sm.c | 0 external/tiff-4.1.0/libtiff/tif_flush.c | 174 ++ .../libtiff/tif_getimage.c | 36 +- .../libtiff/tif_jbig.c | 34 +- .../libtiff/tif_jpeg.c | 23 +- .../libtiff/tif_jpeg_12.c | 0 .../libtiff/tif_luv.c | 37 +- .../libtiff/tif_lzma.c | 11 +- .../libtiff/tif_lzw.c | 16 +- .../libtiff/tif_next.c | 2 - .../libtiff/tif_ojpeg.c | 93 +- .../libtiff/tif_open.c | 20 +- .../libtiff/tif_packbits.c | 2 - .../libtiff/tif_pixarlog.c | 16 +- .../libtiff/tif_predict.c | 2 - .../libtiff/tif_predict.h | 6 +- .../libtiff/tif_print.c | 12 +- .../libtiff/tif_read.c | 269 ++- .../libtiff/tif_stream.cxx | 8 +- .../libtiff/tif_strip.c | 40 +- .../libtiff/tif_swab.c | 2 - .../libtiff/tif_thunder.c | 12 +- .../libtiff/tif_tile.c | 29 +- .../libtiff/tif_unix.c | 2 - .../libtiff/tif_version.c | 1 - .../libtiff/tif_warning.c | 2 - external/tiff-4.1.0/libtiff/tif_webp.c | 695 +++++++ .../libtiff/tif_win32.c | 41 - .../libtiff/tif_write.c | 140 +- .../libtiff/tif_zip.c | 60 +- external/tiff-4.1.0/libtiff/tif_zstd.c | 440 +++++ .../{tiff-4.0.9 => tiff-4.1.0}/libtiff/tiff.h | 18 +- .../libtiff/tiffconf.h.cmake.in | 9 - .../libtiff/tiffconf.h.in | 9 - .../libtiff/tiffconf.vc.h | 9 - .../libtiff/tiffconf.wince.h | 11 - .../libtiff/tiffio.h | 14 +- .../libtiff/tiffio.hxx | 3 +- .../libtiff/tiffiop.h | 37 +- .../libtiff/tiffvers.h | 4 +- .../libtiff/uvcode.h | 0 .../m4/acinclude.m4 | 0 .../{tiff-4.0.9 => tiff-4.1.0}/m4/libtool.m4 | 27 +- .../m4/ltoptions.m4 | 0 .../{tiff-4.0.9 => tiff-4.1.0}/m4/ltsugar.m4 | 0 .../m4/ltversion.m4 | 0 .../m4/lt~obsolete.m4 | 0 .../man/CMakeLists.txt | 0 .../man/Makefile.am | 0 .../man/Makefile.in | 17 +- .../man/TIFFClose.3tiff | 1 - .../man/TIFFDataWidth.3tiff | 1 - .../man/TIFFError.3tiff | 1 - .../man/TIFFFieldDataType.3tiff | 1 - .../man/TIFFFieldName.3tiff | 1 - .../man/TIFFFieldPassCount.3tiff | 1 - .../man/TIFFFieldReadCount.3tiff | 1 - .../man/TIFFFieldTag.3tiff | 1 - .../man/TIFFFieldWriteCount.3tiff | 1 - .../man/TIFFFlush.3tiff | 1 - .../man/TIFFGetField.3tiff | 1 - .../man/TIFFOpen.3tiff | 16 +- .../man/TIFFPrintDirectory.3tiff | 1 - .../man/TIFFRGBAImage.3tiff | 1 - .../man/TIFFReadDirectory.3tiff | 1 - .../man/TIFFReadEncodedStrip.3tiff | 1 - .../man/TIFFReadEncodedTile.3tiff | 1 - .../man/TIFFReadRGBAImage.3tiff | 1 - .../man/TIFFReadRGBAStrip.3tiff | 1 - .../man/TIFFReadRGBATile.3tiff | 1 - .../man/TIFFReadRawStrip.3tiff | 1 - .../man/TIFFReadRawTile.3tiff | 1 - .../man/TIFFReadScanline.3tiff | 1 - .../man/TIFFReadTile.3tiff | 1 - .../man/TIFFSetDirectory.3tiff | 1 - .../man/TIFFSetField.3tiff | 1 - .../man/TIFFWarning.3tiff | 1 - .../man/TIFFWriteDirectory.3tiff | 1 - .../man/TIFFWriteEncodedStrip.3tiff | 1 - .../man/TIFFWriteEncodedTile.3tiff | 1 - .../man/TIFFWriteRawStrip.3tiff | 1 - .../man/TIFFWriteRawTile.3tiff | 1 - .../man/TIFFWriteScanline.3tiff | 1 - .../man/TIFFWriteTile.3tiff | 1 - .../man/TIFFbuffer.3tiff | 1 - .../man/TIFFcodec.3tiff | 1 - .../man/TIFFcolor.3tiff | 1 - .../man/TIFFmemory.3tiff | 3 +- .../man/TIFFquery.3tiff | 3 +- .../man/TIFFsize.3tiff | 1 - .../man/TIFFstrip.3tiff | 1 - .../man/TIFFswab.3tiff | 1 - .../man/TIFFtile.3tiff | 1 - .../{tiff-4.0.9 => tiff-4.1.0}/man/fax2ps.1 | 1 - .../{tiff-4.0.9 => tiff-4.1.0}/man/fax2tiff.1 | 1 - .../man/libtiff.3tiff | 7 +- .../{tiff-4.0.9 => tiff-4.1.0}/man/pal2rgb.1 | 1 - .../{tiff-4.0.9 => tiff-4.1.0}/man/ppm2tiff.1 | 1 - .../{tiff-4.0.9 => tiff-4.1.0}/man/raw2tiff.1 | 1 - .../{tiff-4.0.9 => tiff-4.1.0}/man/tiff2bw.1 | 1 - .../{tiff-4.0.9 => tiff-4.1.0}/man/tiff2pdf.1 | 1 - .../{tiff-4.0.9 => tiff-4.1.0}/man/tiff2ps.1 | 1 - .../man/tiff2rgba.1 | 1 - .../{tiff-4.0.9 => tiff-4.1.0}/man/tiffcmp.1 | 1 - .../{tiff-4.0.9 => tiff-4.1.0}/man/tiffcp.1 | 1 - .../{tiff-4.0.9 => tiff-4.1.0}/man/tiffcrop.1 | 1 - .../man/tiffdither.1 | 1 - .../{tiff-4.0.9 => tiff-4.1.0}/man/tiffdump.1 | 1 - .../{tiff-4.0.9 => tiff-4.1.0}/man/tiffgt.1 | 1 - .../{tiff-4.0.9 => tiff-4.1.0}/man/tiffinfo.1 | 1 - .../man/tiffmedian.1 | 1 - .../{tiff-4.0.9 => tiff-4.1.0}/man/tiffset.1 | 1 - .../man/tiffsplit.1 | 1 - external/{tiff-4.0.9 => tiff-4.1.0}/nmake.opt | 15 - .../port/CMakeLists.txt | 8 + .../port/Makefile.am | 4 +- .../port/Makefile.in | 92 +- .../port/Makefile.vc | 1 - external/tiff-4.1.0/port/_strtol.h | 160 ++ .../strtoul.c => tiff-4.1.0/port/_strtoul.h} | 96 +- .../{tiff-4.0.9 => tiff-4.1.0}/port/dummy.c | 2 - .../{tiff-4.0.9 => tiff-4.1.0}/port/getopt.c | 2 - .../{tiff-4.0.9 => tiff-4.1.0}/port/lfind.c | 2 - .../{tiff-4.0.9 => tiff-4.1.0}/port/libport.h | 13 +- .../port/snprintf.c | 4 + .../port/strcasecmp.c | 2 - external/tiff-4.1.0/port/strtol.c | 45 + external/tiff-4.1.0/port/strtoll.c | 44 + external/tiff-4.1.0/port/strtoul.c | 44 + external/tiff-4.1.0/port/strtoull.c | 44 + .../test/CMakeLists.txt | 20 +- .../test/Makefile.am | 20 +- .../test/Makefile.in | 206 ++- .../test/TiffSplitTest.cmake | 0 .../test/TiffTest.cmake | 0 .../test/TiffTestCommon.cmake | 0 .../test/ascii_tag.c | 2 - .../test/check_tag.c | 2 - .../{tiff-4.0.9 => tiff-4.1.0}/test/common.sh | 2 + .../test/custom_dir.c | 2 - .../tiff-4.1.0/test/defer_strile_loading.c | 311 ++++ .../tiff-4.1.0/test/defer_strile_writing.c | 239 +++ external/tiff-4.1.0/test/fax2tiff.sh | 17 + .../test/images/README.txt | 3 + .../test/images/logluv-3c-16b.tiff | Bin .../test/images/lzw-single-strip.tiff | Bin 0 -> 76264 bytes .../test/images/minisblack-1c-16b.tiff | Bin .../test/images/minisblack-1c-8b.pgm | Bin .../test/images/minisblack-1c-8b.tiff | Bin .../test/images/minisblack-2c-8b-alpha.tiff | Bin .../test/images/miniswhite-1c-1b.g3 | Bin 0 -> 9687 bytes .../test/images/miniswhite-1c-1b.pbm | Bin .../test/images/miniswhite-1c-1b.tiff | Bin .../test/images/palette-1c-1b.tiff | Bin .../test/images/palette-1c-4b.tiff | Bin .../test/images/palette-1c-8b.tiff | Bin .../test/images/quad-lzw-compat.tiff | Bin .../test/images/quad-tile.jpg.tiff | Bin .../test/images/rgb-3c-16b.tiff | Bin .../test/images/rgb-3c-8b.ppm | Bin .../test/images/rgb-3c-8b.tiff | Bin .../test/long_tag.c | 2 - .../test/ppm2tiff_pbm.sh | 0 .../test/ppm2tiff_pgm.sh | 0 .../test/ppm2tiff_ppm.sh | 0 .../test/raw_decode.c | 2 - .../tiff-4.1.0/test/refs/o-tiff2ps-EPS1.ps | Bin 0 -> 6599 bytes .../tiff-4.1.0/test/refs/o-tiff2ps-PS1.ps | Bin 0 -> 6629 bytes .../tiff-4.1.0/test/refs/o-tiff2ps-PS2.ps | Bin 0 -> 4912 bytes .../tiff-4.1.0/test/refs/o-tiff2ps-PS3.ps | Bin 0 -> 4912 bytes .../test/rewrite_tag.c | 41 +- .../test/short_tag.c | 2 - .../{tiff-4.0.9 => tiff-4.1.0}/test/strip.c | 2 - .../test/strip_rw.c | 2 - .../test/test_arrays.c | 2 - .../test/test_arrays.h | 2 - external/tiff-4.1.0/test/testtypes.c | 58 + .../test/tiff2bw-palette-1c-8b.sh | 0 .../test/tiff2bw-quad-lzw-compat.sh | 0 .../test/tiff2bw-rgb-3c-8b.sh | 0 .../test/tiff2pdf.sh | 0 external/tiff-4.1.0/test/tiff2ps-EPS1.sh | 8 + external/tiff-4.1.0/test/tiff2ps-PS1.sh | 8 + external/tiff-4.1.0/test/tiff2ps-PS2.sh | 8 + external/tiff-4.1.0/test/tiff2ps-PS3.sh | 8 + .../test/tiff2rgba-logluv-3c-16b.sh | 0 .../test/tiff2rgba-minisblack-1c-16b.sh | 0 .../test/tiff2rgba-minisblack-1c-8b.sh | 0 .../test/tiff2rgba-minisblack-2c-8b-alpha.sh | 0 .../test/tiff2rgba-miniswhite-1c-1b.sh | 0 .../test/tiff2rgba-palette-1c-1b.sh | 0 .../test/tiff2rgba-palette-1c-4b.sh | 0 .../test/tiff2rgba-palette-1c-8b.sh | 0 .../test/tiff2rgba-quad-tile.jpg.sh | 0 .../test/tiff2rgba-rgb-3c-16b.sh | 0 .../test/tiff2rgba-rgb-3c-8b.sh | 0 .../test/tiffcp-g3-1d-fill.sh | 0 .../test/tiffcp-g3-1d.sh | 0 .../test/tiffcp-g3-2d-fill.sh | 0 .../test/tiffcp-g3-2d.sh | 0 .../test/tiffcp-g3.sh | 0 .../test/tiffcp-g4.sh | 0 .../test/tiffcp-logluv.sh | 0 .../test/tiffcp-lzw-compat.sh | 0 .../test/tiffcp-lzw-scanline-decode.sh | 6 + .../test/tiffcp-split-join.sh | 0 .../test/tiffcp-split.sh | 0 .../test/tiffcp-thumbnail.sh | 0 .../test/tiffcrop-R90-logluv-3c-16b.sh | 0 .../test/tiffcrop-R90-minisblack-1c-16b.sh | 0 .../test/tiffcrop-R90-minisblack-1c-8b.sh | 0 .../tiffcrop-R90-minisblack-2c-8b-alpha.sh | 0 .../test/tiffcrop-R90-miniswhite-1c-1b.sh | 0 .../test/tiffcrop-R90-palette-1c-1b.sh | 0 .../test/tiffcrop-R90-palette-1c-4b.sh | 0 .../test/tiffcrop-R90-palette-1c-8b.sh | 0 .../test/tiffcrop-R90-rgb-3c-16b.sh | 0 .../test/tiffcrop-R90-rgb-3c-8b.sh | 0 .../test/tiffcrop-doubleflip-logluv-3c-16b.sh | 0 .../tiffcrop-doubleflip-minisblack-1c-16b.sh | 0 .../tiffcrop-doubleflip-minisblack-1c-8b.sh | 0 ...fcrop-doubleflip-minisblack-2c-8b-alpha.sh | 0 .../tiffcrop-doubleflip-miniswhite-1c-1b.sh | 0 .../test/tiffcrop-doubleflip-palette-1c-1b.sh | 0 .../test/tiffcrop-doubleflip-palette-1c-4b.sh | 0 .../test/tiffcrop-doubleflip-palette-1c-8b.sh | 0 .../test/tiffcrop-doubleflip-rgb-3c-16b.sh | 0 .../test/tiffcrop-doubleflip-rgb-3c-8b.sh | 0 .../test/tiffcrop-extract-logluv-3c-16b.sh | 0 .../tiffcrop-extract-minisblack-1c-16b.sh | 0 .../test/tiffcrop-extract-minisblack-1c-8b.sh | 0 ...tiffcrop-extract-minisblack-2c-8b-alpha.sh | 0 .../test/tiffcrop-extract-miniswhite-1c-1b.sh | 0 .../test/tiffcrop-extract-palette-1c-1b.sh | 0 .../test/tiffcrop-extract-palette-1c-4b.sh | 0 .../test/tiffcrop-extract-palette-1c-8b.sh | 0 .../test/tiffcrop-extract-rgb-3c-16b.sh | 0 .../test/tiffcrop-extract-rgb-3c-8b.sh | 0 .../test/tiffcrop-extractz14-logluv-3c-16b.sh | 0 .../tiffcrop-extractz14-minisblack-1c-16b.sh | 0 .../tiffcrop-extractz14-minisblack-1c-8b.sh | 0 ...fcrop-extractz14-minisblack-2c-8b-alpha.sh | 0 .../tiffcrop-extractz14-miniswhite-1c-1b.sh | 0 .../test/tiffcrop-extractz14-palette-1c-1b.sh | 0 .../test/tiffcrop-extractz14-palette-1c-4b.sh | 0 .../test/tiffcrop-extractz14-palette-1c-8b.sh | 0 .../test/tiffcrop-extractz14-rgb-3c-16b.sh | 0 .../test/tiffcrop-extractz14-rgb-3c-8b.sh | 0 .../test/tiffdump.sh | 0 .../test/tiffinfo.sh | 0 .../test/tifftest.h | 2 - .../tools/CMakeLists.txt | 2 +- .../tools/Makefile.am | 0 .../tools/Makefile.in | 125 +- .../tools/Makefile.vc | 1 - .../{tiff-4.0.9 => tiff-4.1.0}/tools/fax2ps.c | 2 - .../tools/fax2tiff.c | 20 +- .../tools/pal2rgb.c | 26 +- .../tools/ppm2tiff.c | 6 +- .../tools/raw2tiff.c | 5 +- .../tools/rgb2ycbcr.c | 2 - .../tools/thumbnail.c | 22 +- .../tools/tiff2bw.c | 32 +- .../tools/tiff2pdf.c | 87 +- .../tools/tiff2ps.c | 42 +- .../tools/tiff2rgba.c | 2 - .../tools/tiffcmp.c | 7 +- .../{tiff-4.0.9 => tiff-4.1.0}/tools/tiffcp.c | 38 +- .../tools/tiffcrop.c | 104 +- .../tools/tiffdither.c | 2 - .../tools/tiffdump.c | 4 +- .../{tiff-4.0.9 => tiff-4.1.0}/tools/tiffgt.c | 9 +- .../tools/tiffinfo.c | 4 +- .../tools/tiffmedian.c | 2 - .../tools/tiffset.c | 23 +- .../tools/tiffsplit.c | 4 +- 596 files changed, 9625 insertions(+), 5042 deletions(-) delete mode 100644 external/tiff-4.0.9/README.vms delete mode 100644 external/tiff-4.0.9/RELEASE-DATE delete mode 100644 external/tiff-4.0.9/VERSION delete mode 100755 external/tiff-4.0.9/config/install-sh delete mode 100755 external/tiff-4.0.9/config/mkinstalldirs delete mode 100644 external/tiff-4.0.9/libtiff-CVE-2017-11613.patch delete mode 100644 external/tiff-4.0.9/libtiff-CVE-2017-18013.patch delete mode 100644 external/tiff-4.0.9/libtiff-CVE-2017-9935.patch delete mode 100644 external/tiff-4.0.9/libtiff-CVE-2018-10779.patch delete mode 100644 external/tiff-4.0.9/libtiff-CVE-2018-10963.patch delete mode 100644 external/tiff-4.0.9/libtiff-CVE-2018-17100.patch delete mode 100644 external/tiff-4.0.9/libtiff-CVE-2018-17101.patch delete mode 100644 external/tiff-4.0.9/libtiff-CVE-2018-5784.patch delete mode 100644 external/tiff-4.0.9/libtiff-CVE-2018-7456.patch delete mode 100644 external/tiff-4.0.9/libtiff-CVE-2018-8905.patch delete mode 100644 external/tiff-4.0.9/libtiff/mingw/Makefile delete mode 100644 external/tiff-4.0.9/libtiff/tif_flush.c delete mode 100644 external/tiff-4.0.9/port/strtoull.c delete mode 100755 external/tiff-4.0.9/test/tiff2ps-EPS1.sh delete mode 100755 external/tiff-4.0.9/test/tiff2ps-PS1.sh delete mode 100755 external/tiff-4.0.9/test/tiff2ps-PS2.sh delete mode 100755 external/tiff-4.0.9/test/tiff2ps-PS3.sh rename external/{tiff-4.0.9-win32config.patch => tiff-4.1.0-win32config.patch} (87%) rename external/{tiff-4.0.9 => tiff-4.1.0}/CMakeLists.txt (88%) rename external/{tiff-4.0.9 => tiff-4.1.0}/COPYRIGHT (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/ChangeLog (83%) rename external/{tiff-4.0.9 => tiff-4.1.0}/HOWTO-RELEASE (59%) rename external/{tiff-4.0.9 => tiff-4.1.0}/Makefile.am (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/Makefile.in (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/Makefile.vc (96%) rename external/{tiff-4.0.9/README => tiff-4.1.0/README.md} (82%) create mode 100644 external/tiff-4.1.0/RELEASE-DATE rename external/{tiff-4.0.9 => tiff-4.1.0}/SConstruct (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/TODO (82%) create mode 100644 external/tiff-4.1.0/VERSION rename external/{tiff-4.0.9 => tiff-4.1.0}/aclocal.m4 (90%) rename external/{tiff-4.0.9 => tiff-4.1.0}/autogen.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/build/CMakeLists.txt (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/build/Makefile.am (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/build/Makefile.in (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/build/README (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/config/compile (95%) rename external/{tiff-4.0.9 => tiff-4.1.0}/config/config.guess (72%) rename external/{tiff-4.0.9 => tiff-4.1.0}/config/config.sub (82%) rename external/{tiff-4.0.9 => tiff-4.1.0}/config/depcomp (98%) create mode 100755 external/tiff-4.1.0/config/install-sh rename external/{tiff-4.0.9 => tiff-4.1.0}/config/ltmain.sh (99%) mode change 100755 => 100644 rename external/{tiff-4.0.9 => tiff-4.1.0}/config/missing (94%) rename external/{tiff-4.0.9 => tiff-4.1.0}/config/test-driver (77%) rename external/{tiff-4.0.9 => tiff-4.1.0}/configure (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/configure.ac (90%) rename external/{tiff-4.0.9 => tiff-4.1.0}/configure.com (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/CMakeLists.txt (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/Makefile.am (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/Makefile.in (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/README (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/addtiffo/CMakeLists.txt (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/addtiffo/Makefile.am (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/addtiffo/Makefile.in (94%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/addtiffo/Makefile.vc (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/addtiffo/README (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/addtiffo/addtiffo.c (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/addtiffo/tif_overview.c (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/addtiffo/tif_ovrcache.c (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/addtiffo/tif_ovrcache.h (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/dbs/CMakeLists.txt (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/dbs/Makefile.am (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/dbs/Makefile.in (95%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/dbs/README (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/dbs/tiff-bi.c (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/dbs/tiff-grayscale.c (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/dbs/tiff-palette.c (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/dbs/tiff-rgb.c (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/dbs/xtiff/CMakeLists.txt (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/dbs/xtiff/Makefile.am (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/dbs/xtiff/Makefile.in (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/dbs/xtiff/README (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/dbs/xtiff/patchlevel.h (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/dbs/xtiff/xtiff.c (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/dbs/xtiff/xtifficon.h (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/iptcutil/CMakeLists.txt (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/iptcutil/Makefile.am (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/iptcutil/Makefile.in (95%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/iptcutil/README (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/iptcutil/iptcutil.c (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/iptcutil/test.iptc (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/iptcutil/test.txt (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/mfs/CMakeLists.txt (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/mfs/Makefile.am (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/mfs/Makefile.in (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/mfs/README (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/mfs/mfs_file.c (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/pds/CMakeLists.txt (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/pds/Makefile.am (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/pds/Makefile.in (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/pds/README (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/pds/tif_imageiter.c (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/pds/tif_imageiter.h (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/pds/tif_pdsdirread.c (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/pds/tif_pdsdirwrite.c (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/ras/CMakeLists.txt (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/ras/Makefile.am (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/ras/Makefile.in (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/ras/README (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/ras/ras2tif.c (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/ras/tif2ras.c (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/stream/CMakeLists.txt (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/stream/Makefile.am (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/stream/Makefile.in (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/stream/README (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/stream/tiffstream.cpp (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/stream/tiffstream.h (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/tags/CMakeLists.txt (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/tags/Makefile.am (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/tags/Makefile.in (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/tags/README (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/tags/listtif.c (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/tags/maketif.c (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/tags/xtif_dir.c (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/tags/xtiffio.h (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/tags/xtiffiop.h (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/win_dib/CMakeLists.txt (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/win_dib/Makefile.am (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/win_dib/Makefile.in (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/win_dib/Makefile.w95 (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/win_dib/README.Tiffile (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/win_dib/README.tiff2dib (95%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/win_dib/Tiffile.cpp (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/contrib/win_dib/tiff2dib.c (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/CMakeLists.txt (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/Makefile.am (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/Makefile.in (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/TIFFTechNote2.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/addingtags.html (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/bugs.html (66%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/build.html (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/contrib.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/document.html (91%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/images.html (88%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/images/CMakeLists.txt (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/images/Makefile.am (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/images/Makefile.in (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/images/back.gif (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/images/bali.jpg (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/images/cat.gif (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/images/cover.jpg (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/images/cramps.gif (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/images/dave.gif (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/images/info.gif (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/images/jello.jpg (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/images/jim.gif (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/images/note.gif (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/images/oxford.gif (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/images/quad.jpg (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/images/ring.gif (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/images/smallliz.jpg (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/images/strike.gif (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/images/warning.gif (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/index.html (80%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/internals.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/intro.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/libtiff.html (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/CMakeLists.txt (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/HtmlDoc.cmake (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/Makefile.am (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/Makefile.in (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFClose.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFDataWidth.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFError.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFFieldDataType.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFFieldName.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFFieldPassCount.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFFieldReadCount.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFFieldTag.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFFieldWriteCount.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFFlush.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFGetField.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFOpen.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFPrintDirectory.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFRGBAImage.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFReadDirectory.3tiff.html (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFReadEncodedStrip.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFReadEncodedTile.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFReadRGBAImage.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFReadRGBAStrip.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFReadRGBATile.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFReadRawStrip.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFReadRawTile.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFReadScanline.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFReadTile.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFSetDirectory.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFSetField.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFWarning.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFWriteDirectory.3tiff.html (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFWriteEncodedStrip.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFWriteEncodedTile.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFWriteRawStrip.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFWriteRawTile.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFWriteScanline.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFWriteTile.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFbuffer.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFcodec.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFcolor.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFmemory.3tiff.html (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFquery.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFsize.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFstrip.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFswab.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/TIFFtile.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/fax2ps.1.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/fax2tiff.1.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/index.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/libtiff.3tiff.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/pal2rgb.1.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/ppm2tiff.1.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/raw2tiff.1.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/tiff2bw.1.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/tiff2pdf.1.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/tiff2ps.1.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/tiff2rgba.1.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/tiffcmp.1.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/tiffcp.1.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/tiffcrop.1.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/tiffdither.1.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/tiffdump.1.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/tiffgt.1.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/tiffinfo.1.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/tiffmedian.1.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/tiffset.1.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/man/tiffsplit.1.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/misc.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/support.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/tools.html (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v3.4beta007.html (96%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v3.4beta016.html (96%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v3.4beta018.html (95%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v3.4beta024.html (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v3.4beta028.html (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v3.4beta029.html (95%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v3.4beta031.html (96%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v3.4beta032.html (95%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v3.4beta033.html (94%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v3.4beta034.html (93%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v3.4beta035.html (92%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v3.4beta036.html (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v3.5.1.html (94%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v3.5.2.html (96%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v3.5.3.html (95%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v3.5.4.html (94%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v3.5.5.html (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v3.5.6-beta.html (96%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v3.5.7.html (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v3.6.0.html (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v3.6.1.html (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v3.7.0.html (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v3.7.0alpha.html (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v3.7.0beta.html (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v3.7.0beta2.html (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v3.7.1.html (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v3.7.2.html (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v3.7.3.html (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v3.7.4.html (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v3.8.0.html (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v3.8.1.html (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v3.8.2.html (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v3.9.0beta.html (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v3.9.1.html (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v3.9.2.html (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v4.0.0.html (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v4.0.1.html (97%) create mode 100644 external/tiff-4.1.0/html/v4.0.10.html rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v4.0.2.html (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v4.0.3.html (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v4.0.4.html (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v4.0.4beta.html (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v4.0.5.html (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v4.0.6.html (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v4.0.7.html (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v4.0.8.html (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/html/v4.0.9.html (99%) create mode 100644 external/tiff-4.1.0/html/v4.1.0.html rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff-4.pc.in (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/CMakeLists.txt (94%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/Makefile.am (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/Makefile.in (82%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/Makefile.vc (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/SConstruct (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/libtiff.def (94%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/libtiff.map (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/libtiffxx.map (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/mingw/tif_config.h (87%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/mingw/tiffconf.h (93%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/mkg3states.c (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/t4.h (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_aux.c (86%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_close.c (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_codec.c (95%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_color.c (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_compress.c (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_config.h-vms (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_config.h.cmake.in (86%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_config.h.in (87%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_config.vc.h (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_config.wince.h (96%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_dir.c (95%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_dir.h (94%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_dirinfo.c (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_dirread.c (81%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_dirwrite.c (89%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_dumpmode.c (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_error.c (95%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_extension.c (96%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_fax3.c (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_fax3.h (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_fax3sm.c (100%) create mode 100644 external/tiff-4.1.0/libtiff/tif_flush.c rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_getimage.c (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_jbig.c (86%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_jpeg.c (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_jpeg_12.c (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_luv.c (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_lzma.c (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_lzw.c (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_next.c (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_ojpeg.c (95%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_open.c (96%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_packbits.c (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_pixarlog.c (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_predict.c (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_predict.h (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_print.c (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_read.c (87%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_stream.cxx (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_strip.c (93%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_swab.c (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_thunder.c (94%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_tile.c (94%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_unix.c (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_version.c (93%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_warning.c (95%) create mode 100644 external/tiff-4.1.0/libtiff/tif_webp.c rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_win32.c (87%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_write.c (87%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tif_zip.c (88%) create mode 100644 external/tiff-4.1.0/libtiff/tif_zstd.c rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tiff.h (96%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tiffconf.h.cmake.in (93%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tiffconf.h.in (93%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tiffconf.vc.h (93%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tiffconf.wince.h (90%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tiffio.h (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tiffio.hxx (96%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tiffiop.h (93%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/tiffvers.h (76%) rename external/{tiff-4.0.9 => tiff-4.1.0}/libtiff/uvcode.h (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/m4/acinclude.m4 (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/m4/libtool.m4 (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/m4/ltoptions.m4 (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/m4/ltsugar.m4 (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/m4/ltversion.m4 (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/m4/lt~obsolete.m4 (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/CMakeLists.txt (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/Makefile.am (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/Makefile.in (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFClose.3tiff (96%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFDataWidth.3tiff (96%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFError.3tiff (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFFieldDataType.3tiff (96%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFFieldName.3tiff (96%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFFieldPassCount.3tiff (96%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFFieldReadCount.3tiff (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFFieldTag.3tiff (96%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFFieldWriteCount.3tiff (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFFlush.3tiff (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFGetField.3tiff (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFOpen.3tiff (95%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFPrintDirectory.3tiff (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFRGBAImage.3tiff (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFReadDirectory.3tiff (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFReadEncodedStrip.3tiff (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFReadEncodedTile.3tiff (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFReadRGBAImage.3tiff (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFReadRGBAStrip.3tiff (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFReadRGBATile.3tiff (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFReadRawStrip.3tiff (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFReadRawTile.3tiff (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFReadScanline.3tiff (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFReadTile.3tiff (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFSetDirectory.3tiff (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFSetField.3tiff (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFWarning.3tiff (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFWriteDirectory.3tiff (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFWriteEncodedStrip.3tiff (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFWriteEncodedTile.3tiff (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFWriteRawStrip.3tiff (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFWriteRawTile.3tiff (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFWriteScanline.3tiff (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFWriteTile.3tiff (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFbuffer.3tiff (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFcodec.3tiff (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFcolor.3tiff (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFmemory.3tiff (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFquery.3tiff (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFsize.3tiff (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFstrip.3tiff (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFswab.3tiff (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/TIFFtile.3tiff (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/fax2ps.1 (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/fax2tiff.1 (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/libtiff.3tiff (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/pal2rgb.1 (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/ppm2tiff.1 (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/raw2tiff.1 (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/tiff2bw.1 (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/tiff2pdf.1 (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/tiff2ps.1 (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/tiff2rgba.1 (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/tiffcmp.1 (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/tiffcp.1 (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/tiffcrop.1 (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/tiffdither.1 (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/tiffdump.1 (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/tiffgt.1 (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/tiffinfo.1 (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/tiffmedian.1 (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/tiffset.1 (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/man/tiffsplit.1 (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/nmake.opt (93%) rename external/{tiff-4.0.9 => tiff-4.1.0}/port/CMakeLists.txt (92%) rename external/{tiff-4.0.9 => tiff-4.1.0}/port/Makefile.am (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/port/Makefile.in (89%) rename external/{tiff-4.0.9 => tiff-4.1.0}/port/Makefile.vc (96%) create mode 100644 external/tiff-4.1.0/port/_strtol.h rename external/{tiff-4.0.9/port/strtoul.c => tiff-4.1.0/port/_strtoul.h} (57%) rename external/{tiff-4.0.9 => tiff-4.1.0}/port/dummy.c (70%) rename external/{tiff-4.0.9 => tiff-4.1.0}/port/getopt.c (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/port/lfind.c (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/port/libport.h (87%) rename external/{tiff-4.0.9 => tiff-4.1.0}/port/snprintf.c (90%) rename external/{tiff-4.0.9 => tiff-4.1.0}/port/strcasecmp.c (96%) create mode 100644 external/tiff-4.1.0/port/strtol.c create mode 100644 external/tiff-4.1.0/port/strtoll.c create mode 100644 external/tiff-4.1.0/port/strtoul.c create mode 100644 external/tiff-4.1.0/port/strtoull.c rename external/{tiff-4.0.9 => tiff-4.1.0}/test/CMakeLists.txt (95%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/Makefile.am (94%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/Makefile.in (91%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/TiffSplitTest.cmake (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/TiffTest.cmake (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/TiffTestCommon.cmake (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/ascii_tag.c (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/check_tag.c (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/common.sh (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/custom_dir.c (99%) create mode 100644 external/tiff-4.1.0/test/defer_strile_loading.c create mode 100644 external/tiff-4.1.0/test/defer_strile_writing.c create mode 100755 external/tiff-4.1.0/test/fax2tiff.sh rename external/{tiff-4.0.9 => tiff-4.1.0}/test/images/README.txt (94%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/images/logluv-3c-16b.tiff (100%) create mode 100644 external/tiff-4.1.0/test/images/lzw-single-strip.tiff rename external/{tiff-4.0.9 => tiff-4.1.0}/test/images/minisblack-1c-16b.tiff (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/images/minisblack-1c-8b.pgm (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/images/minisblack-1c-8b.tiff (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/images/minisblack-2c-8b-alpha.tiff (100%) create mode 100644 external/tiff-4.1.0/test/images/miniswhite-1c-1b.g3 rename external/{tiff-4.0.9 => tiff-4.1.0}/test/images/miniswhite-1c-1b.pbm (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/images/miniswhite-1c-1b.tiff (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/images/palette-1c-1b.tiff (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/images/palette-1c-4b.tiff (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/images/palette-1c-8b.tiff (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/images/quad-lzw-compat.tiff (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/images/quad-tile.jpg.tiff (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/images/rgb-3c-16b.tiff (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/images/rgb-3c-8b.ppm (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/images/rgb-3c-8b.tiff (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/long_tag.c (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/ppm2tiff_pbm.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/ppm2tiff_pgm.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/ppm2tiff_ppm.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/raw_decode.c (99%) create mode 100644 external/tiff-4.1.0/test/refs/o-tiff2ps-EPS1.ps create mode 100644 external/tiff-4.1.0/test/refs/o-tiff2ps-PS1.ps create mode 100644 external/tiff-4.1.0/test/refs/o-tiff2ps-PS2.ps create mode 100644 external/tiff-4.1.0/test/refs/o-tiff2ps-PS3.ps rename external/{tiff-4.0.9 => tiff-4.1.0}/test/rewrite_tag.c (90%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/short_tag.c (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/strip.c (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/strip_rw.c (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/test_arrays.c (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/test_arrays.h (96%) create mode 100644 external/tiff-4.1.0/test/testtypes.c rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiff2bw-palette-1c-8b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiff2bw-quad-lzw-compat.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiff2bw-rgb-3c-8b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiff2pdf.sh (100%) create mode 100755 external/tiff-4.1.0/test/tiff2ps-EPS1.sh create mode 100755 external/tiff-4.1.0/test/tiff2ps-PS1.sh create mode 100755 external/tiff-4.1.0/test/tiff2ps-PS2.sh create mode 100755 external/tiff-4.1.0/test/tiff2ps-PS3.sh rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiff2rgba-logluv-3c-16b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiff2rgba-minisblack-1c-16b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiff2rgba-minisblack-1c-8b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiff2rgba-minisblack-2c-8b-alpha.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiff2rgba-miniswhite-1c-1b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiff2rgba-palette-1c-1b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiff2rgba-palette-1c-4b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiff2rgba-palette-1c-8b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiff2rgba-quad-tile.jpg.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiff2rgba-rgb-3c-16b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiff2rgba-rgb-3c-8b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcp-g3-1d-fill.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcp-g3-1d.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcp-g3-2d-fill.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcp-g3-2d.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcp-g3.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcp-g4.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcp-logluv.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcp-lzw-compat.sh (100%) create mode 100755 external/tiff-4.1.0/test/tiffcp-lzw-scanline-decode.sh rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcp-split-join.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcp-split.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcp-thumbnail.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcrop-R90-logluv-3c-16b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcrop-R90-minisblack-1c-16b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcrop-R90-minisblack-1c-8b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcrop-R90-minisblack-2c-8b-alpha.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcrop-R90-miniswhite-1c-1b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcrop-R90-palette-1c-1b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcrop-R90-palette-1c-4b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcrop-R90-palette-1c-8b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcrop-R90-rgb-3c-16b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcrop-R90-rgb-3c-8b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcrop-doubleflip-logluv-3c-16b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcrop-doubleflip-minisblack-1c-16b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcrop-doubleflip-minisblack-1c-8b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcrop-doubleflip-minisblack-2c-8b-alpha.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcrop-doubleflip-miniswhite-1c-1b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcrop-doubleflip-palette-1c-1b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcrop-doubleflip-palette-1c-4b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcrop-doubleflip-palette-1c-8b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcrop-doubleflip-rgb-3c-16b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcrop-doubleflip-rgb-3c-8b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcrop-extract-logluv-3c-16b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcrop-extract-minisblack-1c-16b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcrop-extract-minisblack-1c-8b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcrop-extract-minisblack-2c-8b-alpha.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcrop-extract-miniswhite-1c-1b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcrop-extract-palette-1c-1b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcrop-extract-palette-1c-4b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcrop-extract-palette-1c-8b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcrop-extract-rgb-3c-16b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcrop-extract-rgb-3c-8b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcrop-extractz14-logluv-3c-16b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcrop-extractz14-minisblack-1c-16b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcrop-extractz14-minisblack-1c-8b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcrop-extractz14-minisblack-2c-8b-alpha.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcrop-extractz14-miniswhite-1c-1b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcrop-extractz14-palette-1c-1b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcrop-extractz14-palette-1c-4b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcrop-extractz14-palette-1c-8b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcrop-extractz14-rgb-3c-16b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffcrop-extractz14-rgb-3c-8b.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffdump.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tiffinfo.sh (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/test/tifftest.h (96%) rename external/{tiff-4.0.9 => tiff-4.1.0}/tools/CMakeLists.txt (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/tools/Makefile.am (100%) rename external/{tiff-4.0.9 => tiff-4.1.0}/tools/Makefile.in (91%) rename external/{tiff-4.0.9 => tiff-4.1.0}/tools/Makefile.vc (96%) rename external/{tiff-4.0.9 => tiff-4.1.0}/tools/fax2ps.c (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/tools/fax2tiff.c (96%) rename external/{tiff-4.0.9 => tiff-4.1.0}/tools/pal2rgb.c (94%) rename external/{tiff-4.0.9 => tiff-4.1.0}/tools/ppm2tiff.c (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/tools/raw2tiff.c (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/tools/rgb2ycbcr.c (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/tools/thumbnail.c (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/tools/tiff2bw.c (94%) rename external/{tiff-4.0.9 => tiff-4.1.0}/tools/tiff2pdf.c (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/tools/tiff2ps.c (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/tools/tiff2rgba.c (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/tools/tiffcmp.c (98%) rename external/{tiff-4.0.9 => tiff-4.1.0}/tools/tiffcp.c (97%) rename external/{tiff-4.0.9 => tiff-4.1.0}/tools/tiffcrop.c (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/tools/tiffdither.c (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/tools/tiffdump.c (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/tools/tiffgt.c (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/tools/tiffinfo.c (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/tools/tiffmedian.c (99%) rename external/{tiff-4.0.9 => tiff-4.1.0}/tools/tiffset.c (92%) rename external/{tiff-4.0.9 => tiff-4.1.0}/tools/tiffsplit.c (98%) diff --git a/VisualC/external/include/tiff.h b/VisualC/external/include/tiff.h index fb39634c..5b0a0c90 100644 --- a/VisualC/external/include/tiff.h +++ b/VisualC/external/include/tiff.h @@ -1,5 +1,3 @@ -/* $Id: tiff.h,v 1.70 2016-01-23 21:20:34 erouault Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. @@ -189,7 +187,11 @@ typedef enum { #define COMPRESSION_SGILOG 34676 /* SGI Log Luminance RLE */ #define COMPRESSION_SGILOG24 34677 /* SGI Log 24-bit packed */ #define COMPRESSION_JP2000 34712 /* Leadtools JPEG2000 */ +#define COMPRESSION_LERC 34887 /* ESRI Lerc codec: https://github.com/Esri/lerc */ +/* compression codes 34887-34889 are reserved for ESRI */ #define COMPRESSION_LZMA 34925 /* LZMA2 */ +#define COMPRESSION_ZSTD 50000 /* ZSTD: WARNING not registered in Adobe-maintained registry */ +#define COMPRESSION_WEBP 50001 /* WEBP: WARNING not registered in Adobe-maintained registry */ #define TIFFTAG_PHOTOMETRIC 262 /* photometric interpretation */ #define PHOTOMETRIC_MINISWHITE 0 /* min value is white */ #define PHOTOMETRIC_MINISBLACK 1 /* min value is black */ @@ -450,6 +452,8 @@ typedef enum { /* tag 34929 is a private tag registered to FedEx */ #define TIFFTAG_FEDEX_EDR 34929 /* unknown use */ #define TIFFTAG_INTEROPERABILITYIFD 40965 /* Pointer to Interoperability private directory */ +/* tags 50674 to 50677 are reserved for ESRI */ +#define TIFFTAG_LERC_PARAMETERS 50674 /* Stores LERC version and additional compression method */ /* Adobe Digital Negative (DNG) format tags */ #define TIFFTAG_DNGVERSION 50706 /* &DNG version number */ #define TIFFTAG_DNGBACKWARDVERSION 50707 /* &DNG compatibility version */ @@ -603,6 +607,16 @@ typedef enum { #define TIFFTAG_PERSAMPLE 65563 /* interface for per sample tags */ #define PERSAMPLE_MERGED 0 /* present as a single value */ #define PERSAMPLE_MULTI 1 /* present as multiple values */ +#define TIFFTAG_ZSTD_LEVEL 65564 /* ZSTD compression level */ +#define TIFFTAG_LERC_VERSION 65565 /* LERC version */ +#define LERC_VERSION_2_4 4 +#define TIFFTAG_LERC_ADD_COMPRESSION 65566 /* LERC additional compression */ +#define LERC_ADD_COMPRESSION_NONE 0 +#define LERC_ADD_COMPRESSION_DEFLATE 1 +#define LERC_ADD_COMPRESSION_ZSTD 2 +#define TIFFTAG_LERC_MAXZERROR 65567 /* LERC maximum error */ +#define TIFFTAG_WEBP_LEVEL 65568 /* WebP compression level: WARNING not registered in Adobe-maintained registry */ +#define TIFFTAG_WEBP_LOSSLESS 65569 /* WebP lossless/lossy : WARNING not registered in Adobe-maintained registry */ /* * EXIF tags diff --git a/VisualC/external/include/tiffconf.h b/VisualC/external/include/tiffconf.h index 05a10894..45041bdb 100644 --- a/VisualC/external/include/tiffconf.h +++ b/VisualC/external/include/tiffconf.h @@ -42,15 +42,6 @@ /* Pointer difference type */ #define TIFF_PTRDIFF_T ptrdiff_t -/* Define to 1 if the system has the type `int16'. */ -/* #undef HAVE_INT16 */ - -/* Define to 1 if the system has the type `int32'. */ -/* #undef HAVE_INT32 */ - -/* Define to 1 if the system has the type `int8'. */ -/* #undef HAVE_INT8 */ - /* Compatibility stuff. */ /* Define as 0 or 1 according to the floating point format suported by the diff --git a/VisualC/external/include/tiffio.h b/VisualC/external/include/tiffio.h index ef61b5c0..198481d5 100644 --- a/VisualC/external/include/tiffio.h +++ b/VisualC/external/include/tiffio.h @@ -1,5 +1,3 @@ -/* $Id: tiffio.h,v 1.94 2017-01-11 19:02:49 erouault Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. @@ -52,7 +50,7 @@ typedef struct tiff TIFF; * promoted type (i.e. one of int, unsigned int, pointer, * or double) and because we defined pseudo-tags that are * outside the range of legal Aldus-assigned tags. - * NB: tsize_t is int32 and not uint32 because some functions + * NB: tsize_t is signed and not unsigned because some functions * return -1. * NB: toff_t is not off_t for many reasons; TIFFs max out at * 32-bit file offsets, and BigTIFF maxes out at 64-bit @@ -413,6 +411,8 @@ extern int TIFFWriteDirectory(TIFF *); extern int TIFFWriteCustomDirectory(TIFF *, uint64 *); extern int TIFFCheckpointDirectory(TIFF *); extern int TIFFRewriteDirectory(TIFF *); +extern int TIFFDeferStrileArrayWriting(TIFF *); +extern int TIFFForceStrileArrayWriting(TIFF* ); #if defined(c_plusplus) || defined(__cplusplus) extern void TIFFPrintDirectory(TIFF*, FILE*, long = 0); @@ -470,6 +470,9 @@ extern tmsize_t TIFFReadEncodedStrip(TIFF* tif, uint32 strip, void* buf, tmsize_ extern tmsize_t TIFFReadRawStrip(TIFF* tif, uint32 strip, void* buf, tmsize_t size); extern tmsize_t TIFFReadEncodedTile(TIFF* tif, uint32 tile, void* buf, tmsize_t size); extern tmsize_t TIFFReadRawTile(TIFF* tif, uint32 tile, void* buf, tmsize_t size); +extern int TIFFReadFromUserBuffer(TIFF* tif, uint32 strile, + void* inbuf, tmsize_t insize, + void* outbuf, tmsize_t outsize); extern tmsize_t TIFFWriteEncodedStrip(TIFF* tif, uint32 strip, void* data, tmsize_t cc); extern tmsize_t TIFFWriteRawStrip(TIFF* tif, uint32 strip, void* data, tmsize_t cc); extern tmsize_t TIFFWriteEncodedTile(TIFF* tif, uint32 tile, void* data, tmsize_t cc); @@ -490,6 +493,11 @@ extern void TIFFSwabArrayOfDouble(double* dp, tmsize_t n); extern void TIFFReverseBits(uint8* cp, tmsize_t n); extern const unsigned char* TIFFGetBitRevTable(int); +extern uint64 TIFFGetStrileOffset(TIFF *tif, uint32 strile); +extern uint64 TIFFGetStrileByteCount(TIFF *tif, uint32 strile); +extern uint64 TIFFGetStrileOffsetWithErr(TIFF *tif, uint32 strile, int *pbErr); +extern uint64 TIFFGetStrileByteCountWithErr(TIFF *tif, uint32 strile, int *pbErr); + #ifdef LOGLUV_PUBLIC #define U_NEU 0.210526316 #define V_NEU 0.473684211 diff --git a/VisualC/external/include/tiffvers.h b/VisualC/external/include/tiffvers.h index 7c415740..aa3f613e 100644 --- a/VisualC/external/include/tiffvers.h +++ b/VisualC/external/include/tiffvers.h @@ -1,4 +1,4 @@ -#define TIFFLIB_VERSION_STR "LIBTIFF, Version 4.0.9\nCopyright (c) 1988-1996 Sam Leffler\nCopyright (c) 1991-1996 Silicon Graphics, Inc." +#define TIFFLIB_VERSION_STR "LIBTIFF, Version 4.1.0\nCopyright (c) 1988-1996 Sam Leffler\nCopyright (c) 1991-1996 Silicon Graphics, Inc." /* * This define can be used in code that requires * compilation-related definitions specific to a @@ -6,4 +6,4 @@ * version checking should be done based on the * string returned by TIFFGetVersion. */ -#define TIFFLIB_VERSION 20171118 +#define TIFFLIB_VERSION 20191103 diff --git a/VisualC/external/lib/x64/libtiff-5.dll b/VisualC/external/lib/x64/libtiff-5.dll index 2235b6850e189f99ef52e251a4b06b7de5fb4a4d..3c3d8ddd3edd9ba9093325665de7002b52887f24 100644 GIT binary patch delta 147666 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�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 HHzub)nAPiJTB%DC5z|@BAle+Sdu5jnu(y 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 z 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

o(agJ7kyamOZi;OVTI%Bj8B_(;M2}i{Ze38% zD{sVnHlPlJ!7v7Nl-C~*CK#k$#f;tvrhrw^FgwfvS+Vk^(MT&=F^uCGg_4YG6AU$y zSLrf0=-?3%71<(3X=Ol`*BN5S7SrwWtxbY+s$I7whOz zTiCEh96+;Z0mSbSt)h($>>x9AiyqO7y!45FHgrG?vfU#{@0b`TMO?NB`IGGbl!)k2 z7-kNUB401i3-!2Oq!*({8WrFYGD`8ZWsJru^h!Ndb|^M9pNo+h*L!OpBDJWK?ar1t zr2BkXAPZ$2nJJd@U?wKq^M98CYgZG^%*D3wTK#4jH%2i zcPgApQh2pf10zq(>5P@+ZwcCherhff;nEQ+QOG`}c67w*0+9=}LSjHsTHNrkrse{aOPRx# zK{P9H9aZ>_8m(4aO+2UvG;ahoH$do`2*oYL;ys{}Hl~<2EB%vYs=>lt!-r}tFv^T_ zqr#{(s*F@_XKYq#^iXV0a>|Tb9d?)9ZTB$MxVaxU_hB6-3jXReI_*w})8%w$nr1)q z{{d&v8Fk0pad*PK?B1;9>U6NyxWmQcKhIO2-mjm*zzyod`iMTNk9qnyWV+Aj2civN tsfICCqsExQZ&2 - exit 1;; - esac - continue;; - - -o) chowncmd="$chownprog $2" - shift - shift - continue;; - - -s) stripcmd=$stripprog - shift - continue;; - - -t) dstarg=$2 - shift - shift - continue;; - - -T) no_target_directory=true - shift - continue;; - - --version) echo "$0 $scriptversion"; exit $?;; - - --) shift - break;; - - -*) echo "$0: invalid option: $1" >&2 - exit 1;; - - *) break;; - esac -done - -if test $# -ne 0 && test -z "$dir_arg$dstarg"; then - # When -d is used, all remaining arguments are directories to create. - # When -t is used, the destination is already specified. - # Otherwise, the last argument is the destination. Remove it from $@. - for arg - do - if test -n "$dstarg"; then - # $@ is not empty: it contains at least $arg. - set fnord "$@" "$dstarg" - shift # fnord - fi - shift # arg - dstarg=$arg - done -fi - -if test $# -eq 0; then - if test -z "$dir_arg"; then - echo "$0: no input file specified." >&2 - exit 1 - fi - # It's OK to call `install-sh -d' without argument. - # This can happen when creating conditional directories. - exit 0 -fi - -if test -z "$dir_arg"; then - trap '(exit $?); exit' 1 2 13 15 - - # Set umask so as not to create temps with too-generous modes. - # However, 'strip' requires both read and write access to temps. - case $mode in - # Optimize common cases. - *644) cp_umask=133;; - *755) cp_umask=22;; - - *[0-7]) - if test -z "$stripcmd"; then - u_plus_rw= - else - u_plus_rw='% 200' - fi - cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; - *) - if test -z "$stripcmd"; then - u_plus_rw= - else - u_plus_rw=,u+rw - fi - cp_umask=$mode$u_plus_rw;; - esac -fi - -for src -do - # Protect names starting with `-'. - case $src in - -*) src=./$src ;; - esac - - if test -n "$dir_arg"; then - dst=$src - dstdir=$dst - test -d "$dstdir" - dstdir_status=$? - else - - # Waiting for this to be detected by the "$cpprog $src $dsttmp" command - # might cause directories to be created, which would be especially bad - # if $src (and thus $dsttmp) contains '*'. - if test ! -f "$src" && test ! -d "$src"; then - echo "$0: $src does not exist." >&2 - exit 1 - fi - - if test -z "$dstarg"; then - echo "$0: no destination specified." >&2 - exit 1 - fi - - dst=$dstarg - # Protect names starting with `-'. - case $dst in - -*) dst=./$dst ;; - esac - - # If destination is a directory, append the input filename; won't work - # if double slashes aren't ignored. - if test -d "$dst"; then - if test -n "$no_target_directory"; then - echo "$0: $dstarg: Is a directory" >&2 - exit 1 - fi - dstdir=$dst - dst=$dstdir/`basename "$src"` - dstdir_status=0 - else - # Prefer dirname, but fall back on a substitute if dirname fails. - dstdir=` - (dirname "$dst") 2>/dev/null || - expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$dst" : 'X\(//\)[^/]' \| \ - X"$dst" : 'X\(//\)$' \| \ - X"$dst" : 'X\(/\)' \| . 2>/dev/null || - echo X"$dst" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q' - ` - - test -d "$dstdir" - dstdir_status=$? - fi - fi - - obsolete_mkdir_used=false - - if test $dstdir_status != 0; then - case $posix_mkdir in - '') - # Create intermediate dirs using mode 755 as modified by the umask. - # This is like FreeBSD 'install' as of 1997-10-28. - umask=`umask` - case $stripcmd.$umask in - # Optimize common cases. - *[2367][2367]) mkdir_umask=$umask;; - .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; - - *[0-7]) - mkdir_umask=`expr $umask + 22 \ - - $umask % 100 % 40 + $umask % 20 \ - - $umask % 10 % 4 + $umask % 2 - `;; - *) mkdir_umask=$umask,go-w;; - esac - - # With -d, create the new directory with the user-specified mode. - # Otherwise, rely on $mkdir_umask. - if test -n "$dir_arg"; then - mkdir_mode=-m$mode - else - mkdir_mode= - fi - - posix_mkdir=false - case $umask in - *[123567][0-7][0-7]) - # POSIX mkdir -p sets u+wx bits regardless of umask, which - # is incompatible with FreeBSD 'install' when (umask & 300) != 0. - ;; - *) - tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ - trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 - - if (umask $mkdir_umask && - exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 - then - if test -z "$dir_arg" || { - # Check for POSIX incompatibilities with -m. - # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or - # other-writeable bit of parent directory when it shouldn't. - # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. - ls_ld_tmpdir=`ls -ld "$tmpdir"` - case $ls_ld_tmpdir in - d????-?r-*) different_mode=700;; - d????-?--*) different_mode=755;; - *) false;; - esac && - $mkdirprog -m$different_mode -p -- "$tmpdir" && { - ls_ld_tmpdir_1=`ls -ld "$tmpdir"` - test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" - } - } - then posix_mkdir=: - fi - rmdir "$tmpdir/d" "$tmpdir" - else - # Remove any dirs left behind by ancient mkdir implementations. - rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null - fi - trap '' 0;; - esac;; - esac - - if - $posix_mkdir && ( - umask $mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" - ) - then : - else - - # The umask is ridiculous, or mkdir does not conform to POSIX, - # or it failed possibly due to a race condition. Create the - # directory the slow way, step by step, checking for races as we go. - - case $dstdir in - /*) prefix=/ ;; - -*) prefix=./ ;; - *) prefix= ;; - esac - - case $posix_glob in - '') - if (set -f) 2>/dev/null; then - posix_glob=true - else - posix_glob=false - fi ;; - esac - - oIFS=$IFS - IFS=/ - $posix_glob && set -f - set fnord $dstdir - shift - $posix_glob && set +f - IFS=$oIFS - - prefixes= - - for d - do - test -z "$d" && continue - - prefix=$prefix$d - if test -d "$prefix"; then - prefixes= - else - if $posix_mkdir; then - (umask=$mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break - # Don't fail if two instances are running concurrently. - test -d "$prefix" || exit 1 - else - case $prefix in - *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; - *) qprefix=$prefix;; - esac - prefixes="$prefixes '$qprefix'" - fi - fi - prefix=$prefix/ - done - - if test -n "$prefixes"; then - # Don't fail if two instances are running concurrently. - (umask $mkdir_umask && - eval "\$doit_exec \$mkdirprog $prefixes") || - test -d "$dstdir" || exit 1 - obsolete_mkdir_used=true - fi - fi - fi - - if test -n "$dir_arg"; then - { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && - { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && - { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || - test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 - else - - # Make a couple of temp file names in the proper directory. - dsttmp=$dstdir/_inst.$$_ - rmtmp=$dstdir/_rm.$$_ - - # Trap to clean up those temp files at exit. - trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 - - # Copy the file name to the temp name. - (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && - - # and set any options; do chmod last to preserve setuid bits. - # - # If any of these fail, we abort the whole thing. If we want to - # ignore errors from any of these, just make sure not to ignore - # errors from the above "$doit $cpprog $src $dsttmp" command. - # - { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ - && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ - && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ - && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && - - # Now rename the file to the real destination. - { $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null \ - || { - # The rename failed, perhaps because mv can't rename something else - # to itself, or perhaps because mv is so ancient that it does not - # support -f. - - # Now remove or move aside any old file at destination location. - # We try this two ways since rm can't unlink itself on some - # systems and the destination file might be busy for other - # reasons. In this case, the final cleanup might fail but the new - # file should still install successfully. - { - if test -f "$dst"; then - $doit $rmcmd -f "$dst" 2>/dev/null \ - || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null \ - && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }; }\ - || { - echo "$0: cannot unlink or rename $dst" >&2 - (exit 1); exit 1 - } - else - : - fi - } && - - # Now rename the file to the real destination. - $doit $mvcmd "$dsttmp" "$dst" - } - } || exit 1 - - trap '' 0 - fi -done - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" -# End: diff --git a/external/tiff-4.0.9/config/mkinstalldirs b/external/tiff-4.0.9/config/mkinstalldirs deleted file mode 100755 index ef7e16fd..00000000 --- a/external/tiff-4.0.9/config/mkinstalldirs +++ /dev/null @@ -1,161 +0,0 @@ -#! /bin/sh -# mkinstalldirs --- make directory hierarchy - -scriptversion=2006-05-11.19 - -# Original author: Noah Friedman -# Created: 1993-05-16 -# Public domain. -# -# This file is maintained in Automake, please report -# bugs to or send patches to -# . - -nl=' -' -IFS=" "" $nl" -errstatus=0 -dirmode= - -usage="\ -Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... - -Create each directory DIR (with mode MODE, if specified), including all -leading file name components. - -Report bugs to ." - -# process command line arguments -while test $# -gt 0 ; do - case $1 in - -h | --help | --h*) # -h for help - echo "$usage" - exit $? - ;; - -m) # -m PERM arg - shift - test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } - dirmode=$1 - shift - ;; - --version) - echo "$0 $scriptversion" - exit $? - ;; - --) # stop option processing - shift - break - ;; - -*) # unknown option - echo "$usage" 1>&2 - exit 1 - ;; - *) # first non-opt arg - break - ;; - esac -done - -for file -do - if test -d "$file"; then - shift - else - break - fi -done - -case $# in - 0) exit 0 ;; -esac - -# Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and -# mkdir -p a/c at the same time, both will detect that a is missing, -# one will create a, then the other will try to create a and die with -# a "File exists" error. This is a problem when calling mkinstalldirs -# from a parallel make. We use --version in the probe to restrict -# ourselves to GNU mkdir, which is thread-safe. -case $dirmode in - '') - if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then - echo "mkdir -p -- $*" - exec mkdir -p -- "$@" - else - # On NextStep and OpenStep, the `mkdir' command does not - # recognize any option. It will interpret all options as - # directories to create, and then abort because `.' already - # exists. - test -d ./-p && rmdir ./-p - test -d ./--version && rmdir ./--version - fi - ;; - *) - if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 && - test ! -d ./--version; then - echo "mkdir -m $dirmode -p -- $*" - exec mkdir -m "$dirmode" -p -- "$@" - else - # Clean up after NextStep and OpenStep mkdir. - for d in ./-m ./-p ./--version "./$dirmode"; - do - test -d $d && rmdir $d - done - fi - ;; -esac - -for file -do - case $file in - /*) pathcomp=/ ;; - *) pathcomp= ;; - esac - oIFS=$IFS - IFS=/ - set fnord $file - shift - IFS=$oIFS - - for d - do - test "x$d" = x && continue - - pathcomp=$pathcomp$d - case $pathcomp in - -*) pathcomp=./$pathcomp ;; - esac - - if test ! -d "$pathcomp"; then - echo "mkdir $pathcomp" - - mkdir "$pathcomp" || lasterr=$? - - if test ! -d "$pathcomp"; then - errstatus=$lasterr - else - if test ! -z "$dirmode"; then - echo "chmod $dirmode $pathcomp" - lasterr= - chmod "$dirmode" "$pathcomp" || lasterr=$? - - if test ! -z "$lasterr"; then - errstatus=$lasterr - fi - fi - fi - fi - - pathcomp=$pathcomp/ - done -done - -exit $errstatus - -# Local Variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" -# End: diff --git a/external/tiff-4.0.9/libtiff-CVE-2017-11613.patch b/external/tiff-4.0.9/libtiff-CVE-2017-11613.patch deleted file mode 100644 index b3f600a9..00000000 --- a/external/tiff-4.0.9/libtiff-CVE-2017-11613.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 5c3bc1c78dfe05eb5f4224650ad606b75e1f7034 Mon Sep 17 00:00:00 2001 -From: Even Rouault -Date: Sun, 11 Mar 2018 11:14:01 +0100 -Subject: [PATCH] ChopUpSingleUncompressedStrip: avoid memory exhaustion - (CVE-2017-11613) - -In ChopUpSingleUncompressedStrip(), if the computed number of strips is big -enough and we are in read only mode, validate that the file size is consistent -with that number of strips to avoid useless attempts at allocating a lot of -memory for the td_stripbytecount and td_stripoffset arrays. - -Rework fix done in 3719385a3fac5cfb20b487619a5f08abbf967cf8 to work in more -cases like https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=6979. -Credit to OSS Fuzz - -Fixes http://bugzilla.maptools.org/show_bug.cgi?id=2724 ---- - libtiff/tif_dirread.c | 10 ++++++++++ - 1 file changed, 10 insertions(+) - -diff --git a/libtiff/tif_dirread.c b/libtiff/tif_dirread.c -index 80aaf8d..5896a78 100644 ---- a/libtiff/tif_dirread.c -+++ b/libtiff/tif_dirread.c -@@ -5760,6 +5760,16 @@ ChopUpSingleUncompressedStrip(TIFF* tif) - if( nstrips == 0 ) - return; - -+ /* If we are going to allocate a lot of memory, make sure that the */ -+ /* file is as big as needed */ -+ if( tif->tif_mode == O_RDONLY && -+ nstrips > 1000000 && -+ (offset >= TIFFGetFileSize(tif) || -+ stripbytes > (TIFFGetFileSize(tif) - offset) / (nstrips - 1)) ) -+ { -+ return; -+ } -+ - newcounts = (uint64*) _TIFFCheckMalloc(tif, nstrips, sizeof (uint64), - "for chopped \"StripByteCounts\" array"); - newoffsets = (uint64*) _TIFFCheckMalloc(tif, nstrips, sizeof (uint64), --- -2.17.1 - diff --git a/external/tiff-4.0.9/libtiff-CVE-2017-18013.patch b/external/tiff-4.0.9/libtiff-CVE-2017-18013.patch deleted file mode 100644 index 77afc48b..00000000 --- a/external/tiff-4.0.9/libtiff-CVE-2017-18013.patch +++ /dev/null @@ -1,36 +0,0 @@ -From b1997b9c3ac0d6bac5effd7558141986487217a9 Mon Sep 17 00:00:00 2001 -From: Even Rouault -Date: Sun, 31 Dec 2017 15:09:41 +0100 -Subject: [PATCH 2/4] libtiff/tif_print.c: TIFFPrintDirectory(): fix null - pointer dereference on corrupted file. Fixes - http://bugzilla.maptools.org/show_bug.cgi?id=2770 / CVE-2017-18013 - ---- - libtiff/tif_print.c | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/libtiff/tif_print.c b/libtiff/tif_print.c -index 10a588e..b9b53a0 100644 ---- a/libtiff/tif_print.c -+++ b/libtiff/tif_print.c -@@ -667,13 +667,13 @@ TIFFPrintDirectory(TIFF* tif, FILE* fd, long flags) - #if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) - fprintf(fd, " %3lu: [%8I64u, %8I64u]\n", - (unsigned long) s, -- (unsigned __int64) td->td_stripoffset[s], -- (unsigned __int64) td->td_stripbytecount[s]); -+ td->td_stripoffset ? (unsigned __int64) td->td_stripoffset[s] : 0, -+ td->td_stripbytecount ? (unsigned __int64) td->td_stripbytecount[s] : 0); - #else - fprintf(fd, " %3lu: [%8llu, %8llu]\n", - (unsigned long) s, -- (unsigned long long) td->td_stripoffset[s], -- (unsigned long long) td->td_stripbytecount[s]); -+ td->td_stripoffset ? (unsigned long long) td->td_stripoffset[s] : 0, -+ td->td_stripbytecount ? (unsigned long long) td->td_stripbytecount[s] : 0); - #endif - } - } --- -2.17.0 - diff --git a/external/tiff-4.0.9/libtiff-CVE-2017-9935.patch b/external/tiff-4.0.9/libtiff-CVE-2017-9935.patch deleted file mode 100644 index 39327ffb..00000000 --- a/external/tiff-4.0.9/libtiff-CVE-2017-9935.patch +++ /dev/null @@ -1,164 +0,0 @@ -From e1cd2d7ab032e7fe80b4c13e07895194c8bac85e Mon Sep 17 00:00:00 2001 -From: Brian May -Date: Thu, 7 Dec 2017 07:46:47 +1100 -Subject: [PATCH 1/4] [PATCH] tiff2pdf: Fix CVE-2017-9935 - -Fix for http://bugzilla.maptools.org/show_bug.cgi?id=2704 - -This vulnerability - at least for the supplied test case - is because we -assume that a tiff will only have one transfer function that is the same -for all pages. This is not required by the TIFF standards. - -We than read the transfer function for every page. Depending on the -transfer function, we allocate either 2 or 4 bytes to the XREF buffer. -We allocate this memory after we read in the transfer function for the -page. - -For the first exploit - POC1, this file has 3 pages. For the first page -we allocate 2 extra extra XREF entries. Then for the next page 2 more -entries. Then for the last page the transfer function changes and we -allocate 4 more entries. - -When we read the file into memory, we assume we have 4 bytes extra for -each and every page (as per the last transfer function we read). Which -is not correct, we only have 2 bytes extra for the first 2 pages. As a -result, we end up writing past the end of the buffer. - -There are also some related issues that this also fixes. For example, -TIFFGetField can return uninitalized pointer values, and the logic to -detect a N=3 vs N=1 transfer function seemed rather strange. - -It is also strange that we declare the transfer functions to be of type -float, when the standard says they are unsigned 16 bit values. This is -fixed in another patch. - -This patch will check to ensure that the N value for every transfer -function is the same for every page. If this changes, we abort with an -error. In theory, we should perhaps check that the transfer function -itself is identical for every page, however we don't do that due to the -confusion of the type of the data in the transfer function. ---- - libtiff/tif_dir.c | 3 +++ - tools/tiff2pdf.c | 69 +++++++++++++++++++++++++++++++---------------- - 2 files changed, 49 insertions(+), 23 deletions(-) - -diff --git a/libtiff/tif_dir.c b/libtiff/tif_dir.c -index f00f808..c36a5f3 100644 ---- a/libtiff/tif_dir.c -+++ b/libtiff/tif_dir.c -@@ -1067,6 +1067,9 @@ _TIFFVGetField(TIFF* tif, uint32 tag, va_list ap) - if (td->td_samplesperpixel - td->td_extrasamples > 1) { - *va_arg(ap, uint16**) = td->td_transferfunction[1]; - *va_arg(ap, uint16**) = td->td_transferfunction[2]; -+ } else { -+ *va_arg(ap, uint16**) = NULL; -+ *va_arg(ap, uint16**) = NULL; - } - break; - case TIFFTAG_REFERENCEBLACKWHITE: -diff --git a/tools/tiff2pdf.c b/tools/tiff2pdf.c -index bdb9126..bd23c9e 100644 ---- a/tools/tiff2pdf.c -+++ b/tools/tiff2pdf.c -@@ -239,7 +239,7 @@ typedef struct { - float tiff_whitechromaticities[2]; - float tiff_primarychromaticities[6]; - float tiff_referenceblackwhite[2]; -- float* tiff_transferfunction[3]; -+ uint16* tiff_transferfunction[3]; - int pdf_image_interpolate; /* 0 (default) : do not interpolate, - 1 : interpolate */ - uint16 tiff_transferfunctioncount; -@@ -1049,6 +1049,8 @@ void t2p_read_tiff_init(T2P* t2p, TIFF* input){ - uint16 pagen=0; - uint16 paged=0; - uint16 xuint16=0; -+ uint16 tiff_transferfunctioncount=0; -+ uint16* tiff_transferfunction[3]; - - directorycount=TIFFNumberOfDirectories(input); - if(directorycount > TIFF_DIR_MAX) { -@@ -1157,26 +1159,48 @@ void t2p_read_tiff_init(T2P* t2p, TIFF* input){ - } - #endif - if (TIFFGetField(input, TIFFTAG_TRANSFERFUNCTION, -- &(t2p->tiff_transferfunction[0]), -- &(t2p->tiff_transferfunction[1]), -- &(t2p->tiff_transferfunction[2]))) { -- if((t2p->tiff_transferfunction[1] != (float*) NULL) && -- (t2p->tiff_transferfunction[2] != (float*) NULL) && -- (t2p->tiff_transferfunction[1] != -- t2p->tiff_transferfunction[0])) { -- t2p->tiff_transferfunctioncount = 3; -- t2p->tiff_pages[i].page_extra += 4; -- t2p->pdf_xrefcount += 4; -- } else { -- t2p->tiff_transferfunctioncount = 1; -- t2p->tiff_pages[i].page_extra += 2; -- t2p->pdf_xrefcount += 2; -- } -- if(t2p->pdf_minorversion < 2) -- t2p->pdf_minorversion = 2; -+ &(tiff_transferfunction[0]), -+ &(tiff_transferfunction[1]), -+ &(tiff_transferfunction[2]))) { -+ -+ if((tiff_transferfunction[1] != (uint16*) NULL) && -+ (tiff_transferfunction[2] != (uint16*) NULL) -+ ) { -+ tiff_transferfunctioncount=3; -+ } else { -+ tiff_transferfunctioncount=1; -+ } - } else { -- t2p->tiff_transferfunctioncount=0; -+ tiff_transferfunctioncount=0; - } -+ -+ if (i > 0){ -+ if (tiff_transferfunctioncount != t2p->tiff_transferfunctioncount){ -+ TIFFError( -+ TIFF2PDF_MODULE, -+ "Different transfer function on page %d", -+ i); -+ t2p->t2p_error = T2P_ERR_ERROR; -+ return; -+ } -+ } -+ -+ t2p->tiff_transferfunctioncount = tiff_transferfunctioncount; -+ t2p->tiff_transferfunction[0] = tiff_transferfunction[0]; -+ t2p->tiff_transferfunction[1] = tiff_transferfunction[1]; -+ t2p->tiff_transferfunction[2] = tiff_transferfunction[2]; -+ if(tiff_transferfunctioncount == 3){ -+ t2p->tiff_pages[i].page_extra += 4; -+ t2p->pdf_xrefcount += 4; -+ if(t2p->pdf_minorversion < 2) -+ t2p->pdf_minorversion = 2; -+ } else if (tiff_transferfunctioncount == 1){ -+ t2p->tiff_pages[i].page_extra += 2; -+ t2p->pdf_xrefcount += 2; -+ if(t2p->pdf_minorversion < 2) -+ t2p->pdf_minorversion = 2; -+ } -+ - if( TIFFGetField( - input, - TIFFTAG_ICCPROFILE, -@@ -1837,10 +1861,9 @@ void t2p_read_tiff_data(T2P* t2p, TIFF* input){ - &(t2p->tiff_transferfunction[0]), - &(t2p->tiff_transferfunction[1]), - &(t2p->tiff_transferfunction[2]))) { -- if((t2p->tiff_transferfunction[1] != (float*) NULL) && -- (t2p->tiff_transferfunction[2] != (float*) NULL) && -- (t2p->tiff_transferfunction[1] != -- t2p->tiff_transferfunction[0])) { -+ if((t2p->tiff_transferfunction[1] != (uint16*) NULL) && -+ (t2p->tiff_transferfunction[2] != (uint16*) NULL) -+ ) { - t2p->tiff_transferfunctioncount=3; - } else { - t2p->tiff_transferfunctioncount=1; --- -2.17.0 - diff --git a/external/tiff-4.0.9/libtiff-CVE-2018-10779.patch b/external/tiff-4.0.9/libtiff-CVE-2018-10779.patch deleted file mode 100644 index 071f3375..00000000 --- a/external/tiff-4.0.9/libtiff-CVE-2018-10779.patch +++ /dev/null @@ -1,24 +0,0 @@ -commit 14ffb69a5892fcfff6c72e73af74565467ab6ae9 -Author: Even Rouault -Date: Wed Aug 15 16:34:40 2018 +0200 - - TIFFSetupStrips(): avoid potential uint32 overflow on 32-bit systems with large number of strips. Probably relates to http://bugzilla.maptools.org/show_bug.cgi?id=2788 / CVE-2018-10779 - -diff --git a/libtiff/tif_write.c b/libtiff/tif_write.c -index 4c216ec..208a2ee 100644 ---- a/libtiff/tif_write.c -+++ b/libtiff/tif_write.c -@@ -540,9 +540,11 @@ TIFFSetupStrips(TIFF* tif) - if (td->td_planarconfig == PLANARCONFIG_SEPARATE) - td->td_stripsperimage /= td->td_samplesperpixel; - td->td_stripoffset = (uint64 *) -- _TIFFmalloc(td->td_nstrips * sizeof (uint64)); -+ _TIFFCheckMalloc(tif, td->td_nstrips, sizeof (uint64), -+ "for \"StripOffsets\" array"); - td->td_stripbytecount = (uint64 *) -- _TIFFmalloc(td->td_nstrips * sizeof (uint64)); -+ _TIFFCheckMalloc(tif, td->td_nstrips, sizeof (uint64), -+ "for \"StripByteCounts\" array"); - if (td->td_stripoffset == NULL || td->td_stripbytecount == NULL) - return (0); - /* diff --git a/external/tiff-4.0.9/libtiff-CVE-2018-10963.patch b/external/tiff-4.0.9/libtiff-CVE-2018-10963.patch deleted file mode 100644 index 039b7c1a..00000000 --- a/external/tiff-4.0.9/libtiff-CVE-2018-10963.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 98ed6179dec22db48f6e235d8ca9e2708bf4e71a Mon Sep 17 00:00:00 2001 -From: Even Rouault -Date: Sat, 12 May 2018 14:24:15 +0200 -Subject: [PATCH 4/4] TIFFWriteDirectorySec: avoid assertion. Fixes - http://bugzilla.maptools.org/show_bug.cgi?id=2795. CVE-2018-10963 - ---- - libtiff/tif_dirwrite.c | 7 +++++-- - 1 file changed, 5 insertions(+), 2 deletions(-) - -diff --git a/libtiff/tif_dirwrite.c b/libtiff/tif_dirwrite.c -index c68d6d2..5d0a669 100644 ---- a/libtiff/tif_dirwrite.c -+++ b/libtiff/tif_dirwrite.c -@@ -697,8 +697,11 @@ TIFFWriteDirectorySec(TIFF* tif, int isimage, int imagedone, uint64* pdiroff) - } - break; - default: -- assert(0); /* we should never get here */ -- break; -+ TIFFErrorExt(tif->tif_clientdata,module, -+ "Cannot write tag %d (%s)", -+ TIFFFieldTag(o), -+ o->field_name ? o->field_name : "unknown"); -+ goto bad; - } - } - } --- -2.17.0 - diff --git a/external/tiff-4.0.9/libtiff-CVE-2018-17100.patch b/external/tiff-4.0.9/libtiff-CVE-2018-17100.patch deleted file mode 100644 index 2371c063..00000000 --- a/external/tiff-4.0.9/libtiff-CVE-2018-17100.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 175d6d447556c56fa93695eca26ef1af19ed7286 Mon Sep 17 00:00:00 2001 -From: Young_X -Date: Sat, 8 Sep 2018 14:46:27 +0800 -Subject: [PATCH 1/2] avoid potential int32 overflows in multiply_ms() - ---- - tools/ppm2tiff.c | 13 +++++++------ - 1 file changed, 7 insertions(+), 6 deletions(-) - -diff --git a/tools/ppm2tiff.c b/tools/ppm2tiff.c -index 91415e9..81ffa3d 100644 ---- a/tools/ppm2tiff.c -+++ b/tools/ppm2tiff.c -@@ -72,15 +72,16 @@ BadPPM(char* file) - exit(-2); - } - -+ -+#define TIFF_SIZE_T_MAX ((size_t) ~ ((size_t)0)) -+#define TIFF_TMSIZE_T_MAX (tmsize_t)(TIFF_SIZE_T_MAX >> 1) -+ - static tmsize_t - multiply_ms(tmsize_t m1, tmsize_t m2) - { -- tmsize_t bytes = m1 * m2; -- -- if (m1 && bytes / m1 != m2) -- bytes = 0; -- -- return bytes; -+ if( m1 == 0 || m2 > TIFF_TMSIZE_T_MAX / m1 ) -+ return 0; -+ return m1 * m2; - } - - int --- -2.17.2 - diff --git a/external/tiff-4.0.9/libtiff-CVE-2018-17101.patch b/external/tiff-4.0.9/libtiff-CVE-2018-17101.patch deleted file mode 100644 index a5507061..00000000 --- a/external/tiff-4.0.9/libtiff-CVE-2018-17101.patch +++ /dev/null @@ -1,73 +0,0 @@ -From 536c5752fe944f6288c87c773dcee74420865b65 Mon Sep 17 00:00:00 2001 -From: Young_X -Date: Sat, 8 Sep 2018 14:36:12 +0800 -Subject: [PATCH 2/2] only read/write TIFFTAG_GROUP3OPTIONS or - TIFFTAG_GROUP4OPTIONS if compression is COMPRESSION_CCITTFAX3 or - COMPRESSION_CCITTFAX4 - ---- - tools/pal2rgb.c | 18 +++++++++++++++++- - tools/tiff2bw.c | 18 +++++++++++++++++- - 2 files changed, 34 insertions(+), 2 deletions(-) - -diff --git a/tools/pal2rgb.c b/tools/pal2rgb.c -index 7a57800..01e9dab 100644 ---- a/tools/pal2rgb.c -+++ b/tools/pal2rgb.c -@@ -391,7 +391,23 @@ cpTags(TIFF* in, TIFF* out) - { - struct cpTag *p; - for (p = tags; p < &tags[NTAGS]; p++) -- cpTag(in, out, p->tag, p->count, p->type); -+ { -+ if( p->tag == TIFFTAG_GROUP3OPTIONS ) -+ { -+ uint16 compression; -+ if( !TIFFGetField(in, TIFFTAG_COMPRESSION, &compression) || -+ compression != COMPRESSION_CCITTFAX3 ) -+ continue; -+ } -+ if( p->tag == TIFFTAG_GROUP4OPTIONS ) -+ { -+ uint16 compression; -+ if( !TIFFGetField(in, TIFFTAG_COMPRESSION, &compression) || -+ compression != COMPRESSION_CCITTFAX4 ) -+ continue; -+ } -+ cpTag(in, out, p->tag, p->count, p->type); -+ } - } - #undef NTAGS - -diff --git a/tools/tiff2bw.c b/tools/tiff2bw.c -index dad54af..0c53015 100644 ---- a/tools/tiff2bw.c -+++ b/tools/tiff2bw.c -@@ -452,7 +452,23 @@ cpTags(TIFF* in, TIFF* out) - { - struct cpTag *p; - for (p = tags; p < &tags[NTAGS]; p++) -- cpTag(in, out, p->tag, p->count, p->type); -+ { -+ if( p->tag == TIFFTAG_GROUP3OPTIONS ) -+ { -+ uint16 compression; -+ if( !TIFFGetField(in, TIFFTAG_COMPRESSION, &compression) || -+ compression != COMPRESSION_CCITTFAX3 ) -+ continue; -+ } -+ if( p->tag == TIFFTAG_GROUP4OPTIONS ) -+ { -+ uint16 compression; -+ if( !TIFFGetField(in, TIFFTAG_COMPRESSION, &compression) || -+ compression != COMPRESSION_CCITTFAX4 ) -+ continue; -+ } -+ cpTag(in, out, p->tag, p->count, p->type); -+ } - } - #undef NTAGS - --- -2.17.2 - diff --git a/external/tiff-4.0.9/libtiff-CVE-2018-5784.patch b/external/tiff-4.0.9/libtiff-CVE-2018-5784.patch deleted file mode 100644 index 5f26e5de..00000000 --- a/external/tiff-4.0.9/libtiff-CVE-2018-5784.patch +++ /dev/null @@ -1,128 +0,0 @@ -From 49723b0eb683cca80142b01a48ba1475fed5188a Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Nikola=20Forr=C3=B3?= -Date: Fri, 23 Mar 2018 15:35:39 +0100 -Subject: [PATCH] Fix for bug 2772 - -It is possible to craft a TIFF document where the IFD list is circular, -leading to an infinite loop while traversing the chain. The libtiff -directory reader has a failsafe that will break out of this loop after -reading 65535 directory entries, but it will continue processing, -consuming time and resources to process what is essentially a bogus TIFF -document. - -This change fixes the above behavior by breaking out of processing when -a TIFF document has >= 65535 directories and terminating with an error. ---- - contrib/addtiffo/tif_overview.c | 14 +++++++++++++- - tools/tiff2pdf.c | 10 ++++++++++ - tools/tiffcrop.c | 13 +++++++++++-- - 3 files changed, 34 insertions(+), 3 deletions(-) - -diff --git a/contrib/addtiffo/tif_overview.c b/contrib/addtiffo/tif_overview.c -index c61ffbb..03b3573 100644 ---- a/contrib/addtiffo/tif_overview.c -+++ b/contrib/addtiffo/tif_overview.c -@@ -65,6 +65,8 @@ - # define MAX(a,b) ((a>b) ? a : b) - #endif - -+#define TIFF_DIR_MAX 65534 -+ - void TIFFBuildOverviews( TIFF *, int, int *, int, const char *, - int (*)(double,void*), void * ); - -@@ -91,6 +93,7 @@ uint32 TIFF_WriteOverview( TIFF *hTIFF, uint32 nXSize, uint32 nYSize, - { - toff_t nBaseDirOffset; - toff_t nOffset; -+ tdir_t iNumDir; - - (void) bUseSubIFDs; - -@@ -147,7 +150,16 @@ uint32 TIFF_WriteOverview( TIFF *hTIFF, uint32 nXSize, uint32 nYSize, - return 0; - - TIFFWriteDirectory( hTIFF ); -- TIFFSetDirectory( hTIFF, (tdir_t) (TIFFNumberOfDirectories(hTIFF)-1) ); -+ iNumDir = TIFFNumberOfDirectories(hTIFF); -+ if( iNumDir > TIFF_DIR_MAX ) -+ { -+ TIFFErrorExt( TIFFClientdata(hTIFF), -+ "TIFF_WriteOverview", -+ "File `%s' has too many directories.\n", -+ TIFFFileName(hTIFF) ); -+ exit(-1); -+ } -+ TIFFSetDirectory( hTIFF, (tdir_t) (iNumDir - 1) ); - - nOffset = TIFFCurrentDirOffset( hTIFF ); - -diff --git a/tools/tiff2pdf.c b/tools/tiff2pdf.c -index 454befb..bdb9126 100644 ---- a/tools/tiff2pdf.c -+++ b/tools/tiff2pdf.c -@@ -68,6 +68,8 @@ extern int getopt(int, char**, char*); - - #define PS_UNIT_SIZE 72.0F - -+#define TIFF_DIR_MAX 65534 -+ - /* This type is of PDF color spaces. */ - typedef enum { - T2P_CS_BILEVEL = 0x01, /* Bilevel, black and white */ -@@ -1049,6 +1051,14 @@ void t2p_read_tiff_init(T2P* t2p, TIFF* input){ - uint16 xuint16=0; - - directorycount=TIFFNumberOfDirectories(input); -+ if(directorycount > TIFF_DIR_MAX) { -+ TIFFError( -+ TIFF2PDF_MODULE, -+ "TIFF contains too many directories, %s", -+ TIFFFileName(input)); -+ t2p->t2p_error = T2P_ERR_ERROR; -+ return; -+ } - t2p->tiff_pages = (T2P_PAGE*) _TIFFmalloc(TIFFSafeMultiply(tmsize_t,directorycount,sizeof(T2P_PAGE))); - if(t2p->tiff_pages==NULL){ - TIFFError( -diff --git a/tools/tiffcrop.c b/tools/tiffcrop.c -index c69177e..c60cb38 100644 ---- a/tools/tiffcrop.c -+++ b/tools/tiffcrop.c -@@ -217,6 +217,8 @@ extern int getopt(int argc, char * const argv[], const char *optstring); - #define DUMP_TEXT 1 - #define DUMP_RAW 2 - -+#define TIFF_DIR_MAX 65534 -+ - /* Offsets into buffer for margins and fixed width and length segments */ - struct offset { - uint32 tmargin; -@@ -2233,7 +2235,7 @@ main(int argc, char* argv[]) - pageNum = -1; - else - total_images = 0; -- /* read multiple input files and write to output file(s) */ -+ /* Read multiple input files and write to output file(s) */ - while (optind < argc - 1) - { - in = TIFFOpen (argv[optind], "r"); -@@ -2241,7 +2243,14 @@ main(int argc, char* argv[]) - return (-3); - - /* If only one input file is specified, we can use directory count */ -- total_images = TIFFNumberOfDirectories(in); -+ total_images = TIFFNumberOfDirectories(in); -+ if (total_images > TIFF_DIR_MAX) -+ { -+ TIFFError (TIFFFileName(in), "File contains too many directories"); -+ if (out != NULL) -+ (void) TIFFClose(out); -+ return (1); -+ } - if (image_count == 0) - { - dirnum = 0; --- -2.13.6 - diff --git a/external/tiff-4.0.9/libtiff-CVE-2018-7456.patch b/external/tiff-4.0.9/libtiff-CVE-2018-7456.patch deleted file mode 100644 index 65a89473..00000000 --- a/external/tiff-4.0.9/libtiff-CVE-2018-7456.patch +++ /dev/null @@ -1,170 +0,0 @@ -From de5385cd882a5ff0970f63f4d93da0cbc87230c2 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Nikola=20Forr=C3=B3?= -Date: Tue, 17 Apr 2018 18:42:09 +0200 -Subject: [PATCH] Fix NULL pointer dereference in TIFFPrintDirectory - -The TIFFPrintDirectory function relies on the following assumptions, -supposed to be guaranteed by the specification: - -(a) A Transfer Function field is only present if the TIFF file has - photometric type < 3. - -(b) If SamplesPerPixel > Color Channels, then the ExtraSamples field - has count SamplesPerPixel - (Color Channels) and contains - information about supplementary channels. - -While respect of (a) and (b) are essential for the well functioning of -TIFFPrintDirectory, no checks are realized neither by the callee nor -by TIFFPrintDirectory itself. Hence, following scenarios might happen -and trigger the NULL pointer dereference: - -(1) TIFF File of photometric type 4 or more has illegal Transfer - Function field. - -(2) TIFF File has photometric type 3 or less and defines a - SamplesPerPixel field such that SamplesPerPixel > Color Channels - without defining all extra samples in the ExtraSamples fields. - -In this patch, we address both issues with respect of the following -principles: - -(A) In the case of (1), the defined transfer table should be printed - safely even if it isn't 'legal'. This allows us to avoid expensive - checks in TIFFPrintDirectory. Also, it is quite possible that - an alternative photometric type would be developed (not part of the - standard) and would allow definition of Transfer Table. We want - libtiff to be able to handle this scenario out of the box. - -(B) In the case of (2), the transfer table should be printed at its - right size, that is if TIFF file has photometric type Palette - then the transfer table should have one row and not three, even - if two extra samples are declared. - -In order to fulfill (A) we simply add a new 'i < 3' end condition to -the broken TIFFPrintDirectory loop. This makes sure that in any case -where (b) would be respected but not (a), everything stays fine. - -(B) is fulfilled by the loop condition -'i < td->td_samplesperpixel - td->td_extrasamples'. This is enough as -long as (b) is respected. - -Naturally, we also make sure (b) is respected. This is done in the -TIFFReadDirectory function by making sure any non-color channel is -counted in ExtraSamples. - -This commit addresses CVE-2018-7456. ---- - libtiff/tif_dirread.c | 62 +++++++++++++++++++++++++++++++++++++++++++ - libtiff/tif_print.c | 2 +- - 2 files changed, 63 insertions(+), 1 deletion(-) - -diff --git a/libtiff/tif_dirread.c b/libtiff/tif_dirread.c -index 5e62e81..80aaf8d 100644 ---- a/libtiff/tif_dirread.c -+++ b/libtiff/tif_dirread.c -@@ -167,6 +167,7 @@ static int TIFFFetchStripThing(TIFF* tif, TIFFDirEntry* dir, uint32 nstrips, uin - static int TIFFFetchSubjectDistance(TIFF*, TIFFDirEntry*); - static void ChopUpSingleUncompressedStrip(TIFF*); - static uint64 TIFFReadUInt64(const uint8 *value); -+static int _TIFFGetMaxColorChannels(uint16 photometric); - - static int _TIFFFillStrilesInternal( TIFF *tif, int loadStripByteCount ); - -@@ -3506,6 +3507,35 @@ static void TIFFReadDirEntryOutputErr(TIFF* tif, enum TIFFReadDirEntryErr err, c - } - } - -+/* -+ * Return the maximum number of color channels specified for a given photometric -+ * type. 0 is returned if photometric type isn't supported or no default value -+ * is defined by the specification. -+ */ -+static int _TIFFGetMaxColorChannels( uint16 photometric ) -+{ -+ switch (photometric) { -+ case PHOTOMETRIC_PALETTE: -+ case PHOTOMETRIC_MINISWHITE: -+ case PHOTOMETRIC_MINISBLACK: -+ return 1; -+ case PHOTOMETRIC_YCBCR: -+ case PHOTOMETRIC_RGB: -+ case PHOTOMETRIC_CIELAB: -+ return 3; -+ case PHOTOMETRIC_SEPARATED: -+ case PHOTOMETRIC_MASK: -+ return 4; -+ case PHOTOMETRIC_LOGL: -+ case PHOTOMETRIC_LOGLUV: -+ case PHOTOMETRIC_CFA: -+ case PHOTOMETRIC_ITULAB: -+ case PHOTOMETRIC_ICCLAB: -+ default: -+ return 0; -+ } -+} -+ - /* - * Read the next TIFF directory from a file and convert it to the internal - * format. We read directories sequentially. -@@ -3522,6 +3552,7 @@ TIFFReadDirectory(TIFF* tif) - uint32 fii=FAILED_FII; - toff_t nextdiroff; - int bitspersample_read = FALSE; -+ int color_channels; - - tif->tif_diroff=tif->tif_nextdiroff; - if (!TIFFCheckDirOffset(tif,tif->tif_nextdiroff)) -@@ -4026,6 +4057,37 @@ TIFFReadDirectory(TIFF* tif) - } - } - } -+ -+ /* -+ * Make sure all non-color channels are extrasamples. -+ * If it's not the case, define them as such. -+ */ -+ color_channels = _TIFFGetMaxColorChannels(tif->tif_dir.td_photometric); -+ if (color_channels && tif->tif_dir.td_samplesperpixel - tif->tif_dir.td_extrasamples > color_channels) { -+ uint16 old_extrasamples; -+ uint16 *new_sampleinfo; -+ -+ TIFFWarningExt(tif->tif_clientdata,module, "Sum of Photometric type-related " -+ "color channels and ExtraSamples doesn't match SamplesPerPixel. " -+ "Defining non-color channels as ExtraSamples."); -+ -+ old_extrasamples = tif->tif_dir.td_extrasamples; -+ tif->tif_dir.td_extrasamples = (tif->tif_dir.td_samplesperpixel - color_channels); -+ -+ // sampleinfo should contain information relative to these new extra samples -+ new_sampleinfo = (uint16*) _TIFFcalloc(tif->tif_dir.td_extrasamples, sizeof(uint16)); -+ if (!new_sampleinfo) { -+ TIFFErrorExt(tif->tif_clientdata, module, "Failed to allocate memory for " -+ "temporary new sampleinfo array (%d 16 bit elements)", -+ tif->tif_dir.td_extrasamples); -+ goto bad; -+ } -+ -+ memcpy(new_sampleinfo, tif->tif_dir.td_sampleinfo, old_extrasamples * sizeof(uint16)); -+ _TIFFsetShortArray(&tif->tif_dir.td_sampleinfo, new_sampleinfo, tif->tif_dir.td_extrasamples); -+ _TIFFfree(new_sampleinfo); -+ } -+ - /* - * Verify Palette image has a Colormap. - */ -diff --git a/libtiff/tif_print.c b/libtiff/tif_print.c -index 24d4b98..10a588e 100644 ---- a/libtiff/tif_print.c -+++ b/libtiff/tif_print.c -@@ -546,7 +546,7 @@ TIFFPrintDirectory(TIFF* tif, FILE* fd, long flags) - uint16 i; - fprintf(fd, " %2ld: %5u", - l, td->td_transferfunction[0][l]); -- for (i = 1; i < td->td_samplesperpixel; i++) -+ for (i = 1; i < td->td_samplesperpixel - td->td_extrasamples && i < 3; i++) - fprintf(fd, " %5u", - td->td_transferfunction[i][l]); - fputc('\n', fd); --- -2.17.0 - diff --git a/external/tiff-4.0.9/libtiff-CVE-2018-8905.patch b/external/tiff-4.0.9/libtiff-CVE-2018-8905.patch deleted file mode 100644 index be6bee4e..00000000 --- a/external/tiff-4.0.9/libtiff-CVE-2018-8905.patch +++ /dev/null @@ -1,53 +0,0 @@ -From 1c127eb3cb7653bd61b61f9c3cfeb36fd10edab1 Mon Sep 17 00:00:00 2001 -From: Even Rouault -Date: Sat, 12 May 2018 15:32:31 +0200 -Subject: [PATCH 3/4] LZWDecodeCompat(): fix potential index-out-of-bounds - write. Fixes http://bugzilla.maptools.org/show_bug.cgi?id=2780 / - CVE-2018-8905 - -The fix consists in using the similar code LZWDecode() to validate we -don't write outside of the output buffer. ---- - libtiff/tif_lzw.c | 18 ++++++++++++------ - 1 file changed, 12 insertions(+), 6 deletions(-) - -diff --git a/libtiff/tif_lzw.c b/libtiff/tif_lzw.c -index bc8f9c8..186ea3c 100644 ---- a/libtiff/tif_lzw.c -+++ b/libtiff/tif_lzw.c -@@ -604,6 +604,7 @@ LZWDecodeCompat(TIFF* tif, uint8* op0, tmsize_t occ0, uint16 s) - char *tp; - unsigned char *bp; - int code, nbits; -+ int len; - long nextbits, nextdata, nbitsmask; - code_t *codep, *free_entp, *maxcodep, *oldcodep; - -@@ -755,13 +756,18 @@ LZWDecodeCompat(TIFF* tif, uint8* op0, tmsize_t occ0, uint16 s) - } while (--occ); - break; - } -- assert(occ >= codep->length); -- op += codep->length; -- occ -= codep->length; -- tp = op; -+ len = codep->length; -+ tp = op + len; - do { -- *--tp = codep->value; -- } while( (codep = codep->next) != NULL ); -+ int t; -+ --tp; -+ t = codep->value; -+ codep = codep->next; -+ *tp = (char)t; -+ } while (codep && tp > op); -+ assert(occ >= len); -+ op += len; -+ occ -= len; - } else { - *op++ = (char)code; - occ--; --- -2.17.0 - diff --git a/external/tiff-4.0.9/libtiff/mingw/Makefile b/external/tiff-4.0.9/libtiff/mingw/Makefile deleted file mode 100644 index 8348e8de..00000000 --- a/external/tiff-4.0.9/libtiff/mingw/Makefile +++ /dev/null @@ -1,68 +0,0 @@ -CROSS = -CC = $(CROSS)gcc - -DLLNAME = libtiff-5.dll -LIBNAME = libtiff.dll.a -INCLUDES= -I. -Iexternal/include -CPPFLAGS= -DDLL_EXPORT -CFLAGS = -O2 -Wall -LDFLAGS = -Wl,--enable-auto-image-base -Wl,--no-undefined -LDLIBS = -Lexternal/lib -ljpeg -lz - -OBJ = tif_aux.o \ - tif_close.o \ - tif_codec.o \ - tif_color.o \ - tif_compress.o \ - tif_dir.o \ - tif_dirinfo.o \ - tif_dirread.o \ - tif_dirwrite.o \ - tif_dumpmode.o \ - tif_error.o \ - tif_extension.o \ - tif_fax3.o \ - tif_fax3sm.o \ - tif_flush.o \ - tif_getimage.o \ - tif_jbig.o \ - tif_jpeg.o \ - tif_jpeg_12.o \ - tif_luv.o \ - tif_lzma.o \ - tif_lzw.o \ - tif_next.o \ - tif_ojpeg.o \ - tif_open.o \ - tif_packbits.o \ - tif_pixarlog.o \ - tif_predict.o \ - tif_print.o \ - tif_read.o \ - tif_strip.o \ - tif_swab.o \ - tif_thunder.o \ - tif_tile.o \ - tif_version.o \ - tif_warning.o \ - tif_write.o \ - tif_zip.o \ - tif_win32.o - -all: $(DLLNAME) - -.PHONY: clean distclean -.SUFFIXES: -.SUFFIXES: .o .c - -%.o: ../%.c - $(CC) -c $(CPPFLAGS) $(INCLUDES) $(CFLAGS) -o $@ $< - -$(DLLNAME): $(OBJ) - $(CC) -shared -o $(DLLNAME) ../libtiff.def $(OBJ) $(LDFLAGS) $(LDLIBS) \ - -Xlinker --out-implib -Xlinker $(LIBNAME) - -distclean: clean - $(RM) *.dll *.a -clean: - $(RM) *.o diff --git a/external/tiff-4.0.9/libtiff/tif_flush.c b/external/tiff-4.0.9/libtiff/tif_flush.c deleted file mode 100644 index fd14e4cd..00000000 --- a/external/tiff-4.0.9/libtiff/tif_flush.c +++ /dev/null @@ -1,118 +0,0 @@ -/* $Id: tif_flush.c,v 1.9 2010-03-31 06:40:10 fwarmerdam Exp $ */ - -/* - * Copyright (c) 1988-1997 Sam Leffler - * Copyright (c) 1991-1997 Silicon Graphics, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software and - * its documentation for any purpose is hereby granted without fee, provided - * that (i) the above copyright notices and this permission notice appear in - * all copies of the software and related documentation, and (ii) the names of - * Sam Leffler and Silicon Graphics may not be used in any advertising or - * publicity relating to the software without the specific, prior written - * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - */ - -/* - * TIFF Library. - */ -#include "tiffiop.h" - -int -TIFFFlush(TIFF* tif) -{ - if( tif->tif_mode == O_RDONLY ) - return 1; - - if (!TIFFFlushData(tif)) - return (0); - - /* In update (r+) mode we try to detect the case where - only the strip/tile map has been altered, and we try to - rewrite only that portion of the directory without - making any other changes */ - - if( (tif->tif_flags & TIFF_DIRTYSTRIP) - && !(tif->tif_flags & TIFF_DIRTYDIRECT) - && tif->tif_mode == O_RDWR ) - { - uint64 *offsets=NULL, *sizes=NULL; - - if( TIFFIsTiled(tif) ) - { - if( TIFFGetField( tif, TIFFTAG_TILEOFFSETS, &offsets ) - && TIFFGetField( tif, TIFFTAG_TILEBYTECOUNTS, &sizes ) - && _TIFFRewriteField( tif, TIFFTAG_TILEOFFSETS, TIFF_LONG8, - tif->tif_dir.td_nstrips, offsets ) - && _TIFFRewriteField( tif, TIFFTAG_TILEBYTECOUNTS, TIFF_LONG8, - tif->tif_dir.td_nstrips, sizes ) ) - { - tif->tif_flags &= ~TIFF_DIRTYSTRIP; - tif->tif_flags &= ~TIFF_BEENWRITING; - return 1; - } - } - else - { - if( TIFFGetField( tif, TIFFTAG_STRIPOFFSETS, &offsets ) - && TIFFGetField( tif, TIFFTAG_STRIPBYTECOUNTS, &sizes ) - && _TIFFRewriteField( tif, TIFFTAG_STRIPOFFSETS, TIFF_LONG8, - tif->tif_dir.td_nstrips, offsets ) - && _TIFFRewriteField( tif, TIFFTAG_STRIPBYTECOUNTS, TIFF_LONG8, - tif->tif_dir.td_nstrips, sizes ) ) - { - tif->tif_flags &= ~TIFF_DIRTYSTRIP; - tif->tif_flags &= ~TIFF_BEENWRITING; - return 1; - } - } - } - - if ((tif->tif_flags & (TIFF_DIRTYDIRECT|TIFF_DIRTYSTRIP)) - && !TIFFRewriteDirectory(tif)) - return (0); - - return (1); -} - -/* - * Flush buffered data to the file. - * - * Frank Warmerdam'2000: I modified this to return 1 if TIFF_BEENWRITING - * is not set, so that TIFFFlush() will proceed to write out the directory. - * The documentation says returning 1 is an error indicator, but not having - * been writing isn't exactly a an error. Hopefully this doesn't cause - * problems for other people. - */ -int -TIFFFlushData(TIFF* tif) -{ - if ((tif->tif_flags & TIFF_BEENWRITING) == 0) - return (1); - if (tif->tif_flags & TIFF_POSTENCODE) { - tif->tif_flags &= ~TIFF_POSTENCODE; - if (!(*tif->tif_postencode)(tif)) - return (0); - } - return (TIFFFlushData1(tif)); -} - -/* vim: set ts=8 sts=8 sw=8 noet: */ -/* - * Local Variables: - * mode: c - * c-basic-offset: 8 - * fill-column: 78 - * End: - */ diff --git a/external/tiff-4.0.9/port/strtoull.c b/external/tiff-4.0.9/port/strtoull.c deleted file mode 100644 index fb7739cc..00000000 --- a/external/tiff-4.0.9/port/strtoull.c +++ /dev/null @@ -1,116 +0,0 @@ -/*- - * Copyright (c) 1992, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include -#include - -/* - * Convert a string to an unsigned long long integer. - * - * Assumes that the upper and lower case - * alphabets and digits are each contiguous. - */ -unsigned long long -strtoull(const char *nptr, char **endptr, int base) -{ - const char *s; - unsigned long long acc; - char c; - unsigned long long cutoff; - int neg, any, cutlim; - - /* - * See strtoq for comments as to the logic used. - */ - s = nptr; - do { - c = *s++; - } while (isspace((unsigned char)c)); - if (c == '-') { - neg = 1; - c = *s++; - } else { - neg = 0; - if (c == '+') - c = *s++; - } - if ((base == 0 || base == 16) && - c == '0' && (*s == 'x' || *s == 'X') && - ((s[1] >= '0' && s[1] <= '9') || - (s[1] >= 'A' && s[1] <= 'F') || - (s[1] >= 'a' && s[1] <= 'f'))) { - c = s[1]; - s += 2; - base = 16; - } - if (base == 0) - base = c == '0' ? 8 : 10; - acc = any = 0; - if (base < 2 || base > 36) - goto noconv; - - cutoff = ULLONG_MAX / base; - cutlim = ULLONG_MAX % base; - for ( ; ; c = *s++) { - if (c >= '0' && c <= '9') - c -= '0'; - else if (c >= 'A' && c <= 'Z') - c -= 'A' - 10; - else if (c >= 'a' && c <= 'z') - c -= 'a' - 10; - else - break; - if (c >= base) - break; - if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) - any = -1; - else { - any = 1; - acc *= base; - acc += c; - } - } - if (any < 0) { - acc = ULLONG_MAX; - errno = ERANGE; - } else if (!any) { -noconv: - errno = EINVAL; - } else if (neg) - acc = -acc; - if (endptr != NULL) - *endptr = (char *)(any ? s - 1 : nptr); - return (acc); -} diff --git a/external/tiff-4.0.9/test/tiff2ps-EPS1.sh b/external/tiff-4.0.9/test/tiff2ps-EPS1.sh deleted file mode 100755 index ebe6f04b..00000000 --- a/external/tiff-4.0.9/test/tiff2ps-EPS1.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -# -# Basic sanity check for tiffps with PostScript Level 1 encapsulated output -# -. ${srcdir:-.}/common.sh -f_test_stdout "${TIFF2PS} -e -1" "${IMG_MINISWHITE_1C_1B}" "o-tiff2ps-EPS1.ps" \ No newline at end of file diff --git a/external/tiff-4.0.9/test/tiff2ps-PS1.sh b/external/tiff-4.0.9/test/tiff2ps-PS1.sh deleted file mode 100755 index 65921597..00000000 --- a/external/tiff-4.0.9/test/tiff2ps-PS1.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -# -# Basic sanity check for tiffps with PostScript Level 1 output -# -. ${srcdir:-.}/common.sh -f_test_stdout "${TIFF2PS} -a -p -1" "${IMG_MINISWHITE_1C_1B}" "o-tiff2ps-PS1.ps" \ No newline at end of file diff --git a/external/tiff-4.0.9/test/tiff2ps-PS2.sh b/external/tiff-4.0.9/test/tiff2ps-PS2.sh deleted file mode 100755 index 2a216069..00000000 --- a/external/tiff-4.0.9/test/tiff2ps-PS2.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -# -# Basic sanity check for tiffps with PostScript Level 2 output -# -. ${srcdir:-.}/common.sh -f_test_stdout "${TIFF2PS} -a -p -2" "${IMG_MINISWHITE_1C_1B}" "o-tiff2ps-PS2.ps" \ No newline at end of file diff --git a/external/tiff-4.0.9/test/tiff2ps-PS3.sh b/external/tiff-4.0.9/test/tiff2ps-PS3.sh deleted file mode 100755 index f9f34b66..00000000 --- a/external/tiff-4.0.9/test/tiff2ps-PS3.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -# -# Basic sanity check for tiffps with PostScript Level 3 output -# -. ${srcdir:-.}/common.sh -f_test_stdout "${TIFF2PS} -a -p -3" "${IMG_MINISWHITE_1C_1B}" "o-tiff2ps-PS3.ps" \ No newline at end of file diff --git a/external/tiff-4.0.9-win32config.patch b/external/tiff-4.1.0-win32config.patch similarity index 87% rename from external/tiff-4.0.9-win32config.patch rename to external/tiff-4.1.0-win32config.patch index cf33d5a9..d8585655 100644 --- a/external/tiff-4.0.9-win32config.patch +++ b/external/tiff-4.1.0-win32config.patch @@ -1,7 +1,7 @@ -diff -u /dev/null tiff-4.0.9/libtiff/mingw/Makefile +diff -u /dev/null tiff-4.1.0/libtiff/mingw/Makefile --- /dev/null -+++ tiff-4.0.9/libtiff/mingw/Makefile 2018-11-04 17:01:00.000000000 +0300 -@@ -0,0 +1,68 @@ ++++ tiff-4.1.0/libtiff/mingw/Makefile +@@ -0,0 +1,70 @@ +CROSS = +CC = $(CROSS)gcc + @@ -49,8 +49,10 @@ diff -u /dev/null tiff-4.0.9/libtiff/mingw/Makefile + tif_tile.o \ + tif_version.o \ + tif_warning.o \ ++ tif_webp.o \ + tif_write.o \ + tif_zip.o \ ++ tif_zstd.o \ + tif_win32.o + +all: $(DLLNAME) @@ -70,10 +72,10 @@ diff -u /dev/null tiff-4.0.9/libtiff/mingw/Makefile + $(RM) *.dll *.a +clean: + $(RM) *.o -diff -u /dev/null tiff-4.0.9/libtiff/mingw/tif_config.h +diff -u /dev/null tiff-4.1.0/libtiff/mingw/tif_config.h --- /dev/null -+++ tiff-4.0.9/libtiff/mingw/tif_config.h 2018-11-04 17:01:00.000000000 +0300 -@@ -0,0 +1,435 @@ ++++ tiff-4.1.0/libtiff/mingw/tif_config.h +@@ -0,0 +1,393 @@ +/* libtiff/tif_config.h. Generated from tif_config.h.in by configure. */ +/* libtiff/tif_config.h.in. Generated from configure.ac by autoheader. */ + @@ -87,7 +89,7 @@ diff -u /dev/null tiff-4.0.9/libtiff/mingw/tif_config.h + lacking the tag (default enabled). */ +#define CHECK_JPEG_YCBCR_SUBSAMPLING 1 + -+/* enable partial strip reading for large strips (experimental) */ ++/* enable partial strip reading for large strips */ +/* #undef CHUNKY_STRIP_READ_SUPPORT */ + +/* Support C++ stream API (requires C++ compiler) */ @@ -114,9 +116,6 @@ diff -u /dev/null tiff-4.0.9/libtiff/mingw/tif_config.h +/* Define to 1 if you have the header file. */ +#define HAVE_FCNTL_H 1 + -+/* Define to 1 if you have the `floor' function. */ -+#define HAVE_FLOOR 1 -+ +/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */ +/* #undef HAVE_FSEEKO */ + @@ -139,45 +138,21 @@ diff -u /dev/null tiff-4.0.9/libtiff/mingw/tif_config.h + machine */ +#define HAVE_IEEEFP 1 + -+/* Define to 1 if the system has the type `int16'. */ -+/* #undef HAVE_INT16 */ -+ -+/* Define to 1 if the system has the type `int32'. */ -+/* #undef HAVE_INT32 */ -+ -+/* Define to 1 if the system has the type `int8'. */ -+/* #undef HAVE_INT8 */ -+ +/* Define to 1 if you have the header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_IO_H 1 + -+/* Define to 1 if you have the `isascii' function. */ -+#define HAVE_ISASCII 1 -+ +/* Define to 1 if you have the `jbg_newlen' function. */ +/* #undef HAVE_JBG_NEWLEN */ + +/* Define to 1 if you have the `lfind' function. */ +#define HAVE_LFIND 1 + -+/* Define to 1 if you have the header file. */ -+#define HAVE_LIMITS_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_MALLOC_H 1 -+ -+/* Define to 1 if you have the `memmove' function. */ -+#define HAVE_MEMMOVE 1 -+ +/* Define to 1 if you have the header file. */ +#define HAVE_MEMORY_H 1 + -+/* Define to 1 if you have the `memset' function. */ -+#define HAVE_MEMSET 1 -+ +/* Define to 1 if you have the `mmap' function. */ +/* #undef HAVE_MMAP */ + @@ -187,9 +162,6 @@ diff -u /dev/null tiff-4.0.9/libtiff/mingw/tif_config.h +/* Define to 1 if you have the header file. */ +/* #undef HAVE_OPENGL_GL_H */ + -+/* Define to 1 if you have the `pow' function. */ -+#define HAVE_POW 1 -+ +/* Define if you have POSIX threads libraries and header files. */ +/* #undef HAVE_PTHREAD */ + @@ -202,9 +174,6 @@ diff -u /dev/null tiff-4.0.9/libtiff/mingw/tif_config.h +/* Define to 1 if you have the `snprintf' function. */ +#define HAVE_SNPRINTF 1 + -+/* Define to 1 if you have the `sqrt' function. */ -+#define HAVE_SQRT 1 -+ +/* Define to 1 if you have the header file. */ +#define HAVE_STDINT_H 1 + @@ -214,24 +183,18 @@ diff -u /dev/null tiff-4.0.9/libtiff/mingw/tif_config.h +/* Define to 1 if you have the `strcasecmp' function. */ +#define HAVE_STRCASECMP 1 + -+/* Define to 1 if you have the `strchr' function. */ -+#define HAVE_STRCHR 1 -+ +/* Define to 1 if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + -+/* Define to 1 if you have the `strrchr' function. */ -+#define HAVE_STRRCHR 1 -+ -+/* Define to 1 if you have the `strstr' function. */ -+#define HAVE_STRSTR 1 -+ +/* Define to 1 if you have the `strtol' function. */ +#define HAVE_STRTOL 1 + ++/* Define to 1 if you have the `strtoll' function. */ ++#define HAVE_STRTOLL 1 ++ +/* Define to 1 if you have the `strtoul' function. */ +#define HAVE_STRTOUL 1 + @@ -241,9 +204,6 @@ diff -u /dev/null tiff-4.0.9/libtiff/mingw/tif_config.h +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_TIME_H 1 -+ +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + @@ -306,7 +266,7 @@ diff -u /dev/null tiff-4.0.9/libtiff/mingw/tif_config.h +#define PACKAGE_NAME "LibTIFF Software" + +/* Define to the full name and version of this package. */ -+#define PACKAGE_STRING "LibTIFF Software 4.0.9" ++#define PACKAGE_STRING "LibTIFF Software 4.1.0" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "tiff" @@ -315,7 +275,7 @@ diff -u /dev/null tiff-4.0.9/libtiff/mingw/tif_config.h +#define PACKAGE_URL "" + +/* Define to the version of this package. */ -+#define PACKAGE_VERSION "4.0.9" ++#define PACKAGE_VERSION "4.1.0" + +/* Support Macintosh PackBits algorithm */ +#define PACKBITS_SUPPORT 1 @@ -336,9 +296,6 @@ diff -u /dev/null tiff-4.0.9/libtiff/mingw/tif_config.h +/* The size of `signed long long', as computed by sizeof. */ +#define SIZEOF_SIGNED_LONG_LONG 8 + -+/* The size of `signed short', as computed by sizeof. */ -+#define SIZEOF_SIGNED_SHORT 2 -+ +/* The size of `size_t', as computed by sizeof. */ +#ifdef _WIN64 +#define SIZEOF_SIZE_T 8 @@ -362,9 +319,6 @@ diff -u /dev/null tiff-4.0.9/libtiff/mingw/tif_config.h +/* The size of `unsigned long long', as computed by sizeof. */ +#define SIZEOF_UNSIGNED_LONG_LONG 8 + -+/* The size of `unsigned short', as computed by sizeof. */ -+#define SIZEOF_UNSIGNED_SHORT 2 -+ +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + @@ -461,7 +415,10 @@ diff -u /dev/null tiff-4.0.9/libtiff/mingw/tif_config.h +#define USE_WIN32_FILEIO 1 + +/* Version number of package */ -+#define VERSION "4.0.9" ++#define VERSION "4.1.0" ++ ++/* Support webp compression */ ++/* #undef WEBP_SUPPORT */ + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ @@ -481,6 +438,9 @@ diff -u /dev/null tiff-4.0.9/libtiff/mingw/tif_config.h +/* Support Deflate compression */ +#define ZIP_SUPPORT 1 + ++/* Support zstd compression */ ++/* #undef ZSTD_SUPPORT */ ++ +/* Enable large inode numbers on Mac OS X 10.5. */ +#ifndef _DARWIN_USE_64_BIT_INODE +# define _DARWIN_USE_64_BIT_INODE 1 @@ -509,10 +469,10 @@ diff -u /dev/null tiff-4.0.9/libtiff/mingw/tif_config.h + +/* Define to `unsigned int' if does not define. */ +/* #undef size_t */ -diff -u /dev/null tiff-4.0.9/libtiff/mingw/tiffconf.h +diff -u /dev/null tiff-4.1.0/libtiff/mingw/tiffconf.h --- /dev/null -+++ tiff-4.0.9/libtiff/mingw/tiffconf.h 2018-11-04 17:01:00.000000000 +0300 -@@ -0,0 +1,132 @@ ++++ tiff-4.1.0/libtiff/mingw/tiffconf.h +@@ -0,0 +1,123 @@ +/* libtiff/tiffconf.h. Generated from tiffconf.h.in by configure. */ +/* + Configuration defines for installed libtiff. @@ -557,15 +517,6 @@ diff -u /dev/null tiff-4.0.9/libtiff/mingw/tiffconf.h +/* Pointer difference type */ +#define TIFF_PTRDIFF_T ptrdiff_t + -+/* Define to 1 if the system has the type `int16'. */ -+/* #undef HAVE_INT16 */ -+ -+/* Define to 1 if the system has the type `int32'. */ -+/* #undef HAVE_INT32 */ -+ -+/* Define to 1 if the system has the type `int8'. */ -+/* #undef HAVE_INT8 */ -+ +/* Compatibility stuff. */ + +/* Define as 0 or 1 according to the floating point format suported by the diff --git a/external/tiff-4.0.9/CMakeLists.txt b/external/tiff-4.1.0/CMakeLists.txt similarity index 88% rename from external/tiff-4.0.9/CMakeLists.txt rename to external/tiff-4.1.0/CMakeLists.txt index 52b5ae99..35b48770 100644 --- a/external/tiff-4.0.9/CMakeLists.txt +++ b/external/tiff-4.1.0/CMakeLists.txt @@ -23,7 +23,7 @@ # LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE # OF THIS SOFTWARE. -cmake_minimum_required(VERSION 2.8.9) +cmake_minimum_required(VERSION 2.8.11) # b/c of use of BUILD_INTERFACE generator expression # Default policy is from 2.8.9 cmake_policy(VERSION 2.8.9) @@ -92,8 +92,9 @@ include(GNUInstallDirs) include(CheckCCompilerFlag) include(CheckCSourceCompiles) include(CheckIncludeFile) +include(CheckLibraryExists) include(CheckTypeSize) -include(CheckFunctionExists) +include(CheckSymbolExists) enable_testing() macro(current_date var) @@ -213,9 +214,6 @@ check_include_file(dlfcn.h HAVE_DLFCN_H) check_include_file(fcntl.h HAVE_FCNTL_H) check_include_file(inttypes.h HAVE_INTTYPES_H) check_include_file(io.h HAVE_IO_H) -check_include_file(limits.h HAVE_LIMITS_H) -check_include_file(malloc.h HAVE_MALLOC_H) -check_include_file(memory.h HAVE_MEMORY_H) check_include_file(search.h HAVE_SEARCH_H) check_include_file(stdint.h HAVE_STDINT_H) check_include_file(string.h HAVE_STRING_H) @@ -271,8 +269,6 @@ int main(void){ # Check type sizes # NOTE: Could be replaced with C99 -check_type_size("signed short" SIZEOF_SIGNED_SHORT) -check_type_size("unsigned short" SIZEOF_UNSIGNED_SHORT) check_type_size("signed int" SIZEOF_SIGNED_INT) check_type_size("unsigned int" SIZEOF_UNSIGNED_INT) check_type_size("signed long" SIZEOF_SIGNED_LONG) @@ -342,29 +338,21 @@ endif() if(SIZEOF_UNSIGNED_INT EQUAL SIZEOF_SIZE_T) set(TIFF_SIZE_T "unsigned int") set(TIFF_SIZE_FORMAT "%u") + set(TIFF_SSIZE_T "signed int") + set(TIFF_SSIZE_FORMAT "%d") elseif(SIZEOF_UNSIGNED_LONG EQUAL SIZEOF_SIZE_T) set(TIFF_SIZE_T "unsigned long") set(TIFF_SIZE_FORMAT "%lu") -elseif(SIZEOF_UNSIGNED_LONG_LONG EQUAL SIZEOF_SIZE_T) - set(TIFF_SIZE_T "unsigned long") - if (MINGW) - set(TIFF_SIZE_FORMAT "%I64u") - else() - set(TIFF_SIZE_FORMAT "%llu") - endif() -endif() - -if(SIZEOF_SIGNED_INT EQUAL SIZEOF_UNSIGNED_CHAR_P) - set(TIFF_SSIZE_T "signed int") - set(TIFF_SSIZE_FORMAT "%d") -elseif(SIZEOF_SIGNED_LONG EQUAL SIZEOF_UNSIGNED_CHAR_P) set(TIFF_SSIZE_T "signed long") set(TIFF_SSIZE_FORMAT "%ld") -elseif(SIZEOF_SIGNED_LONG_LONG EQUAL SIZEOF_UNSIGNED_CHAR_P) +elseif(SIZEOF_UNSIGNED_LONG_LONG EQUAL SIZEOF_SIZE_T) + set(TIFF_SIZE_T "unsigned long long") set(TIFF_SSIZE_T "signed long long") if (MINGW) + set(TIFF_SIZE_FORMAT "%I64u") set(TIFF_SSIZE_FORMAT "%I64d") else() + set(TIFF_SIZE_FORMAT "%llu") set(TIFF_SSIZE_FORMAT "%lld") endif() endif() @@ -388,80 +376,37 @@ endif() # TIFF_SSIZE_T TIFF_SSIZE_FORMAT # TIFF_PTRDIFF_T TIFF_PTRDIFF_FORMAT) -# Nonstandard int types -check_type_size(INT8 int8) -set(HAVE_INT8 ${INT8}) -check_type_size(INT16 int16) -set(HAVE_INT16 ${INT16}) -check_type_size(INT32 int32) -set(HAVE_INT32 ${INT32}) - -# Check functions -set(CMAKE_REQUIRED_LIBRARIES_SAVE ${CMAKE_REQUIRED_LIBRARIES}) -set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${M_LIBRARY}) -check_function_exists(floor HAVE_FLOOR) -check_function_exists(pow HAVE_POW) -check_function_exists(sqrt HAVE_SQRT) -set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES_SAVE}) - -check_function_exists(isascii HAVE_ISASCII) -check_function_exists(memmove HAVE_MEMMOVE) -check_function_exists(memset HAVE_MEMSET) -check_function_exists(mmap HAVE_MMAP) -check_function_exists(setmode HAVE_SETMODE) -check_function_exists(strcasecmp HAVE_STRCASECMP) -check_function_exists(strchr HAVE_STRCHR) -check_function_exists(strrchr HAVE_STRRCHR) -check_function_exists(strstr HAVE_STRSTR) -check_function_exists(strtol HAVE_STRTOL) -check_function_exists(strtol HAVE_STRTOUL) -check_function_exists(strtoull HAVE_STRTOULL) -check_function_exists(getopt HAVE_GETOPT) -check_function_exists(lfind HAVE_LFIND) - -# May be inlined, so check it compiles: -check_c_source_compiles(" -#include -int main(void) { - char buf[10]; - snprintf(buf, 10, \"Test %d\", 1); - return 0; -}" - HAVE_SNPRINTF) +check_symbol_exists(mmap "sys/mman.h" HAVE_MMAP) +check_symbol_exists(setmode "unistd.h" HAVE_SETMODE) +check_symbol_exists(snprintf "stdio.h" HAVE_SNPRINTF) +check_symbol_exists(strcasecmp "strings.h" HAVE_STRCASECMP) +check_symbol_exists(strtol "stdlib.h" HAVE_STRTOL) +check_symbol_exists(strtoll "stdlib.h" HAVE_STRTOLL) +check_symbol_exists(strtoul "stdlib.h" HAVE_STRTOUL) +check_symbol_exists(strtoull "stdlib.h" HAVE_STRTOULL) +check_symbol_exists(getopt "unistd.h;stdio.h" HAVE_GETOPT) +check_symbol_exists(lfind "search.h" HAVE_LFIND) if(NOT HAVE_SNPRINTF) add_definitions(-DNEED_LIBPORT) endif() # CPU bit order -set(fillorder FILLORDER_MSB2LSB) +set(HOST_FILLORDER FILLORDER_MSB2LSB) if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "i.*86.*" OR CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "amd64.*" OR + # AMD64 on Windows + CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "AMD64" OR CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "x86_64.*") - set(fillorder FILLORDER_LSB2MSB) + set(HOST_FILLORDER FILLORDER_LSB2MSB) endif() -set(HOST_FILLORDER ${fillorder} CACHE STRING "Native CPU bit order") -mark_as_advanced(HOST_FILLORDER) # CPU endianness include(TestBigEndian) -test_big_endian(bigendian) -if (bigendian) - set(bigendian ON) -else() - set(bigendian OFF) -endif() -set(HOST_BIG_ENDIAN ${bigendian} CACHE STRING "Native CPU bit order") -mark_as_advanced(HOST_BIG_ENDIAN) -if (HOST_BIG_ENDIAN) - set(HOST_BIG_ENDIAN 1) -else() - set(HOST_BIG_ENDIAN 0) -endif() +test_big_endian(HOST_BIG_ENDIAN) # IEEE floating point -set(HAVE_IEEEFP 1 CACHE STRING "IEEE floating point is available") -mark_as_advanced(HAVE_IEEEFP) +set(HAVE_IEEEFP 1) report_values(CMAKE_HOST_SYSTEM_PROCESSOR HOST_FILLORDER HOST_BIG_ENDIAN HAVE_IEEEFP) @@ -560,12 +505,9 @@ else() set(JBIG_FOUND FALSE) endif() -set(CMAKE_REQUIRED_LIBRARIES_SAVE ${CMAKE_REQUIRED_LIBRARIES}) set(CMAKE_REQUIRED_INCLUDES_SAVE ${CMAKE_REQUIRED_INCLUDES}) set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${JBIG_INCLUDE_DIR}) -set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${JBIG_LIBRARY}) -check_function_exists(jbg_newlen HAVE_JBG_NEWLEN) -set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES_SAVE}) +check_symbol_exists(jbg_newlen "jbig.h" HAVE_JBG_NEWLEN) set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES_SAVE}) # liblzma2 @@ -578,6 +520,42 @@ if(LIBLZMA_FOUND) set(LZMA_SUPPORT 1) endif() +# libzstd +option(zstd "use libzstd (required for ZSTD compression)" ON) +if (zstd) + find_path(ZSTD_INCLUDE_DIR zstd.h) + find_library(ZSTD_LIBRARY NAMES zstd) + if (ZSTD_INCLUDE_DIR AND ZSTD_LIBRARY) + check_library_exists ("${ZSTD_LIBRARY}" ZSTD_decompressStream "" ZSTD_RECENT_ENOUGH) + if (ZSTD_RECENT_ENOUGH) + set(ZSTD_FOUND TRUE) + set(ZSTD_LIBRARIES ${ZSTD_LIBRARY}) + message(STATUS "Found ZSTD library: ${ZSTD_LIBRARY}") + else () + message(WARNING "Found ZSTD library, but not recent enough. Use zstd >= 1.0") + endif () + endif () +endif() +set(ZSTD_SUPPORT 0) +if(ZSTD_FOUND) + set(ZSTD_SUPPORT 1) +endif() + +# libwebp +option(webp "use libwebp (required for WEBP compression)" ON) +if (webp) + find_path(WEBP_INCLUDE_DIR /webp/decode.h) + find_library(WEBP_LIBRARY NAMES webp) +endif() +set(WEBP_SUPPORT 0) +set(WEBP_FOUND FALSE) +if (WEBP_INCLUDE_DIR AND WEBP_LIBRARY) + set(WEBP_SUPPORT 1) + set(WEBP_FOUND TRUE) + set(WEBP_LIBRARIES ${WEBP_LIBRARY}) + message(STATUS "Found WEBP library: ${WEBP_LIBRARY}") +endif() + # 8/12-bit jpeg mode option(jpeg12 "enable libjpeg 8/12-bit dual mode (requires separate 12-bit libjpeg build)" ON) @@ -621,12 +599,8 @@ set(win32_io FALSE) if(WIN32) set(win32_io TRUE) endif() -set(USE_WIN32_FILEIO ${win32_io} CACHE BOOL "Use win32 IO system (Microsoft Windows only)") -if (USE_WIN32_FILEIO) - set(USE_WIN32_FILEIO TRUE) -else() - set(USE_WIN32_FILEIO FALSE) -endif() + +set(USE_WIN32_FILEIO ${win32_io}) # Orthogonal features @@ -643,7 +617,7 @@ if(strip-chopping) endif() # Defer loading of strip/tile offsets -option(defer-strile-load "enable deferred strip/tile offset/size loading (experimental)" OFF) +option(defer-strile-load "enable deferred strip/tile offset/size loading (also available at runtime with the 'D' flag of TIFFOpen())" OFF) set(DEFER_STRILE_LOAD ${defer-strile-load}) # CHUNKY_STRIP_READ_SUPPORT @@ -692,6 +666,12 @@ endif() if(LIBLZMA_INCLUDE_DIRS) list(APPEND TIFF_INCLUDES ${LIBLZMA_INCLUDE_DIRS}) endif() +if(ZSTD_INCLUDE_DIR) + list(APPEND TIFF_INCLUDES ${ZSTD_INCLUDE_DIR}) +endif() +if(WEBP_INCLUDE_DIR) + list(APPEND TIFF_INCLUDES ${WEBP_INCLUDE_DIR}) +endif() # Libraries required by libtiff set(TIFF_LIBRARY_DEPS) @@ -713,6 +693,12 @@ endif() if(LIBLZMA_LIBRARIES) list(APPEND TIFF_LIBRARY_DEPS ${LIBLZMA_LIBRARIES}) endif() +if(ZSTD_LIBRARIES) + list(APPEND TIFF_LIBRARY_DEPS ${ZSTD_LIBRARIES}) +endif() +if(WEBP_LIBRARIES) + list(APPEND TIFF_LIBRARY_DEPS ${WEBP_LIBRARIES}) +endif() #report_values(TIFF_INCLUDES TIFF_LIBRARY_DEPS) @@ -756,6 +742,8 @@ message(STATUS " Old JPEG support: ${old-jpeg} (requested) ${ message(STATUS " JPEG 8/12 bit dual mode: ${jpeg12} (requested) ${JPEG12_FOUND} (availability)") message(STATUS " ISO JBIG support: ${jbig} (requested) ${JBIG_FOUND} (availability)") message(STATUS " LZMA2 support: ${lzma} (requested) ${LIBLZMA_FOUND} (availability)") +message(STATUS " ZSTD support: ${zstd} (requested) ${ZSTD_FOUND} (availability)") +message(STATUS " WEBP support: ${webp} (requested) ${WEBP_FOUND} (availability)") message(STATUS "") message(STATUS " C++ support: ${cxx} (requested) ${CXX_SUPPORT} (availability)") message(STATUS "") diff --git a/external/tiff-4.0.9/COPYRIGHT b/external/tiff-4.1.0/COPYRIGHT similarity index 100% rename from external/tiff-4.0.9/COPYRIGHT rename to external/tiff-4.1.0/COPYRIGHT diff --git a/external/tiff-4.0.9/ChangeLog b/external/tiff-4.1.0/ChangeLog similarity index 83% rename from external/tiff-4.0.9/ChangeLog rename to external/tiff-4.1.0/ChangeLog index ea8622b8..01e2182c 100644 --- a/external/tiff-4.0.9/ChangeLog +++ b/external/tiff-4.1.0/ChangeLog @@ -1,3 +1,1582 @@ +2019-11-03 Bob Friesenhahn + + libtiff 4.1.0 released. + + Added a step for updating the legacy ChangeLog file. + + Ignore emacs temporary files (ending with tilde character). + + Added release summary page for the 4.1.0 release. + + Fix Cmake HAVE_GETOPT for systems which declare getopt in stdio.h. Fix utility baked-in getopt prototype which appears when HAVE_GETOPT is not defined. + + Fax2tiff.sh needs to remove its output file in advance. Syntax changes so that bash is not required. + +2019-10-26 Even Rouault + + tif_jpeg.c: extra cast to silence Coverity warning. GDAL CID 1406475. + +2019-10-23 Even Rouault + + tif_jpeg.c: fix warning added by previous commit (on 32bit builds) + +2019-10-23 Even Rouault + + Merge branch 'coverity-fixes' into 'master' + Coverity fixes + + See merge request libtiff/libtiff!94 + +2019-10-22 Timothy Lyanguzov + + Use 64-bit calculations correctly. + + Fix size calculation to use 64-bit tmsize_t correctly. + + Make bytesperclumpline calculations using tmsize_t type. + +2019-10-03 Even Rouault + + tif_read: align code of TIFFReadRawStrip() and TIFFReadRawTile() that differed for non good reason. Non-functional change normally. (fixes GitLab #162) + +2019-10-01 Even Rouault + + HTML: update for GitLab issues. + +2019-09-29 Even Rouault + + html/v3.5.6-beta.html: redact URL of defunct web site. + + Website: update links to mailing list. + +2019-09-17 Even Rouault + + TIFFReadAndRealloc(): avoid too large memory allocation attempts. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=17244 + +2019-09-03 Even Rouault + + ByteCountLooksBad and EstimateStripByteCounts: avoid unsigned integer overflows. Fixes https://oss-fuzz.com/testcase-detail/5686156066291712 and https://oss-fuzz.com/testcase-detail/6332499206078464 + +2019-09-02 Even Rouault + + tif_ojpeg.c: avoid relying on isTiled macro being wrapped in () + + tif_ojpeg.c: avoid use of uninitialized memory on edge/broken file. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=16844 + + tiff_read_rgba_fuzzer.cc: add a -DSTANDALONE mode for easier reproduction of oss-fuzz reports + +2019-09-01 Even Rouault + + tif_dirread.c: allocChoppedUpStripArrays(). avoid unsigned integer overflow. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=16846 + +2019-08-27 Even Rouault + + tif_ojpeg.c: avoid unsigned integer overflow. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=16793 + +2019-08-26 Even Rouault + + TIFFReadDirEntryData(): rewrite to avoid unsigned integer overflow (not a bug). Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=16792 + + TIFFFetchDirectory(): fix invalid cast from uint64 to tmsize_t. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=16784 + +2019-08-25 Even Rouault + + JPEG: avoid use of unintialized memory on corrupted files. + Follow-up of cf3ce6fab894414a336546f62adc57f02590a22c + Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=16602 + Credit to OSS Fuzz + +2019-08-23 Even Rouault + + _TIFFPartialReadStripArray(): avoid unsigned integer overflow. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=16685 + + OJPEGWriteHeaderInfo(): avoid unsigned integer overflow on strile dimensions close to UINT32_MAX. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=16683 + + TIFFFillStrip(): avoid harmless unsigned integer overflow. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=16653 + + EstimateStripByteCounts(): avoid unsigned integer overflow. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=16643& + + tif_ojpeg: avoid unsigned integer overflow (probably not a bug). Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=16635 + + tif_thunder: avoid unsigned integer overflow (not a bug). Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=16632 + +2019-08-22 Even Rouault + + _TIFFMultiply32() / _TIFFMultiply64(): avoid relying on unsigned integer overflow (not a bug) + + EstimateStripByteCounts(): avoid unsigned integer overflow. + +2019-08-21 Even Rouault + + EstimateStripByteCounts(): avoid unsigned integer overflow. + +2019-08-20 Even Rouault + + EstimateStripByteCounts(): avoid harmless unsigned integer overflow. + + _TIFFPartialReadStripArray(): avoid triggering unsigned integer overflow with -fsanitize=unsigned-integer-overflow (not a bug, this is well defined by itself) + +2019-08-18 Even Rouault + + tiff2ps: fix use of wrong data type that caused issues (/Height being written as 0) on 64-bit big endian platforms + +2019-08-16 Even Rouault + + setByteArray(): fix previous commit. + + setByteArray(): avoid potential signed integer overflow. Pointed by Hendra Gunadi. No actual problem known (which does not mean there wouldn't be any. Particularly on 32bit builds) + +2019-08-15 Even Rouault + + RGBA interface: fix integer overflow potentially causing write heap buffer overflow, especially on 32 bit builds. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=16443. Credit to OSS Fuzz + +2019-08-14 Even Rouault + + Merge branch 'fix_integer_overflow' into 'master' + Fix integer overflow in _TIFFCheckMalloc() and other implementation-defined behaviour (CVE-2019-14973) + + See merge request libtiff/libtiff!90 + +2019-08-13 Even Rouault + + Fix integer overflow in _TIFFCheckMalloc() and other implementation-defined behaviour (CVE-2019-14973) + _TIFFCheckMalloc()/_TIFFCheckRealloc() used a unsafe way to detect overflow + in the multiplication of nmemb and elem_size (which are of type tmsize_t, thus + signed), which was especially easily triggered on 32-bit builds (with recent + enough compilers that assume that signed multiplication cannot overflow, since + this is undefined behaviour by the C standard). The original issue which lead to + this fix was trigged from tif_fax3.c + + There were also unsafe (implementation defied), and broken in practice on 64bit + builds, ways of checking that a uint64 fits of a (signed) tmsize_t by doing + (uint64)(tmsize_t)uint64_var != uint64_var comparisons. Those have no known + at that time exploits, but are better to fix in a more bullet-proof way. + Or similarly use of (int64)uint64_var <= 0. + +2019-08-12 Even Rouault + + TIFFClientOpen(): fix memory leak if one of the required callbacks is not provided. Fixed Coverity GDAL CID 1404110 + + OJPEGReadBufferFill(): avoid very long processing time on corrupted files. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=16400. master only + +2019-08-10 Even Rouault + + oss-fuzz/tiff_read_rgba_fuzzer.cc: fix wrong env variable value in previous commit + + oss-fuzz/tiff_read_rgba_fuzzer.cc: avoid issue with libjpeg-turbo and MSAN + + OJPEG: fix integer division by zero on corrupted subsampling factors. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=15824. Credit to OSS Fuzz + + Merge branch 'ossfuzz_i386' + + contrib/oss-fuzz/build.sh: fix for i386 build of jbigkit, and use $LIB_FUZZING_ENGINE + +2019-08-10 Even Rouault + + Merge branch 'patch-1' into 'master' + fix two tiny typos + + See merge request libtiff/libtiff!89 + +2019-08-10 Reto Kromer + + fix two tiny typos. + +2019-08-09 Even Rouault + + Merge branch 'patch-1' into 'master' + fix a typo in man page + + See merge request libtiff/libtiff!88 + +2019-08-09 Reto Kromer + + fix typo. + +2019-08-04 Even Rouault + + Merge branch 'TIFFTAGID_Zero_reading_IGNORE' into 'master' + Suppressed Reading of Tiff tags with ID = 0 (like GPSVERSIONID) corrected. + + See merge request libtiff/libtiff!77 + +2019-08-04 Su Laus + + Reading of Tiff tags with ID = 0 (like GPSVERSIONID) corrected. + IGNORE placeholder in tif_dirread.c is now replaced by a field dir_ignore in the TIFFDirEntry structure + + Currently, in tif_dirread.c a special IGNORE value for the tif tags is defined + in order to flag status preventing already processed tags from further processing. + This irrational behaviour prevents reading of custom tags with id code 0 - like tag GPSVERSIONID from EXIF 2.31 definition. + + An additional field 'tdir_ignore' is now added to the TIFFDirEntry structure and code is changed + to allow tags with id code 0 to be read correctly. + + This change was already proposed as pending improvement in tif_dirread.c around line 32. + + Reference is also made to: + - Discussion in https://gitlab.com/libtiff/libtiff/merge_requests/39 + - http://bugzilla.maptools.org/show_bug.cgi?id=2540 + + Comments and indention adapted. + + Preparation to rebase onto master + +2019-07-16 Even Rouault + + Merge branch 'cmake_amd64' into 'master' + CMakeLists.txt: properly set value of HOST_FILLORDER to LSB2MSB for Windows CMake builds + + See merge request libtiff/libtiff!87 + +2019-07-15 Even Rouault + + CMakeLists.txt: properly set value of HOST_FILLORDER to LSB2MSB for Windows CMake builds + As can be seen in https://ci.appveyor.com/project/rleigh-codelibre/libtiff-didfs/builds/25846668/job/ory5w098j8wcij9x + log, the HOST_FILLORDER is not properly set: + + [00:02:58] -- CMAKE_HOST_SYSTEM_PROCESSOR set to AMD64 + [00:02:58] -- HOST_FILLORDER set to FILLORDER_MSB2LSB + + Ther reason is that we match the "amd64.*" lowercase string whereas + CMAKE_HOST_SYSTEM_PROCESSOR is set to AMD64 uppercase. + +2019-07-09 Even Rouault + + TIFFWriteCheck(): call TIFFForceStrileArrayWriting() when needed (should have gone with eaeca6274ae71cdfaeb9f673b6fb0f3cfc0e6ce5) (master only) + +2019-07-09 Even Rouault + + Merge branch 'fix_chromium_925269' into 'master' + OJPEG: avoid use of unintialized memory on corrupted files + + See merge request libtiff/libtiff!86 + +2019-07-05 Even Rouault + + OJPEG: avoid use of unintialized memory on corrupted files. + Fixes https://bugs.chromium.org/p/chromium/issues/detail?id=925269 + Patch from Lei Zhang with little adaptations. + +2019-06-29 Even Rouault + + Merge branch 'fix-division-by-zero' into 'master' + Return infinite distance when denominator is zero. + + See merge request libtiff/libtiff!85 + +2019-06-29 Dirk Lemstra + + Return infinite distance when denominator is zero. + +2019-06-29 Even Rouault + + Merge branch 'typetests' into 'master' + Add test to check that libtiff types have the correct size + + See merge request libtiff/libtiff!57 + +2019-05-31 Thomas Bernard + + make TIFF_SSIZE_T the same bitwidth as TIFF_SIZE_T. + it was previously the same bitwidth as unsigned char * + Pointers can be larger than size_t. + +2019-05-31 Thomas Bernard + + Add test to check that libtiff types have the correct size. + in configure/CMakeList.txt : + + - TIFF_INT8_T/TIFF_UINT8_T is signed/unsigned char + sizeof(char)==1 in C standard + - TIFF_INT16_T/TIFF_UINT16_T is signed/unsigned short + sizeof(short)>=2 in C standard + - TIFF_INT32_T/TIFF_UINT32_T is defined so its sizeof() is 4 + + - TIFF_INT64_T/TIFF_UINT64_T is defined so its sizeof() is 8 + + - TIFF_SIZE_T is defined so it has same sizeof() than size_t + + - TIFF_SSIZE_T is defined so it has same sizeof() than unsigned char * + +2019-05-29 Even Rouault + + Merge branch 'defer_strile_writing' into 'master' + Add TIFFDeferStrileArrayWriting() and TIFFForceStrileArrayWriting() + + See merge request libtiff/libtiff!82 + +2019-05-29 Even Rouault + + Merge branch 'TIFFReadFromUserBuffer' into 'master' + Add TIFFReadFromUserBuffer() + + See merge request libtiff/libtiff!81 + +2019-05-26 Even Rouault + + Fix vulnerability in 'D' (DeferStrileLoad) mode (master only) (fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=14908) + +2019-05-25 Even Rouault + + Replace 'stripped' by 'striped' in error messages. + +2019-05-25 Even Rouault + + Add TIFFDeferStrileArrayWriting() and TIFFForceStrileArrayWriting() + Those advanced writing functions must be used in a particular sequence + to make their intended effect. Their aim is to control when/where + the [Strip/Tile][Offsets/ByteCounts] arrays are written into the file. + + The purpose of this is to generate 'cloud-optimized geotiff' files where + the first KB of the file only contain the IFD entries without the potentially + large strile arrays. Those are written afterwards. + + The typical sequence of calls is: + TIFFOpen() + [ TIFFCreateDirectory(tif) ] + Set fields with calls to TIFFSetField(tif, ...) + TIFFDeferStrileArrayWriting(tif) + TIFFWriteCheck(tif, ...) + TIFFWriteDirectory(tif) + ... potentially create other directories and come back to the above directory + TIFFForceStrileArrayWriting(tif): emit the arrays at the end of file + + See test/defer_strile_writing.c for a practical example. + +2019-05-24 Even Rouault + + Fix vulnerability introduced by defer strile loading (master only) + Found on GDAL with https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=14894 + Disabling the TIFF_DEFERSTRILELOAD bit in ChopupStripArray() was a + bad idea since when using TIFFReadDirectory() to reload the directory again + would lead to a different value of td_rowsperstrip, which could confuse + readers if they relied on the value found initially. + + Fix typo in error message (master only) + +2019-05-22 Even Rouault + + Add TIFFReadFromUserBuffer() + This function replaces the use of TIFFReadEncodedStrip()/TIFFReadEncodedTile() + when the user can provide the buffer for the input data, for example when + he wants to avoid libtiff to read the strile offset/count values from the + [Strip|Tile][Offsets/ByteCounts] array. + + libtiff.def: add missing new symbols. + + test/defer_strile_loading.c: fix warning with Visual C++ + + _TIFFRewriteField(): fix for bigtiff case (master only) + 116cf67f4c59196605abdb244657c3070c4310af made StripByteCount/TileByteCount to + always be rewritten as TIFF_LONG8. + +2019-05-21 Even Rouault + + Merge branch 'ondemand_strile_offbytecount_loading' into 'master' + Make defer strile offset/bytecount loading available at runtime + + See merge request libtiff/libtiff!79 + +2019-05-21 Even Rouault + + Merge branch 'bigtiff_write_bytecount_on_long_when_possible' into 'master' + Create TileByteCounts/StripByteCounts tag with SHORT (ClassicTIFF/BigTIFF) or LONG (BigTIFF) type when possible + + See merge request libtiff/libtiff!78 + +2019-05-21 Even Rouault + + Merge branch 'html_link' into 'master' + libtiff.html, bigtiffpr.html: absolute => relative link + + See merge request libtiff/libtiff!80 + +2019-05-14 Thomas Bernard + + libtiff.html, bigtiffpr.html: absolute => relative link. + +2019-05-10 Even Rouault + + Make defer strile offset/bytecount loading available at runtime. + ... and add per-strile offset/bytecount loading capabilities. + + Part of this commit makes the behaviour that was previously met when + libtiff was compiled with -DDEFER_STRILE_LOAD available for default builds + when specifying the new 'D' (Deferred) TIFFOpen() flag. In that mode, the [Tile/Strip][ByteCounts/Offsets] + arrays are only loaded when first accessed. This can speed-up the opening + of files stored on the network when just metadata retrieval is needed. + This mode has been used for years by the GDAL library when compiled with + its embeded libtiff copy. + + To avoid potential out-of-tree code (typically codecs) that would use + the td_stripbytecount and td_stripoffset array inconditionnaly assuming they + have been loaded, those have been suffixed with _p (for protected). The + use of the new functions mentionned below is then recommended. + + Another addition of this commit is the capability of loading only the + values of the offset/bytecount of the strile of interest instead of the + whole array. This is enabled with the new 'O' (Ondemand) flag of TIFFOpen() + (which implies 'D'). That behaviour has also been used by GDAL, which hacked + into the td_stripoffset/td_stripbytecount arrays directly. The new code + added in the _TIFFFetchStrileValue() and _TIFFPartialReadStripArray() internal + functions is mostly a port of what was in GDAL GTiff driver previously. + + Related to that, the public TIFFGetStrileOffset[WithErr]() and TIFFGetStrileByteCount[WithErr]() + functions have been added to API. They are of particular interest when + using sparse files (with offset == bytecount == 0) and you want to detect + if a strile is present or not without decompressing the data, or updating + an existing sparse file. + They will also be used to enable a future enhancement where client code can entirely + skip bytecount loading in some situtations + + A new test/defer_strile_loading.c test has been added to test the above + capabilities. + +2019-05-10 Even Rouault + + Creation: use SHORT type when possible for StripByteCounts/TileByteCounts + This follows the same logic as previous commit. + +2019-05-09 Even Rouault + + BigTIFF creation: write TileByteCounts/StripByteCounts tag with LONG when possible + In most situations of BigTIFF file, the tile/strip sizes are of reasonable size, + that is they fit on a 4-byte LONG. So in that case, use LONG instead of LONG8 + to save some space. For uncompressed file, it is easy to detect such situations + by checking at the TIFFTileSize64()/TIFFStripSize64() return. For compressed file, + we must take into account the fact that compression may sometimes result in + larger compressed data. So we allow this optimization only for a few select + compression times, and take a huge security margin (10x factor). We also only + apply this optimization on multi-strip files, so as to allow easy on-the-fly + growing of single-strip files whose strip size could grow above the 4GB threshold. + + This change is compatible with the BigTIFF specification. According to + https://www.awaresystems.be/imaging/tiff/bigtiff.html: + "The StripOffsets, StripByteCounts, TileOffsets, and TileByteCounts tags are + allowed to have the datatype TIFF_LONG8 in BigTIFF. Old datatypes TIFF_LONG, + and TIFF_SHORT where allowed in the TIFF 6.0 specification, are still valid in BigTIFF, too. " + On a practical point of view, this is also compatible on reading/writing of + older libtiff 4.X versions. + + The only glitch I found, which is rather minor, is when using such a BigTIFF + file with TileByteCounts/StripByteCounts written with TIFF_LONG, and updating + it with an older libtiff 4.X version with a change in the + [Tile/Strip][ByteCounts/Offsets] array. In that case the _TIFFRewriteField() + function will rewrite the directory and array with TIFF_LONG8, instead of updating + the existing array (this is an issue fixed by this commit). The file will + still be valid however, hence the minor severity of this. + +2019-05-08 Even Rouault + + Merge branch 'bug2799' into 'master' + fix fax2tiff + + See merge request libtiff/libtiff!55 + +2019-05-08 Even Rouault + + Merge branch 'bug_2829' into 'master' + WIN32: use tif_win32.c when building with CMake + + See merge request libtiff/libtiff!75 + +2019-05-06 Even Rouault + + Merge branch 'FILESOURCE_SCENETYPE_reading' into 'master' + Reading error for FileSource and SceneType tags corrected. + + See merge request libtiff/libtiff!76 + +2019-05-06 Su Laus + + Reading error for FileSource and SceneType tags corrected. + EXIF tags FILESOURCE and SCENETYPE are defined as TIFF_UNDEFINED and field_readcount==1! + There is a bug in TIFFReadDirEntryByte() preventing to read correctly type TIFF_UNDEFINED fields with field_readcount==1 + Upgrade of TIFFReadDirEntryByte() with added TIFF_UNDEFINED switch-entry allows libtiff to read those tags correctly. + +2019-04-25 Thomas Bernard + + WIN32: use tif_win32.c when building with CMake. + see http://bugzilla.maptools.org/show_bug.cgi?id=2829 + + the top CMakeLists.txt defines + win32_io and USE_WIN32_FILEIO + + WIN32_IO is defined nowhere in CMake (only in automake things) + +2019-04-25 Even Rouault + + Merge branch 'gitlab_pages' into 'master' + Advertise https://libtiff.gitlab.io/libtiff/ as mirror + + See merge request libtiff/libtiff!70 + +2019-04-25 Even Rouault + + Merge branch 'bug_2844' into 'master' + tiff2ps.c: PSDataColorContig(): avoid heap buffer overrun + + See merge request libtiff/libtiff!69 + +2019-04-25 Even Rouault + + Merge branch 'issue_2785' into 'master' + tiff2pdf.c: don't call t2p_tile_collapse_left() for Ycbcr + + See merge request libtiff/libtiff!64 + +2019-04-11 Even Rouault + + Merge branch 'fix_gdal_1439' into 'master' + TIFFWriteEncodedStrip/TIFFWriteEncodedTile: fix rewriting of LZW-compressed data + + See merge request libtiff/libtiff!74 + +2019-04-11 Even Rouault + + TIFFWriteEncodedStrip/TIFFWriteEncodedTile: fix rewriting of LZW-compressed data + Fixes https://github.com/OSGeo/gdal/issues/1439 + + When rewriting a LZW tile/strip whose existing size is very close to a multiple of + 1024 bytes (and larger than 8192 bytes) with compressed data that is larger, + the new data was not placed at the end of the file, causing corruption. + +2019-04-08 Even Rouault + + Merge branch 'bug2848' into 'master' + tif_luv.c: LogLuvSetupEncode() error must return 0 + + See merge request libtiff/libtiff!72 + +2019-04-03 Thomas Bernard + + build/gitlab-ci: fix typo. + + show test-suite.log in gitlab-ci. + useful when build fails + + Add output check for tiff2ps. + note : the reference files have been generated in master branch + +2019-03-23 Even Rouault + + tif_read.c: potentially fix false positive from Coverity Scan. CID 1400288 + + tif_read.c: potentially fix false positive from Coverity Scan. CID 1400271 + + tif_zip.c: remove dead code. CID 1400360. + + tif_webp.c: remove false positive warning about dereference before null check. CID 1400255 + + tif_pixarlog.c: remove dead code. CID 1400342. + + tif_pixarlog.c: avoid false positive Coverity Scan warnings about overflow. CID 1400300 and 1400367 + + tif_lzw.c: silence CoverityScan false positive. CID 1400355. + + tif_luv.c: silence CoverityScan false positive. CID 1400231, 1400251, 1400254, 1400272, 1400318, 1400356 + + TryChopUpUncompressedBigTiff(): avoid potential division by zero. master only. GDAL Coverity CID 1400263 + +2019-03-22 Thomas Bernard + + tif_luv.c: LogLuvSetupEncode() error must return 0. + see http://bugzilla.maptools.org/show_bug.cgi?id=2848 + + if wrongly returning 1, the processing of incorrect file continues, + which causes problems. + +2019-03-22 Thomas Bernard + + add a test for fax2tiff tool. + +2019-02-28 Thomas Bernard + + tiff2pdf.c: don't call t2p_tile_collapse_left() when buffer size is wrong + see http://bugzilla.maptools.org/show_bug.cgi?id=2785 + + Advertise https://libtiff.gitlab.io/libtiff/ as mirror. + I'm put it above the maptools.org mirror because + Even Rouault believe at some point it will be completely removed + +2019-02-28 Even Rouault + + Merge branch 'bug_2826' into 'master' + tiff2pdf.c: check colormap pointers when loading CMYK with colormap + + See merge request libtiff/libtiff!65 + +2019-02-28 Thomas Bernard + + tiff2pdf.c: check colormap pointers. + Avoid access to non initialized pointers + http://bugzilla.maptools.org/show_bug.cgi?id=2826 + +2019-02-27 Even Rouault + + Merge branch 'fix_warnings' into 'master' + tiff2ps.c: fix warning caused by integer promotion + + See merge request libtiff/libtiff!68 + +2019-02-23 Thomas Bernard + + PSDataColorContig(): avoid heap buffer overrun. + fixes http://bugzilla.maptools.org/show_bug.cgi?id=2844 + each iteration of the loop read nc bytes + +2019-02-22 Thomas Bernard + + tiff2ps.c: fix warning caused by integer promotion. + uint8 value is promoted to int in (value << 24) so -fsanitize + yield runtime errors : + tiff2ps.c:2969:33: runtime error: left shift of 246 by 24 places cannot be represented in type 'int' + +2019-02-22 Even Rouault + + Merge branch 'large_strile_improvements' into 'master' + Large strile support improvements + + See merge request libtiff/libtiff!63 + +2019-02-21 Even Rouault + + Merge branch 'gitlab-pages' into 'master' + ci: Add pages job + + See merge request libtiff/libtiff!45 + +2019-02-19 Even Rouault + + Merge branch 'issue_2833' into 'master' + tiffcp.c: check that (Tile Width)*(Samples/Pixel) do no overflow + + See merge request libtiff/libtiff!60 + +2019-02-19 Even Rouault + + Merge branch 'issue_2831' into 'master' + tiffcrop.c: fix invertImage() for bps 2 and 4 + + See merge request libtiff/libtiff!61 + +2019-02-19 Even Rouault + + Merge branch 'issue_2842' into 'master' + move _TIFFClampDoubleToFloat() to tif_aux.c + + See merge request libtiff/libtiff!62 + +2019-02-19 Even Rouault + + tif_zip.c: allow reading and writing strips/tiles with more than 4 GB of compressed or uncompressed data + + tif_dirread.c: when strip chopping is enabled, extend this mechanism to multi-strip uncompressed files with strips larger than 2GB to expose them as strips of ~500 MB + +2019-02-19 Even Rouault + + Merge branch 'size_t_typo' into 'master' + CMakeLists.txt: fix TIFF_SIZE_T + + See merge request libtiff/libtiff!59 + +2019-02-12 Thomas Bernard + + move _TIFFClampDoubleToFloat() to tif_aux.c. + the same function was declared in tif_dir.c and tif_dirwrite.c + + see http://bugzilla.maptools.org/show_bug.cgi?id=2842 + +2019-02-11 Thomas Bernard + + tiffcrop.c: fix invertImage() for bps 2 and 4. + too much bytes were processed, causing a heap buffer overrun + http://bugzilla.maptools.org/show_bug.cgi?id=2831 + the loop counter must be + for (col = 0; col < width; col += 8 / bps) + + Also the values were not properly calculated. It should be + 255-x, 15-x, 3-x for bps 8, 4, 2. + + But anyway it is easyer to invert all bits as 255-x = ~x, etc. + (substracting from a binary number composed of all 1 is like inverting + the bits) + +2019-02-11 Thomas Bernard + + tiffcp.c: use INT_MAX. + + check that (Tile Width)*(Samples/Pixel) do no overflow. + fixes bug 2833 + +2019-02-03 Thomas Bernard + + CMakeLists.txt: fix TIFF_SIZE_T. + +2019-02-02 Even Rouault + + Merge branch 'master' into 'master' + Fix for simple memory leak that was assigned CVE-2019-6128. + + See merge request libtiff/libtiff!50 + +2019-02-02 Even Rouault + + Merge branch 'bug2835' into 'master' + tiff2ps: fix heap-buffer-overflow + + See merge request libtiff/libtiff!53 + +2019-02-02 Even Rouault + + Fix warning (use of uninitialized value) added per d0a842c5dbad2609aed43c701a12ed12461d3405 (fixes https://gitlab.com/libtiff/libtiff/merge_requests/54#note_137742985) + +2019-02-02 Yuri Aksenov + + fix fax2tiff. + see http://bugzilla.maptools.org/show_bug.cgi?id=2799 + fixes d9bc8472e72549f29c0062c1cbd3d56f279f3be2 + +2019-02-02 Even Rouault + + Merge branch 'tiffcrop' into 'master' + tiffcrop: shut up clang warnings + + See merge request libtiff/libtiff!52 + +2019-02-01 Even Rouault + + Merge branch 'bug2833' into 'master' + TIFFWriteDirectoryTagTransferfunction() : fix NULL dereferencing + + See merge request libtiff/libtiff!54 + +2019-02-01 Even Rouault + + Merge branch 'gitignore' into 'master' + add test/ files to .gitignore + + See merge request libtiff/libtiff!56 + +2019-02-01 Even Rouault + + Merge branch 'master' into 'master' + tif_dir: unset transferfunction field if necessary (CVE-2018-19210) + + See merge request libtiff/libtiff!47 + +2019-01-29 Thomas Bernard + + add test/ files to .gitignore. + +2019-01-29 Thomas Bernard + + TIFFWriteDirectoryTagTransferfunction() : fix NULL dereferencing. + http://bugzilla.maptools.org/show_bug.cgi?id=2833 + + we must check the pointer is not NULL before memcmp() the memory + +2019-01-29 Thomas Bernard + + tiff2ps: fix heap-buffer-overflow. + http://bugzilla.maptools.org/show_bug.cgi?id=2834 + + usually the test (i < byte_count) is OK because the byte_count is divisible by samplesperpixel. + But if that is not the case, (i + ncomps) < byte_count should be used, or + maybe (i + samplesperpixel) <= byte_count + +2019-01-28 Thomas Bernard + + tiffcrop: shut up clang warnings. + make the out filename building a bit more simple + and remove the use of strcat() + +2019-01-23 Scott Gayou + + Fix for simple memory leak that was assigned CVE-2019-6128. + pal2rgb failed to free memory on a few errors. This was reported + here: http://bugzilla.maptools.org/show_bug.cgi?id=2836. + +2019-01-05 Bob Friesenhahn + + Fix tiff2ps error regarding "Inconsistent value of es" by allowing es to be zero. Problem was reported to the tiff mailing list by Julian H. Stacey on January 5, 2019. + +2018-12-13 Hugo Lefeuvre + + tif_dir: unset transferfunction field if necessary. + The number of entries in the transfer table is determined as following: + + (td->td_samplesperpixel - td->td_extrasamples) > 1 ? 3 : 1 + + This means that whenever td->td_samplesperpixel or td->td_extrasamples are + modified we also need to make sure that the number of required entries in + the transfer table didn't change. + + If it changed and the number of entries is higher than before we should + invalidate the transfer table field and free previously allocated values. + In the other case there's nothing to do, additional tf entries won't harm + and properly written code will just ignore them since spp - es < 1. + + For instance this situation might happen when reading an OJPEG compressed + image with missing SamplesPerPixel tag. In this case the SamplesPerPixel + field might be updated after setting the transfer table. + + see http://bugzilla.maptools.org/show_bug.cgi?id=2500 + + This commit addresses CVE-2018-19210. + +2018-12-08 Bob Friesenhahn + + Do not attempt to re-sync zip stream after reported data error from inflate(). + +2018-12-07 Even Rouault + + Merge branch 'resource-leaks' into 'master' + Fix two resource leaks + + See merge request libtiff/libtiff!43 + +2018-12-07 Even Rouault + + Merge branch 'build-jbig' into 'master' + add jbig support to the fuzzer + + See merge request libtiff/libtiff!42 + +2018-12-01 Bob Friesenhahn + + tiffcrop.c: Avoid new clang warning about tools/tiffcrop.c "size argument in 'strncat' call appears to be size of the source". + +2018-11-28 Even Rouault + + Merge branch 'webp_memleak' into 'master' + fixed mem leak in webp compression + + See merge request libtiff/libtiff!48 + +2018-11-28 Norman Barker + + fixed mem leak in webp compression. + +2018-11-20 Even Rouault + + Merge branch 'lossless_webp' into 'master' + fixed lossless webp compression config + + See merge request libtiff/libtiff!46 + +2018-11-20 Norman Barker + + fixed lossless webp compression config. + +2018-11-18 Bob Friesenhahn + + snprintf porting fix for Visual Studio 2003. + +2018-11-18 Roger Leigh + + ci: Add pages job. + +2018-11-10 Bob Friesenhahn + + Change references from defunct ftp site to https site. + +2018-11-10 Bob Friesenhahn + + * configure.ac: libtiff 4.0.10 released. + + Change COMPRESSION_ZSTD to 50000 and COMPRESSION_WEBP to 50001. + +2018-11-04 Bob Friesenhahn + + Added preliminary release notes for release 4.0.10. + +2018-11-03 Bob Friesenhahn + + tiff2pdf: Eliminate compiler warning about snprintf output truncation when formatting pdf_datetime. + +2018-11-03 Olivier Paquet + + Merge branch 'no_tif_platform_console' into 'master' + Remove builtin support for GUI warning and error message boxes + + See merge request libtiff/libtiff!24 + +2018-11-03 Bob Friesenhahn + + tiffcrop.c: Eliminate compiler warning about snprintf output truncation when formatting filenum. + + TWebPVGetField(): Add apparently missing break statement impacting TIFFTAG_WEBP_LOSSLESS. + + Eliminate compiler warnings about duplicate definitions of streq/strneq macros. + + Ignore generated files. + + Remove and ignore files which are a product of autogen.sh. + +2018-11-02 Bob Friesenhahn + + Fix TIFFErrorExt() formatting of size_t type for 32-bit compiles. + +2018-10-30 Even Rouault + + tiff2bw: avoid null pointer dereference in case of out of memory situation. Fixes http://bugzilla.maptools.org/show_bug.cgi?id=2819 / CVE-2018-18661 + + tiffio.h: fix comment. + +2018-10-26 Even Rouault + + Merge branch 'header2' into 'master' + Fix 725279bd: Standalone tif_predict.h: tiff.h should be tiffiop.h + + See merge request libtiff/libtiff!41 + +2018-10-26 Kurt Schwehr + + Fix 725279bd: Standalone tif_predict.h: tiff.h should be tiffiop.h. + +2018-10-25 Even Rouault + + Merge branch 'headers' into 'master' + Add includes to headers to allow them to stand alone. + + See merge request libtiff/libtiff!40 + +2018-10-24 Kurt Schwehr + + Add includes to headers to allow them to stand alone. + This allows compilers that can do header stand alone header parsing + to process libtiff. + +2018-10-18 Even Rouault + + LZMAPreEncode: emit verbose error if lzma_stream_encoder() fails (typically because not enough memory available) + +2018-10-17 Even Rouault + + tif_webp.c: fix previous commit that broke scanline decoding. + + tif_webp.c: fix potential read outside libwebp buffer on corrupted images + +2018-10-14 Even Rouault + + Merge branch 'jbig_decode_overflow' into 'master' + JBIG: fix potential out-of-bounds write in JBIGDecode() + + See merge request libtiff/libtiff!38 + +2018-10-14 Even Rouault + + JBIG: fix potential out-of-bounds write in JBIGDecode() + JBIGDecode doesn't check if the user provided buffer is large enough + to store the JBIG decoded image, which can potentially cause out-of-bounds + write in the buffer. + This issue was reported and analyzed by Thomas Dullien. + + Also fixes a (harmless) potential use of uninitialized memory when + tif->tif_rawsize > tif->tif_rawcc + + And in case libtiff is compiled with CHUNKY_STRIP_READ_SUPPORT, make sure + that whole strip data is provided to JBIGDecode() + +2018-10-05 Even Rouault + + tif_webp.c: fix scanline reading/writing. + + WEBP codec: initialize nSamples in TWebPSetupDecode() and TWebPSetupEncode() + +2018-10-05 Even Rouault + + Merge branch 'tif_webp' into 'master' + webp support + + See merge request libtiff/libtiff!32 + +2018-10-05 Norman Barker + + webp in tiff. + +2018-09-17 Even Rouault + + Merge branch 'master' into 'master' + fix three potential vulnerabilities. + + See merge request libtiff/libtiff!33 + +2018-09-08 Young_X + + fix out-of-bound read on some tiled images. + + avoid potential int32 overflows in multiply_ms() + + only read/write TIFFTAG_GROUP3OPTIONS or TIFFTAG_GROUP4OPTIONS if compression is COMPRESSION_CCITTFAX3 or COMPRESSION_CCITTFAX4 + +2018-08-15 Even Rouault + + TIFFSetupStrips(): avoid potential uint32 overflow on 32-bit systems with large number of strips. Probably relates to http://bugzilla.maptools.org/show_bug.cgi?id=2788 / CVE-2018-10779 + +2018-08-07 Even Rouault + + ZSTD: fix flush issue that can cause endless loop in ZSTDEncode() + Fixes https://github.com/OSGeo/gdal/issues/833 + +2018-08-07 Even Rouault + + Merge branch 'fix_bug_2800' into 'master' + Fix libtiff 4.0.8 regression when reading LZW-compressed strips with scanline API + + See merge request libtiff/libtiff!31 + +2018-08-07 Even Rouault + + Fix libtiff 4.0.8 regression when reading LZW-compressed strips with scanline API + Fixes http://bugzilla.maptools.org/show_bug.cgi?id=2800 + +2018-07-05 Even Rouault + + Add tag and pseudo-tag definitions for ESRI LERC codec (out of tree codec whose source is at https://github.com/OSGeo/gdal/blob/master/gdal/frmts/gtiff/tif_lerc.c) + +2018-07-02 Even Rouault + + Fix TIFFTAG_ZSTD_LEVEL pseudo tag value to be > 65536, and the next one in the series + +2018-05-25 Stefan Weil + + Remove builtin support for GUI warning and error message boxes. + Now warnings always go to the console by default unless applications + define their own warning and error handlers. + + GUI applications (and Windows CE) are required to define such handlers. + +2018-05-12 Even Rouault + + LZWDecodeCompat(): fix potential index-out-of-bounds write. Fixes http://bugzilla.maptools.org/show_bug.cgi?id=2780 / CVE-2018-8905 + The fix consists in using the similar code LZWDecode() to validate we + don't write outside of the output buffer. + + TIFFFetchNormalTag(): avoid (probably false positive) clang-tidy clang-analyzer-core.NullDereference warnings + + TIFFWriteDirectorySec: avoid assertion. Fixes http://bugzilla.maptools.org/show_bug.cgi?id=2795. CVE-2018-10963 + +2018-05-04 Even Rouault + + tif_color.c: fix code comment. + +2018-04-17 Even Rouault + + Merge branch 'fuzzer-fix' into 'master' + remove a pointless multiplication and a variable that's not necessary + + See merge request libtiff/libtiff!29 + +2018-04-17 Paul Kehrer + + remove a pointless multiplication and a variable that's not necessary. + +2018-04-17 Even Rouault + + Merge branch 'ossfuzz' into 'master' + move oss-fuzz build script and fuzzer into libtiff tree + + See merge request libtiff/libtiff!28 + +2018-04-17 Paul Kehrer + + move oss-fuzz build script and fuzzer into libtiff tree. + +2018-04-14 Even Rouault + + _TIFFGetMaxColorChannels: update for LOGLUV, ITULAB and ICCLAB that have 3 color channels + +2018-04-12 Even Rouault + + Fix MSVC warning. + +2018-04-12 Even Rouault + + Merge branch 'master' into 'master' + Fix NULL pointer dereference in TIFFPrintDirectory (bugzilla 2778/CVE-2018-7456) + + See merge request libtiff/libtiff!27 + +2018-04-11 Hugo Lefeuvre + + Fix NULL pointer dereference in TIFFPrintDirectory. + The TIFFPrintDirectory function relies on the following assumptions, + supposed to be guaranteed by the specification: + + (a) A Transfer Function field is only present if the TIFF file has + photometric type < 3. + + (b) If SamplesPerPixel > Color Channels, then the ExtraSamples field + has count SamplesPerPixel - (Color Channels) and contains + information about supplementary channels. + + While respect of (a) and (b) are essential for the well functioning of + TIFFPrintDirectory, no checks are realized neither by the callee nor + by TIFFPrintDirectory itself. Hence, following scenarios might happen + and trigger the NULL pointer dereference: + + (1) TIFF File of photometric type 4 or more has illegal Transfer + Function field. + + (2) TIFF File has photometric type 3 or less and defines a + SamplesPerPixel field such that SamplesPerPixel > Color Channels + without defining all extra samples in the ExtraSamples fields. + + In this patch, we address both issues with respect of the following + principles: + + (A) In the case of (1), the defined transfer table should be printed + safely even if it isn't 'legal'. This allows us to avoid expensive + checks in TIFFPrintDirectory. Also, it is quite possible that + an alternative photometric type would be developed (not part of the + standard) and would allow definition of Transfer Table. We want + libtiff to be able to handle this scenario out of the box. + + (B) In the case of (2), the transfer table should be printed at its + right size, that is if TIFF file has photometric type Palette + then the transfer table should have one row and not three, even + if two extra samples are declared. + + In order to fulfill (A) we simply add a new 'i < 3' end condition to + the broken TIFFPrintDirectory loop. This makes sure that in any case + where (b) would be respected but not (a), everything stays fine. + + (B) is fulfilled by the loop condition + 'i < td->td_samplesperpixel - td->td_extrasamples'. This is enough as + long as (b) is respected. + + Naturally, we also make sure (b) is respected. This is done in the + TIFFReadDirectory function by making sure any non-color channel is + counted in ExtraSamples. + + This commit addresses CVE-2018-7456. + +2018-03-27 Even Rouault + + Merge branch 'tiffset-long8' into 'master' + tiffset: Add support for LONG8, SLONG8 and IFD8 field types + + See merge request libtiff/libtiff!25 + +2018-03-26 Roger Leigh + + port: Clean up NetBSD sources and headers to build standalone. + +2018-03-23 Roger Leigh + + port: Add strtol, strtoll and strtoull. + Also update strtoul. All use the same implementation from NetBSD libc. + + tiffset: Add support for LONG8, SLONG8 and IFD8 field types. + +2018-03-17 Even Rouault + + ChopUpSingleUncompressedStrip: avoid memory exhaustion (CVE-2017-11613) + Rework fix done in 3719385a3fac5cfb20b487619a5f08abbf967cf8 to work in more + cases like https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=6979. + Credit to OSS Fuzz + + Fixes http://bugzilla.maptools.org/show_bug.cgi?id=2724 + +2018-03-13 Even Rouault + + libtiff/tif_luv.c: rewrite loops in a more readable way (to avoid false positive reports like http://bugzilla.maptools.org/show_bug.cgi?id=2779) + +2018-03-13 Even Rouault + + Merge branch 'avoid_memory_exhaustion_in_ChopUpSingleUncompressedStrip' into 'master' + ChopUpSingleUncompressedStrip: avoid memory exhaustion (CVE-2017-11613) + + See merge request libtiff/libtiff!26 + +2018-03-11 Even Rouault + + ChopUpSingleUncompressedStrip: avoid memory exhaustion (CVE-2017-11613) + In ChopUpSingleUncompressedStrip(), if the computed number of strips is big + enough and we are in read only mode, validate that the file size is consistent + with that number of strips to avoid useless attempts at allocating a lot of + memory for the td_stripbytecount and td_stripoffset arrays. + + Fixes http://bugzilla.maptools.org/show_bug.cgi?id=2724 + +2018-03-10 Even Rouault + + Typo fix in comment. + +2018-03-03 Even Rouault + + Avoid warning with gcc 8 (partially revert 647b0e8c11ee11896f319b92cf110775f538d75c) + +2018-02-25 Even Rouault + + Merge branch 'typos' into 'master' + Fix some typos + + See merge request libtiff/libtiff!23 + +2018-02-24 Stefan Weil + + Fix some typos. + Most of them were found by codespell. + +2018-02-14 Even Rouault + + Typo fix in comment. + + Merge branch 'zstd' + + Add warning about COMPRESSION_ZSTD not being officialy registered. + +2018-02-14 Even Rouault + + Merge branch 'bug2772' into 'master' + Fix for bug 2772 + + See merge request libtiff/libtiff!20 + +2018-02-12 Nathan Baker + + Fix for bug 2772. + It is possible to craft a TIFF document where the IFD list is circular, + leading to an infinite loop while traversing the chain. The libtiff + directory reader has a failsafe that will break out of this loop after + reading 65535 directory entries, but it will continue processing, + consuming time and resources to process what is essentially a bogus TIFF + document. + + This change fixes the above behavior by breaking out of processing when + a TIFF document has >= 65535 directories and terminating with an error. + +2018-02-09 Even Rouault + + Merge branch 'libtiff-as-subdirectory-fixes' into 'master' + Prefer target_include_directories + + See merge request libtiff/libtiff!12 + +2018-02-06 Even Rouault + + Merge branch 'cmake-cleanups' into 'master' + Cmake cleanups + + See merge request libtiff/libtiff!11 + +2018-02-06 Even Rouault + + Merge branch 'check-right-cxx-variable' into 'master' + Check right cxx variable + + See merge request libtiff/libtiff!19 + +2018-02-06 Even Rouault + + Merge branch 'dont-leak-stream-open' into 'master' + Fix a memory leak in TIFFStreamOpen + + See merge request libtiff/libtiff!17 + +2018-02-06 Ben Boeckel + + cmake: check CXX_SUPPORT. + This variable is set in response to the `cxx` cache variable; use it + instead. + +2018-02-04 Olivier Paquet + + Merge branch 'warnings' into 'master' + Fix all compiler warnings for default build + + See merge request libtiff/libtiff!16 + +2018-02-04 Nathan Baker + + Fix all compiler warnings for default build. + +2018-01-30 Paul Kehrer + + tabs are hard. + +2018-01-29 Paul Kehrer + + use hard tabs like the rest of the project. + + Fix a memory leak in TIFFStreamOpen. + TIFFStreamOpen allocates a new tiff{o,i}s_data, but if TIFFClientOpen + fails then that struct is leaked. Delete it if the returned TIFF * is + null. + +2018-01-29 Kevin Funk + + Bump minimum required CMake version to v2.8.11. + Because we use the BUILD_INTERFACE generator expression + +2018-01-27 Even Rouault + + Merge branch 'patch-1' into 'master' + Update CMakeLists.txt for build fix on Windows + + See merge request libtiff/libtiff!14 + +2018-01-27 Even Rouault + + Merge branch 'patch-2' into 'master' + Update tiffgt.c for build fix on Windows + + See merge request libtiff/libtiff!13 + +2018-01-25 Olivier Paquet + + Merge branch 'bug2750' into 'master' + Add workaround to pal2rgb buffer overflow. + + See merge request libtiff/libtiff!15 + +2018-01-25 Nathan Baker + + Add workaround to pal2rgb buffer overflow. + +2018-01-23 Andrea + + Update tiffgt.c for build fix on Windows. + + Update CMakeLists.txt for build fix on Windows. + +2018-01-15 Even Rouault + + Merge branch 'has-attribute-check' into 'master' + tiffiop: use __has_attribute to detect the no_sanitize attribute + + See merge request libtiff/libtiff!10 + +2018-01-15 Ben Boeckel + + cmake: avoid setting hard-coded variables in the cache. + + cmake: avoid an unnecessary intermediate variable. + + cmake: avoid an unnecessary intermediate variable. + + cmake: avoid tautological logic. + + cmake: use check_symbol_exists. + This accounts for symbols being provided by macros. + + cmake: remove unused configure checks. + +2018-01-12 Kevin Funk + + Prefer target_include_directories. + When libtiff is included in a super project via a simple + `add_subdirectory(libtiff)`, this way the `tiff` library target has all + the necessary information to build against it. + + Note: The BUILD_INTERFACE generator expression feature requires at least + CMake v2.8.11 if I'm correct. + +2018-01-09 Ben Boeckel + + tiffiop: use __has_attribute to detect the no_sanitize attribute. + +2017-12-31 Even Rouault + + man/TIFFquery.3tiff: remove reference to non-existing TIFFReadStrip() function in TIFFIsByteSwapped() documentation. Patch by Eric Piel. Fixes http://bugzilla.maptools.org/show_bug.cgi?id=2763 + + libtiff/tif_dir.c: _TIFFVGetField(): fix heap out-of-bounds access when requesting TIFFTAG_NUMBEROFINKS on a EXIF directory. Fixes http://bugzilla.maptools.org/show_bug.cgi?id=2765. Reported by Google Autofuzz project + + libtiff/tif_print.c: TIFFPrintDirectory(): fix null pointer dereference on corrupted file. Fixes http://bugzilla.maptools.org/show_bug.cgi?id=2770 + +2017-12-21 Even Rouault + + Add libzstd to gitlab-ci. + +2017-12-21 Even Rouault + + Add ZSTD compression codec. + From https://github.com/facebook/zstd + "Zstandard, or zstd as short version, is a fast lossless compression + algorithm, targeting real-time compression scenarios at zlib-level + and better compression ratios. It's backed by a very fast entropy stage, + provided by Huff0 and FSE library." + + We require libzstd >= 1.0.0 so as to be able to use streaming compression + and decompression methods. + + The default compression level we have selected is 9 (range goes from 1 to 22), + which experimentally offers equivalent or better compression ratio than + the default deflate/ZIP level of 6, and much faster compression. + + For example on a 6600x4400 16bit image, tiffcp -c zip runs in 10.7 seconds, + while tiffcp -c zstd runs in 5.3 seconds. Decompression time for zip is + 840 ms, and for zstd 650 ms. File size is 42735936 for zip, and + 42586822 for zstd. Similar findings on other images. + + On a 25894x16701 16bit image, + + Compression time Decompression time File size + + ZSTD 35 s 3.2 s 399 700 498 + ZIP/Deflate 1m 20 s 4.9 s 419 622 336 + +2017-12-10 Even Rouault + + Merge branch 'fix_cve-2017-9935' into 'master' + Fix CVE-2017-9935 + + See merge request libtiff/libtiff!7 + +2017-12-10 Brian May + + tiff2pdf: Fix apparent incorrect type for transfer table. + The standard says the transfer table contains unsigned 16 bit values, + I have no idea why we refer to them as floats. + +2017-12-10 Brian May + + tiff2pdf: Fix CVE-2017-9935. + Fix for http://bugzilla.maptools.org/show_bug.cgi?id=2704 + + This vulnerability - at least for the supplied test case - is because we + assume that a tiff will only have one transfer function that is the same + for all pages. This is not required by the TIFF standards. + + We than read the transfer function for every page. Depending on the + transfer function, we allocate either 2 or 4 bytes to the XREF buffer. + We allocate this memory after we read in the transfer function for the + page. + + For the first exploit - POC1, this file has 3 pages. For the first page + we allocate 2 extra extra XREF entries. Then for the next page 2 more + entries. Then for the last page the transfer function changes and we + allocate 4 more entries. + + When we read the file into memory, we assume we have 4 bytes extra for + each and every page (as per the last transfer function we read). Which + is not correct, we only have 2 bytes extra for the first 2 pages. As a + result, we end up writing past the end of the buffer. + + There are also some related issues that this also fixes. For example, + TIFFGetField can return uninitalized pointer values, and the logic to + detect a N=3 vs N=1 transfer function seemed rather strange. + + It is also strange that we declare the transfer functions to be of type + float, when the standard says they are unsigned 16 bit values. This is + fixed in another patch. + + This patch will check to ensure that the N value for every transfer + function is the same for every page. If this changes, we abort with an + error. In theory, we should perhaps check that the transfer function + itself is identical for every page, however we don't do that due to the + confusion of the type of the data in the transfer function. + +2017-12-10 Even Rouault + + Merge branch 'undef-warn-fixes' into 'master' + Fix a couple of harmless but annoying -Wundef warnings + + See merge request libtiff/libtiff!8 + +2017-12-07 Vadim Zeitlin + + Remove tests for undefined SIZEOF_VOIDP. + As configure never uses AC_CHECK_SIZEOF(void*), this symbol is never + defined and so it doesn't make sense to test it in the code, this just + results in -Wundef warnings if they're enabled. + + Avoid harmless -Wundef warnings for __clang_major__ + Check that we're using Clang before checking its version. + +2017-12-02 Even Rouault + + Merge branch 'remove_autogenerated_files' into 'master' + Remove autogenerated files + + See merge request libtiff/libtiff!5 + +2017-12-02 Bob Friesenhahn + + Merge branch 'tif_config_h_includes' into 'master' + 'tif_config.h' or 'tiffiop.h' must be included before any system header. + + See merge request libtiff/libtiff!6 + +2017-12-02 Bob Friesenhahn + + 'tif_config.h' or 'tiffio.h' must be included before any system header. + +2017-12-01 Even Rouault + + .gitignore: add patterns for build from root. + + Remove remaining .cvsignore files. + + Remove autoconf/automake generated files, and add them to .gitignore. + +2017-12-01 Olivier Paquet + + Merge branch 'makedistcheck' into 'master' + build/gitlab-ci and build/travis-ci: add a 'make dist' step in autoconf_build()… + + See merge request libtiff/libtiff!4 + +2017-12-01 Even Rouault + + build/gitlab-ci and build/travis-ci: add a 'make dist' step in autoconf_build() target, to check we are release-ready + +2017-12-01 Even Rouault + + Merge branch 'git_updates' into 'master' + CVS to Git updates + + See merge request libtiff/libtiff!2 + +2017-12-01 Even Rouault + + HOWTO-RELEASE: update to use signed tags. + + README.md: use markdown syntax for hyperlinks. + +2017-11-30 Even Rouault + + Add .gitignore. + + Regenerate autoconf files. + + Makefile.am: update to reflect removal of README.vms and README -> README.md + + Remove all $Id and $Headers comments with CVS versions. + + HOWTO-RELEASE: update for git. + + Remove outdated .cvsignore. + + Remove outdated commit script. + + Remove README.vms. + + Rename README as README.md, and update content. + + html/index.html: reflect change from CVS to gitlab. + +2017-11-30 Olivier Paquet + + Merge branch 'test-ci' into 'master' + Update CI configuration + + See merge request libtiff/libtiff!1 + +2017-11-23 Roger Leigh + + appveyor: Correct path for git clone and skip artefact archival. + +2017-11-22 Roger Leigh + + travis-ci: Remove unused matrix exclusion. + + Add gitlab-ci build support. + 2017-11-18 Bob Friesenhahn * configure.ac: libtiff 4.0.9 released. @@ -1849,7 +3428,7 @@ * libtiff/tif_jpeg.c: in JPEGFixupTags(), recognize SOF2, SOF9 and SOF10 markers to avoid emitting a warning (even if, according to the TechNote, - there are admitedly unusual/not recommended or even forbidden variants, but + there are admittedly unusual/not recommended or even forbidden variants, but they do work well with libjpeg for SOF2, and with libjpeg-turbo for SOF2, SOF9 and SOF10). Define in_color_space and input_components to the right values in @@ -2432,7 +4011,7 @@ 2012-05-19 Bob Friesenhahn * man/TIFFGetField.3tiff: Correct the 'count' field type in the - example for how to retreive the value of unsupported tags. + example for how to retrieve the value of unsupported tags. 2012-03-30 Frank Warmerdam @@ -3039,7 +4618,7 @@ 2010-04-21 Frank Warmerdam - * libtiff/tif_jpeg.c: avoid preparing jpeg tables everytime + * libtiff/tif_jpeg.c: avoid preparing jpeg tables every time JPEGSetupEncode() is called if the tables already seem to be established. This prevents spurious updates and rewriting of directories with jpegtables when doing updates to existing images. @@ -3371,7 +4950,7 @@ * test/common.sh - start verbose mode after common settings. - * libtiff/tif_dirinfo.c: Replace lfind() with local equivelent to + * libtiff/tif_dirinfo.c: Replace lfind() with local equivalent to avoid type mismatches on different platforms. http://bugzilla.maptools.org/show_bug.cgi?id=1889 @@ -3518,7 +5097,7 @@ * tools/tiffdump.c: When compiling for Microsoft Windows, apply consistent (__int64) casting when testing if _lseeki64 has - successfully seeked as requested. This is necessary for large + successfully sought as requested. This is necessary for large file support to work since off_t is only 32-bit. 2008-07-29 Frank Warmerdam @@ -4316,7 +5895,7 @@ btiff/tif_win32.c: Replace custom Win32 memory api with generic * libtiff/tif_getimage.c: replaced usage of TIFFScanlineSize in gtStripContig with TIFFNewScanlineSize so as to fix buggy behaviour on subsampled images - this ought to get sorted when we feel brave - enough to replace TIFFScanlineSize alltogether + enough to replace TIFFScanlineSize altogether * libtiff/tif_ojpeg.c: fixed bug in OJPEGReadSkip @@ -4974,7 +6553,7 @@ btiff/tif_win32.c: Replace custom Win32 memory api with generic 2005-06-03 Andrey Kiselev - * libtiff/tif_open.c: Replace runtime endianess check with the compile + * libtiff/tif_open.c: Replace runtime endianness check with the compile time one. * libtiff/tif_predict.c: Floating point predictor now works on @@ -6316,7 +7895,7 @@ btiff/tif_win32.c: Replace custom Win32 memory api with generic 2003-11-16 Andrey Kiselev * libtiff/{tiff.h, tif_dirinfo.c}: Added support for IFD (13) - datatype, intruduced in "Adobe PageMaker TIFF Tech. Notes". + datatype, introduced in "Adobe PageMaker TIFF Tech. Notes". 2003-11-15 Frank Warmerdam @@ -6627,7 +8206,7 @@ btiff/tif_win32.c: Replace custom Win32 memory api with generic * contrib/ojpeg/{Makefile.in, jdhuff.h, jinclude.h, ojpeg.c, README}, configure, Makefile.in: Improved libtiff compilation with OJPEG - support. Now no need for patching IJG JPEG library, hack requred by + support. Now no need for patching IJG JPEG library, hack required by libtiff will be compiled and used in-place. Implemented with suggestion and help from Bill Allombert, Debian's libjpeg maintainer. @@ -7485,7 +9064,7 @@ btiff/tif_win32.c: Replace custom Win32 memory api with generic sizes. It fixes two problems: Without scaling (-S) the fax is now centered on the page size specified - with -H and/or -W. Before, fax2ps was using an obscure and practially + with -H and/or -W. Before, fax2ps was using an obscure and practically useless algorithm to allocate the image relative to Letter sized paper which sometime sled to useless whitespace on the paper, while at the same time cutting of the faxes printable area at the opposite border. diff --git a/external/tiff-4.0.9/HOWTO-RELEASE b/external/tiff-4.1.0/HOWTO-RELEASE similarity index 59% rename from external/tiff-4.0.9/HOWTO-RELEASE rename to external/tiff-4.1.0/HOWTO-RELEASE index ae750119..abcdc9ba 100644 --- a/external/tiff-4.0.9/HOWTO-RELEASE +++ b/external/tiff-4.1.0/HOWTO-RELEASE @@ -1,4 +1,4 @@ -HOWTO-RELEASE: +HOWTO-RELEASE: Notes on releasing. @@ -22,17 +22,30 @@ Notes on releasing. and correctly set system clock and on a filesystem which accurately records file update times. Use of GNU make is recommended. -1. Commit any unsaved changes. +1. Commit any unsaved changes. -2. Create html/vX.X.html and add it to cvs with 'cvs add html/vX.X.html'. - Take ChangeLog entries and html-ify in there. +2. Use gnulib's gitlog-to-changelog script to add new (since the last + release) entries to the traditional ChangeLog file. Take note of + the most recent change note time stamp and use that as the starting + point. Concatenate the old logs to the new logs. The added logs + may be used to help produce the release notes (in next step). For + example: + + gitlog-to-changelog --since=`head -n 1 ChangeLog | sed -e 's/ .*//g'` --append-dot > ChangeLog.added + printf "\n" >> ChangeLog.added + cat ChangeLog.added ChangeLog > ChangeLog.new + mv ChangeLog.new ChangeLog + rm ChangeLog.added + +3. Create html/vX.X.html and add it to git with 'git add html/vX.X.html'. + Take ChangeLog entries and html-ify in there. Easist thing to do is take html/vX.(X-1).html and use it as a template. -3. Add vX.X.html file to the list of 'docfiles' files in the html/Makefile.am. +4. Add vX.X.html file to the list of 'docfiles' files in the html/Makefile.am. -4. Update html/index.html to refer to this new page as the current release. +5. Update html/index.html to refer to this new page as the current release. -5. Increment the release version in configure.ac. Put 'alpha' or +6. Increment the release version in configure.ac. Put 'alpha' or 'beta' after the version, if applicable. For example: 4.0.0 @@ -42,7 +55,7 @@ Notes on releasing. Version should be updated in two places: in the second argument of the AC_INIT macro and in LIBTIFF_xxx_VERSION variables. -6. Update library ELF versioning in configure.ac (LIBTIFF_CURRENT, +7. Update library ELF versioning in configure.ac (LIBTIFF_CURRENT, LIBTIFF_REVISION, and LIBTIFF_AGE). These numbers have nothing to do with the libtiff release version numbers. @@ -53,11 +66,11 @@ Notes on releasing. have been added, removed, or interface structures have changed, then more care is required. -7. Add an entry to Changelog similar to: +8. Add an entry to Changelog similar to: * libtiff 4.0.0 released. -8. In the source tree do +9. In the source tree do ./autogen.sh @@ -65,7 +78,7 @@ Notes on releasing. maintainer build with current autoconf, automake, and libtool packages. It is only needed when updating tool versions. -9. It is recommended (but not required) to build outside of the source +10. It is recommended (but not required) to build outside of the source tree so that the source tree is kept in a pristine state. This also allows sharing the source directory on several networked systems. For example: @@ -78,17 +91,17 @@ Notes on releasing. ./configure --enable-maintainer-mode -10. In the build tree do +11. In the build tree do make release This will update "RELEASE-DATE", "VERSION", and libtiff/tiffvers.h in the source tree. -11. In the source tree, verify that the version info in RELEASE-DATE, +12. In the source tree, verify that the version info in RELEASE-DATE, VERSION and libtiff/tiffvers.h is right. -12. In the build tree do +13. In the build tree do make make distcheck @@ -99,21 +112,35 @@ Notes on releasing. Two files with names tiff-version.tar.gz and tiff-version.zip will be created in the top level build directory. -13. In the source tree do +14. In the source tree do - 'cvs commit'. + 'git status', 'git add .', 'git commit' and 'git push' -14. In the source tree do +15. In the source tree, create a signed tag - cvs tag Release-v4-0-0 + git tag -s v4.0.0 -m "Create tag for v4.0.0" (or the appropriate name for the release) -15. Copy release packages from the build tree to the + and push it to "origin" (if "origin" points to the official repository) + + git push origin v4.0.0 + +16. Sign the release files in the build tree using your private key + + export GPG_TTY=$(tty) + for file in tiff-*.tar.gz tiff-*.zip ; do \ + gpg2 --output ${file}.sig --detach-sig $file ; \ + done + + for file in tiff-*.tar.gz tiff-*.zip ; do \ + gpg2 --verify ${file}.sig $file ; \ + done + +17. Copy release packages from the build tree to the ftp.remotesensing.org ftp site. scp tiff-*.tar.gz tiff-*.zip \ - warmerdam@upload.osgeo.org:/osgeo/download/libtiff - -16. Announce to list, tiff@lists.maptools.org + bfriesen@upload.osgeo.org:/osgeo/download/libtiff +18. Announce to list, tiff@lists.maptools.org diff --git a/external/tiff-4.0.9/Makefile.am b/external/tiff-4.1.0/Makefile.am similarity index 99% rename from external/tiff-4.0.9/Makefile.am rename to external/tiff-4.1.0/Makefile.am index 418a3b93..d19e58ee 100644 --- a/external/tiff-4.0.9/Makefile.am +++ b/external/tiff-4.1.0/Makefile.am @@ -31,8 +31,7 @@ ACLOCAL_AMFLAGS = -I m4 docfiles = \ COPYRIGHT \ ChangeLog \ - README \ - README.vms \ + README.md \ RELEASE-DATE \ TODO \ VERSION diff --git a/external/tiff-4.0.9/Makefile.in b/external/tiff-4.1.0/Makefile.in similarity index 97% rename from external/tiff-4.0.9/Makefile.in rename to external/tiff-4.1.0/Makefile.in index c9c0645f..625934a3 100644 --- a/external/tiff-4.0.9/Makefile.in +++ b/external/tiff-4.1.0/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -125,7 +125,7 @@ DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(dist_doc_DATA) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno -mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs +mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/libtiff/tif_config.h \ $(top_builddir)/libtiff/tiffconf.h CONFIG_CLEAN_FILES = libtiff-4.pc @@ -193,7 +193,7 @@ am__recursive_targets = \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ - cscope distdir dist dist-all distcheck + cscope distdir distdir-am dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is @@ -219,11 +219,9 @@ am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/libtiff-4.pc.in \ $(top_srcdir)/config/compile $(top_srcdir)/config/config.guess \ $(top_srcdir)/config/config.sub \ $(top_srcdir)/config/install-sh $(top_srcdir)/config/ltmain.sh \ - $(top_srcdir)/config/missing \ - $(top_srcdir)/config/mkinstalldirs ChangeLog README TODO \ - config/compile config/config.guess config/config.sub \ - config/depcomp config/install-sh config/ltmain.sh \ - config/missing config/mkinstalldirs + $(top_srcdir)/config/missing ChangeLog TODO config/compile \ + config/config.guess config/config.sub config/depcomp \ + config/install-sh config/ltmain.sh config/missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) @@ -419,8 +417,7 @@ ACLOCAL_AMFLAGS = -I m4 docfiles = \ COPYRIGHT \ ChangeLog \ - README \ - README.vms \ + README.md \ RELEASE-DATE \ TODO \ VERSION @@ -470,8 +467,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -642,7 +639,10 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ @@ -707,7 +707,7 @@ distdir: $(DISTFILES) ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir @@ -733,7 +733,7 @@ dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 - shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip @@ -750,7 +750,7 @@ dist dist-all: distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ @@ -760,7 +760,7 @@ distcheck: dist *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac diff --git a/external/tiff-4.0.9/Makefile.vc b/external/tiff-4.1.0/Makefile.vc similarity index 96% rename from external/tiff-4.0.9/Makefile.vc rename to external/tiff-4.1.0/Makefile.vc index 2d894c2b..6e66c730 100644 --- a/external/tiff-4.0.9/Makefile.vc +++ b/external/tiff-4.1.0/Makefile.vc @@ -1,4 +1,3 @@ -# $Id: Makefile.vc,v 1.7 2008/01/01 15:53:10 fwarmerdam Exp $ # # Copyright (C) 2004, Andrey Kiselev # diff --git a/external/tiff-4.0.9/README b/external/tiff-4.1.0/README.md similarity index 82% rename from external/tiff-4.0.9/README rename to external/tiff-4.1.0/README.md index 5f30f4ee..2573dab1 100644 --- a/external/tiff-4.0.9/README +++ b/external/tiff-4.1.0/README.md @@ -1,6 +1,3 @@ -$Header: /cvs/maptools/cvsroot/libtiff/README,v 1.7 2012-02-18 21:53:27 bfriesen Exp $ - - TIFF Software Distribution -------------------------- This file is just a placeholder; all the documentation is now in @@ -14,7 +11,7 @@ e.g. If you don't have an HTML viewer then you can read the HTML source or fetch a PostScript version of this documentation from the directory - ftp://ftp.remotesensing.org/pub/libtiff/ + http://download.osgeo.org/libtiff/ If you can't hack either of these options then basically what you want to do is: @@ -25,8 +22,21 @@ want to do is: # make install More information, email contacts, and mailing list information can be -found online at http://www.remotesensing.org/libtiff/. +found online at http://www.simplesystems.org/libtiff/ + +Source code repository +---------------------- + +[GitLab](https://gitlab.com/libtiff/libtiff) + +Bug database +------------ + +[GitLab issues](https://gitlab.com/libtiff/libtiff/issues) +Previously, the project used +[Bugzilla](http://bugzilla.maptools.org/buglist.cgi?product=libtiff). This +is no longer in use, and all remaining issues have been migrated to GitLab. Use and Copyright ----------------- diff --git a/external/tiff-4.1.0/RELEASE-DATE b/external/tiff-4.1.0/RELEASE-DATE new file mode 100644 index 00000000..ad4fa62a --- /dev/null +++ b/external/tiff-4.1.0/RELEASE-DATE @@ -0,0 +1 @@ +20191103 diff --git a/external/tiff-4.0.9/SConstruct b/external/tiff-4.1.0/SConstruct similarity index 99% rename from external/tiff-4.0.9/SConstruct rename to external/tiff-4.1.0/SConstruct index 682246ea..ee87fedf 100644 --- a/external/tiff-4.0.9/SConstruct +++ b/external/tiff-4.1.0/SConstruct @@ -1,5 +1,3 @@ -# $Id: SConstruct,v 1.4 2007/02/24 15:03:47 dron Exp $ - # Tag Image File Format (TIFF) Software # # Copyright (C) 2005, Andrey Kiselev diff --git a/external/tiff-4.0.9/TODO b/external/tiff-4.1.0/TODO similarity index 82% rename from external/tiff-4.0.9/TODO rename to external/tiff-4.1.0/TODO index 2ff86272..ea266aad 100644 --- a/external/tiff-4.0.9/TODO +++ b/external/tiff-4.1.0/TODO @@ -1,5 +1,3 @@ -# $Header: /cvs/libtiff/TODO,v 1.6 2002/10/10 05:28:43 warmerda Exp $ - o gif2tiff segaulting on selected images o tiffcmp read data by strip/tile instead of scanline o YCbCr sampling support diff --git a/external/tiff-4.1.0/VERSION b/external/tiff-4.1.0/VERSION new file mode 100644 index 00000000..ee74734a --- /dev/null +++ b/external/tiff-4.1.0/VERSION @@ -0,0 +1 @@ +4.1.0 diff --git a/external/tiff-4.0.9/aclocal.m4 b/external/tiff-4.1.0/aclocal.m4 similarity index 90% rename from external/tiff-4.0.9/aclocal.m4 rename to external/tiff-4.1.0/aclocal.m4 index ca19cbad..9299d04d 100644 --- a/external/tiff-4.0.9/aclocal.m4 +++ b/external/tiff-4.1.0/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.15 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2014 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -32,10 +32,10 @@ To do so, use the procedure documented by the package, typically 'autoreconf'.]) # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], -[am__api_version='1.15' +[am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.15], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.15])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2014 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -332,13 +332,12 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. - # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], @@ -346,49 +345,41 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac + # TODO: see whether this extra hack can be removed once we start + # requiring Autoconf 2.70 or later. + AS_CASE([$CONFIG_FILES], + [*\'*], [eval set x "$CONFIG_FILES"], + [*], [set x $CONFIG_FILES]) shift - for mf + # Used to flag and report bootstrapping failures. + am_rc=0 + for am_mf do # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named 'Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line + am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile which includes + # dependency-tracking related rules and includes. + # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`AS_DIRNAME("$mf")` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running 'make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "$am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`AS_DIRNAME(["$file"])` - AS_MKDIR_P([$dirpart/$fdir]) - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done + sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ + || continue + am_dirpart=`AS_DIRNAME(["$am_mf"])` + am_filepart=`AS_BASENAME(["$am_mf"])` + AM_RUN_LOG([cd "$am_dirpart" \ + && sed -e '/# am--include-marker/d' "$am_filepart" \ + | $MAKE -f - am--depfiles]) || am_rc=$? done + if test $am_rc -ne 0; then + AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments + for automatic dependency tracking. Try re-running configure with the + '--disable-dependency-tracking' option to at least be able to build + the package (albeit without support for automatic dependency tracking).]) + fi + AS_UNSET([am_dirpart]) + AS_UNSET([am_filepart]) + AS_UNSET([am_mf]) + AS_UNSET([am_rc]) + rm -f conftest-deps.mk } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS @@ -397,18 +388,17 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # -# This code is only required when automatic dependency tracking -# is enabled. FIXME. This creates each '.P' file that we will -# need in order to bootstrap the dependency handling code. +# This code is only required when automatic dependency tracking is enabled. +# This creates each '.Po' and '.Plo' makefile fragment that we'll need in +# order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], - [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) -]) + [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])]) # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -495,8 +485,8 @@ AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: -# -# +# +# AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. @@ -563,7 +553,7 @@ END Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation -that behaves properly: . +that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM @@ -605,7 +595,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -626,7 +616,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2014 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -648,7 +638,7 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -683,7 +673,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -691,49 +681,42 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # AM_MAKE_INCLUDE() # ----------------- -# Check to see how make treats includes. +# Check whether make has an 'include' directive that can support all +# the idioms we need for our automatic dependency tracking code. AC_DEFUN([AM_MAKE_INCLUDE], -[am_make=${MAKE-make} -cat > confinc << 'END' +[AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive]) +cat > confinc.mk << 'END' am__doit: - @echo this is the am__doit target + @echo this is the am__doit target >confinc.out .PHONY: am__doit END -# If we don't find an include directive, just comment out the code. -AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from 'make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi -AC_SUBST([am__include]) -AC_SUBST([am__quote]) -AC_MSG_RESULT([$_am_result]) -rm -f confinc confmf -]) +# BSD make does it like this. +echo '.include "confinc.mk" # ignored' > confmf.BSD +# Other make implementations (GNU, Solaris 10, AIX) do it like this. +echo 'include confinc.mk # ignored' > confmf.GNU +_am_result=no +for s in GNU BSD; do + AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out]) + AS_CASE([$?:`cat confinc.out 2>/dev/null`], + ['0:this is the am__doit target'], + [AS_CASE([$s], + [BSD], [am__include='.include' am__quote='"'], + [am__include='include' am__quote=''])]) + if test "$am__include" != "#"; then + _am_result="yes ($s style)" + break + fi +done +rm -f confinc.* confmf.* +AC_MSG_RESULT([${_am_result}]) +AC_SUBST([am__include])]) +AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2014 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -772,7 +755,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -801,7 +784,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -848,7 +831,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -867,7 +850,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -948,7 +931,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2014 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1008,7 +991,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1036,7 +1019,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2014 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1055,7 +1038,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2014 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/external/tiff-4.0.9/autogen.sh b/external/tiff-4.1.0/autogen.sh similarity index 100% rename from external/tiff-4.0.9/autogen.sh rename to external/tiff-4.1.0/autogen.sh diff --git a/external/tiff-4.0.9/build/CMakeLists.txt b/external/tiff-4.1.0/build/CMakeLists.txt similarity index 100% rename from external/tiff-4.0.9/build/CMakeLists.txt rename to external/tiff-4.1.0/build/CMakeLists.txt diff --git a/external/tiff-4.0.9/build/Makefile.am b/external/tiff-4.1.0/build/Makefile.am similarity index 100% rename from external/tiff-4.0.9/build/Makefile.am rename to external/tiff-4.1.0/build/Makefile.am diff --git a/external/tiff-4.0.9/build/Makefile.in b/external/tiff-4.1.0/build/Makefile.in similarity index 98% rename from external/tiff-4.0.9/build/Makefile.in rename to external/tiff-4.1.0/build/Makefile.in index 69d54d1f..92906d4d 100644 --- a/external/tiff-4.0.9/build/Makefile.in +++ b/external/tiff-4.1.0/build/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -122,7 +122,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs +mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/libtiff/tif_config.h \ $(top_builddir)/libtiff/tiffconf.h CONFIG_CLEAN_FILES = @@ -161,7 +161,7 @@ am__recursive_targets = \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ - distdir + distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is @@ -182,8 +182,7 @@ am__define_uniq_tagged_files = \ ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) -am__DIST_COMMON = $(srcdir)/Makefile.in \ - $(top_srcdir)/config/mkinstalldirs README +am__DIST_COMMON = $(srcdir)/Makefile.in README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ @@ -383,8 +382,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -501,7 +500,10 @@ cscopelist-am: $(am__tagged_files) distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ diff --git a/external/tiff-4.0.9/build/README b/external/tiff-4.1.0/build/README similarity index 100% rename from external/tiff-4.0.9/build/README rename to external/tiff-4.1.0/build/README diff --git a/external/tiff-4.0.9/config/compile b/external/tiff-4.1.0/config/compile similarity index 95% rename from external/tiff-4.0.9/config/compile rename to external/tiff-4.1.0/config/compile index a85b723c..99e50524 100755 --- a/external/tiff-4.0.9/config/compile +++ b/external/tiff-4.1.0/config/compile @@ -1,9 +1,9 @@ #! /bin/sh # Wrapper for compilers which do not understand '-c -o'. -scriptversion=2012-10-14.11; # UTC +scriptversion=2018-03-07.03; # UTC -# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify @@ -17,7 +17,7 @@ scriptversion=2012-10-14.11; # UTC # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program. If not, see . +# along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -255,7 +255,8 @@ EOF echo "compile $scriptversion" exit $? ;; - cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) + cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ + icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac @@ -339,9 +340,9 @@ exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" +# time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: diff --git a/external/tiff-4.0.9/config/config.guess b/external/tiff-4.1.0/config/config.guess similarity index 72% rename from external/tiff-4.0.9/config/config.guess rename to external/tiff-4.1.0/config/config.guess index ca2a03ca..6c32c864 100755 --- a/external/tiff-4.0.9/config/config.guess +++ b/external/tiff-4.1.0/config/config.guess @@ -1,14 +1,12 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 -# Free Software Foundation, Inc. +# Copyright 1992-2014 Free Software Foundation, Inc. -timestamp='2008-01-08' +timestamp='2014-11-04' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or +# the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but @@ -17,26 +15,22 @@ timestamp='2008-01-08' # General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. +# along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Originally written by Per Bothner . -# Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). +# +# Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # -# This script attempts to guess a canonical system name similar to -# config.sub. If it succeeds, it prints the system name on stdout, and -# exits with 0. Otherwise, it exits with 1. +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # -# The plan is that this can be called by configure scripts if you -# don't specify an explicit build system type. +# Please send patches to . + me=`echo "$0" | sed -e 's,.*/,,'` @@ -56,8 +50,7 @@ version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, -2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +Copyright 1992-2014 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -139,12 +132,33 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown +case "${UNAME_SYSTEM}" in +Linux|GNU|GNU/*) + # If the system lacks a compiler, then just pick glibc. + # We could probably try harder. + LIBC=gnu + + eval $set_cc_for_build + cat <<-EOF > $dummy.c + #include + #if defined(__UCLIBC__) + LIBC=uclibc + #elif defined(__dietlibc__) + LIBC=dietlibc + #else + LIBC=gnu + #endif + EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` + ;; +esac + # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or - # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward @@ -170,7 +184,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep __ELF__ >/dev/null + | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? @@ -180,7 +194,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in fi ;; *) - os=netbsd + os=netbsd ;; esac # The OS release @@ -201,6 +215,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; + *:Bitrig:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} + exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} @@ -223,7 +241,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on @@ -269,7 +287,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - exit ;; + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + exitcode=$? + trap '' 0 + exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead @@ -295,12 +316,12 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in echo s390-ibm-zvmoe exit ;; *:OS400:*:*) - echo powerpc-ibm-os400 + echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; - arm:riscos:*:*|arm:RISCOS:*:*) + arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) @@ -324,14 +345,33 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux${UNAME_RELEASE} + exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize @@ -375,23 +415,23 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} + echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} - exit ;; + exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} + echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit ;; + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit ;; + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit ;; + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; @@ -461,8 +501,8 @@ EOF echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ @@ -475,7 +515,7 @@ EOF else echo i586-dg-dgux${UNAME_RELEASE} fi - exit ;; + exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; @@ -532,15 +572,16 @@ EOF echo rs6000-ibm-aix3.2 fi exit ;; - *:AIX:*:[456]) + *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` + if [ -x /usr/bin/lslpp ] ; then + IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | + awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi @@ -575,52 +616,52 @@ EOF 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 - 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 - esac ;; - esac + esac ;; + esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + sed 's/^ //' << EOF >$dummy.c - #define _HPUX_SOURCE - #include - #include + #define _HPUX_SOURCE + #include + #include - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa @@ -640,7 +681,7 @@ EOF # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | - grep __LP64__ >/dev/null + grep -q __LP64__ then HP_ARCH="hppa2.0w" else @@ -711,22 +752,22 @@ EOF exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd - exit ;; + exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi - exit ;; + exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd - exit ;; + exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd - exit ;; + exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd - exit ;; + exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; @@ -750,14 +791,14 @@ EOF exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} @@ -769,34 +810,39 @@ EOF echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) - case ${UNAME_MACHINE} in - pc98) - echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + UNAME_PROCESSOR=`/usr/bin/uname -p` + case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; + *:MINGW64*:*) + echo ${UNAME_MACHINE}-pc-mingw64 + exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; + *:MSYS*:*) + echo ${UNAME_MACHINE}-pc-msys + exit ;; i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; - *:Interix*:[3456]*) - case ${UNAME_MACHINE} in + *:Interix*:*) + case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; - EM64T | authenticamd) + authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) @@ -806,6 +852,9 @@ EOF [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we @@ -826,210 +875,157 @@ EOF exit ;; *:GNU:*:*) # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; + aarch64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + aarch64_be:Linux:*:*) + UNAME_MACHINE=aarch64_be + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC="gnulibc1" ; fi + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + arc:Linux:*:* | arceb:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else - echo ${UNAME_MACHINE}-unknown-linux-gnueabi + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi + else + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf + fi fi exit ;; avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) - echo cris-axis-linux-gnu + echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) - echo crisv32-axis-linux-gnu + echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; frv:Linux:*:*) - echo frv-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + hexagon:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + i*86:Linux:*:*) + echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; - mips:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef mips - #undef mipsel - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mipsel - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips - #else - CPU= - #endif - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^CPU/{ - s: ::g - p - }'`" - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - mips64:Linux:*:*) + mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU - #undef mips64 - #undef mips64el + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mips64el + CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips64 + CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^CPU/{ - s: ::g - p - }'`" - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; - or32:Linux:*:*) - echo or32-unknown-linux-gnu + openrisc*:Linux:*:*) + echo or1k-unknown-linux-${LIBC} exit ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu + or32:Linux:*:* | or1k*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu + padre:Linux:*:*) + echo sparc-unknown-linux-${LIBC} exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - EV68*) UNAME_MACHINE=alphaev68 ;; - esac - objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null - if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-gnu ;; - PA8*) echo hppa2.0-unknown-linux-gnu ;; - *) echo hppa-unknown-linux-gnu ;; + PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; + PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; + *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-${LIBC} + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-${LIBC} + exit ;; + ppc64le:Linux:*:*) + echo powerpc64le-unknown-linux-${LIBC} + exit ;; + ppcle:Linux:*:*) + echo powerpcle-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux + echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + tile*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-gnu + echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) - echo x86_64-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; - i*86:Linux:*:*) - # The BFD linker knows what the default object file format is, so - # first see if it will tell us. cd to the root directory to prevent - # problems with other programs or directories called `ld' in the path. - # Set LC_ALL=C to ensure ld outputs messages in English. - ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ - | sed -ne '/supported targets:/!d - s/[ ][ ]*/ /g - s/.*supported targets: *// - s/ .*// - p'` - case "$ld_supported_targets" in - elf32-i386) - TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" - ;; - a.out-i386-linux) - echo "${UNAME_MACHINE}-pc-linux-gnuaout" - exit ;; - coff-i386) - echo "${UNAME_MACHINE}-pc-linux-gnucoff" - exit ;; - "") - # Either a pre-BFD a.out linker (linux-gnuoldld) or - # one that does not give us useful --help. - echo "${UNAME_MACHINE}-pc-linux-gnuoldld" - exit ;; - esac - # Determine whether the default compiler is a.out or elf - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - #ifdef __ELF__ - # ifdef __GLIBC__ - # if __GLIBC__ >= 2 - LIBC=gnu - # else - LIBC=gnulibc1 - # endif - # else - LIBC=gnulibc1 - # endif - #else - #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) - LIBC=gnu - #else - LIBC=gnuaout - #endif - #endif - #ifdef __dietlibc__ - LIBC=dietlibc - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^LIBC/{ - s: ::g - p - }'`" - test x"${LIBC}" != x && { - echo "${UNAME_MACHINE}-pc-linux-${LIBC}" - exit - } - test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } - ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both @@ -1037,11 +1033,11 @@ EOF echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... - # I am not positive that other SVR4 systems won't match this, + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. + # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) @@ -1058,7 +1054,7 @@ EOF i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) @@ -1073,7 +1069,7 @@ EOF fi exit ;; i*86:*:5:[678]*) - # UnixWare 7.x, OpenUNIX and OpenServer 6. + # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; @@ -1101,10 +1097,13 @@ EOF exit ;; pc:*:*:*) # Left here for compatibility: - # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i386. - echo i386-pc-msdosdjgpp - exit ;; + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; @@ -1139,8 +1138,18 @@ EOF /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4; exit; } ;; + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; @@ -1153,7 +1162,7 @@ EOF rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) @@ -1173,10 +1182,10 @@ EOF echo ns32k-sni-sysv fi exit ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 - exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm @@ -1202,11 +1211,11 @@ EOF exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} + echo mips-nec-sysv${UNAME_RELEASE} else - echo mips-unknown-sysv${UNAME_RELEASE} + echo mips-unknown-sysv${UNAME_RELEASE} fi - exit ;; + exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; @@ -1216,6 +1225,12 @@ EOF BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + x86_64:Haiku:*:*) + echo x86_64-unknown-haiku + exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; @@ -1242,9 +1257,31 @@ EOF exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - case $UNAME_PROCESSOR in - unknown) UNAME_PROCESSOR=powerpc ;; - esac + eval $set_cc_for_build + if test "$UNAME_PROCESSOR" = unknown ; then + UNAME_PROCESSOR=powerpc + fi + if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi + fi + elif test "$UNAME_PROCESSOR" = i386 ; then + # Avoid executing cc on OS X 10.9, as it ships with a stub + # that puts up a graphical alert prompting to install + # developer tools. Any system running Mac OS X 10.7 or + # later (Darwin 11 and later) is required to have a 64-bit + # processor. This is not true of the ARM version of Darwin + # that Apple uses in portable devices. + UNAME_PROCESSOR=x86_64 + fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) @@ -1258,7 +1295,10 @@ EOF *:QNX:*:4*) echo i386-pc-qnx exit ;; - NSE-?:NONSTOP_KERNEL:*:*) + NEO-?:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk${UNAME_RELEASE} + exit ;; + NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) @@ -1303,13 +1343,13 @@ EOF echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} + echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) - UNAME_MACHINE=`(uname -p) 2>/dev/null` + UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; @@ -1324,158 +1364,13 @@ EOF i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; -esac - -#echo '(No uname command or uname output not recognized.)' 1>&2 -#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 - -eval $set_cc_for_build -cat >$dummy.c < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix\n"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - c34*) - echo c34-convex-bsd - exit ;; - c38*) - echo c38-convex-bsd + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros exit ;; - c4*) - echo c4-convex-bsd + x86_64:VMkernel:*:*) + echo ${UNAME_MACHINE}-unknown-esx exit ;; - esac -fi +esac cat >&2 <. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). -# Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. +# Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. @@ -72,8 +68,7 @@ Report bugs and patches to ." version="\ GNU config.sub ($timestamp) -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, -2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +Copyright 1992-2014 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -120,12 +115,18 @@ esac # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in - nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ - uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ + linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; + android-linux) + os=-linux-android + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown + ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] @@ -148,10 +149,13 @@ case $os in -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray) + -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; + -bluegene*) + os=-cnk + ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 @@ -166,10 +170,10 @@ case $os in os=-chorusos basic_machine=$1 ;; - -chorusrdb) - os=-chorusrdb + -chorusrdb) + os=-chorusrdb basic_machine=$1 - ;; + ;; -hiux*) os=-hiuxwe2 ;; @@ -214,6 +218,12 @@ case $os in -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; + -lynx*178) + os=-lynxos178 + ;; + -lynx*5) + os=-lynxos5 + ;; -lynx*) os=-lynxos ;; @@ -238,59 +248,90 @@ case $basic_machine in # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ + | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ - | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ + | arc | arceb \ + | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ + | avr | avr32 \ + | be32 | be64 \ | bfin \ - | c4x | clipper \ + | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ + | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ + | k1om \ + | le32 | le64 \ + | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | mcore | mep \ + | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ - | mips64vr | mips64vrel \ + | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ + | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ + | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ + | moxie \ | mt \ | msp430 \ - | nios | nios2 \ + | nds32 | nds32le | nds32be \ + | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ - | or32 \ + | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ + | riscv32 | riscv64 \ + | rl78 | rx \ | score \ - | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ - | spu | strongarm \ - | tahoe | thumb | tic4x | tic80 | tron \ - | v850 | v850e \ + | spu \ + | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ + | ubicom32 \ + | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ + | visium \ | we32k \ - | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ - | z8k) + | x86 | xc16x | xstormy16 | xtensa \ + | z8k | z80) basic_machine=$basic_machine-unknown ;; - m6811 | m68hc11 | m6812 | m68hc12) - # Motorola 68HC11/12. + c54x) + basic_machine=tic54x-unknown + ;; + c55x) + basic_machine=tic55x-unknown + ;; + c6x) + basic_machine=tic6x-unknown + ;; + leon|leon[3-9]) + basic_machine=sparc-$basic_machine + ;; + m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; @@ -300,6 +341,21 @@ case $basic_machine in basic_machine=mt-unknown ;; + strongarm | thumb | xscale) + basic_machine=arm-unknown + ;; + xgate) + basic_machine=$basic_machine-unknown + os=-none + ;; + xscaleeb) + basic_machine=armeb-unknown + ;; + + xscaleel) + basic_machine=armel-unknown + ;; + # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. @@ -314,64 +370,83 @@ case $basic_machine in # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ + | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ + | be32-* | be64-* \ | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ - | clipper-* | craynv-* | cydra-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* \ + | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ + | k1om-* \ + | le32-* | le64-* \ + | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ + | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ - | mips64vr-* | mips64vrel-* \ + | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ - | nios-* | nios2-* \ + | nds32-* | nds32le-* | nds32be-* \ + | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ + | open8-* \ + | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ - | romp-* | rs6000-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | rl78-* | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ - | tahoe-* | thumb-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ + | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tile*-* \ | tron-* \ - | v850-* | v850e-* | vax-* \ + | ubicom32-* \ + | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ + | vax-* \ + | visium-* \ | we32k-* \ - | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ - | z8k-*) + | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) @@ -393,7 +468,7 @@ case $basic_machine in basic_machine=a29k-amd os=-udi ;; - abacus) + abacus) basic_machine=abacus-unknown ;; adobe68k) @@ -439,6 +514,10 @@ case $basic_machine in basic_machine=m68k-apollo os=-bsd ;; + aros) + basic_machine=i386-pc + os=-aros + ;; aux) basic_machine=m68k-apple os=-aux @@ -455,10 +534,27 @@ case $basic_machine in basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c54x-*) + basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c55x-*) + basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c6x-*) + basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; c90) basic_machine=c90-cray os=-unicos ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; convex-c1) basic_machine=c1-convex os=-bsd @@ -487,7 +583,7 @@ case $basic_machine in basic_machine=craynv-cray os=-unicosmp ;; - cr16) + cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; @@ -526,6 +622,10 @@ case $basic_machine in basic_machine=m88k-motorola os=-sysv3 ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp @@ -641,7 +741,6 @@ case $basic_machine in i370-ibm* | ibm*) basic_machine=i370-ibm ;; -# I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 @@ -680,6 +779,9 @@ case $basic_machine in basic_machine=m68k-isi os=-sysv ;; + leon-*|leon[3-9]-*) + basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` + ;; m68knommu) basic_machine=m68k-unknown os=-linux @@ -699,8 +801,15 @@ case $basic_machine in basic_machine=ns32k-utek os=-sysv ;; + microblaze*) + basic_machine=microblaze-xilinx + ;; + mingw64) + basic_machine=x86_64-pc + os=-mingw64 + ;; mingw32) - basic_machine=i386-pc + basic_machine=i686-pc os=-mingw32 ;; mingw32ce) @@ -728,6 +837,10 @@ case $basic_machine in basic_machine=powerpc-unknown os=-morphos ;; + moxiebox) + basic_machine=moxie-unknown + os=-moxiebox + ;; msdos) basic_machine=i386-pc os=-msdos @@ -735,10 +848,18 @@ case $basic_machine in ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; + msys) + basic_machine=i686-pc + os=-msys + ;; mvs) basic_machine=i370-ibm os=-mvs ;; + nacl) + basic_machine=le32-unknown + os=-nacl + ;; ncr3000) basic_machine=i486-ncr os=-sysv4 @@ -803,6 +924,12 @@ case $basic_machine in np1) basic_machine=np1-gould ;; + neo-tandem) + basic_machine=neo-tandem + ;; + nse-tandem) + basic_machine=nse-tandem + ;; nsr-tandem) basic_machine=nsr-tandem ;; @@ -885,9 +1012,10 @@ case $basic_machine in ;; power) basic_machine=power-ibm ;; - ppc) basic_machine=powerpc-unknown + ppc | ppcbe) basic_machine=powerpc-unknown ;; - ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ppc-* | ppcbe-*) + basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown @@ -912,7 +1040,11 @@ case $basic_machine in basic_machine=i586-unknown os=-pw32 ;; - rdos) + rdos | rdos64) + basic_machine=x86_64-pc + os=-rdos + ;; + rdos32) basic_machine=i386-pc os=-rdos ;; @@ -981,6 +1113,9 @@ case $basic_machine in basic_machine=i860-stratus os=-sysv4 ;; + strongarm-* | thumb-*) + basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; sun2) basic_machine=m68000-sun ;; @@ -1037,20 +1172,8 @@ case $basic_machine in basic_machine=t90-cray os=-unicos ;; - tic54x | c54x*) - basic_machine=tic54x-unknown - os=-coff - ;; - tic55x | c55x*) - basic_machine=tic55x-unknown - os=-coff - ;; - tic6x | c6x*) - basic_machine=tic6x-unknown - os=-coff - ;; tile*) - basic_machine=tile-unknown + basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) @@ -1120,6 +1243,9 @@ case $basic_machine in xps | xps100) basic_machine=xps100-honeywell ;; + xscale-* | xscalee[bl]-*) + basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` + ;; ymp) basic_machine=ymp-cray os=-unicos @@ -1128,6 +1254,10 @@ case $basic_machine in basic_machine=z8k-unknown os=-sim ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; none) basic_machine=none-none os=-none @@ -1166,7 +1296,7 @@ case $basic_machine in we32k) basic_machine=we32k-att ;; - sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) @@ -1213,9 +1343,12 @@ esac if [ x"$os" != x"" ] then case $os in - # First match some system type aliases - # that might get confused with valid system types. + # First match some system type aliases + # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. + -auroraux) + os=-auroraux + ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; @@ -1236,29 +1369,31 @@ case $os in # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ + | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* \ + | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ - | -openbsd* | -solidbsd* \ + | -bitrig* | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* \ - | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* \ + | -chorusos* | -chorusrdb* | -cegcc* \ + | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ + | -linux-newlib* | -linux-musl* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops*) + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) @@ -1297,7 +1432,7 @@ case $os in -opened*) os=-openedition ;; - -os400*) + -os400*) os=-os400 ;; -wince*) @@ -1346,7 +1481,7 @@ case $os in -sinix*) os=-sysv4 ;; - -tpf*) + -tpf*) os=-tpf ;; -triton*) @@ -1382,12 +1517,14 @@ case $os in -aros*) os=-aros ;; - -kaos*) - os=-kaos - ;; -zvmoe) os=-zvmoe ;; + -dicos*) + os=-dicos + ;; + -nacl*) + ;; -none) ;; *) @@ -1410,10 +1547,10 @@ else # system, and we'll never get to this point. case $basic_machine in - score-*) + score-*) os=-elf ;; - spu-*) + spu-*) os=-elf ;; *-acorn) @@ -1425,8 +1562,23 @@ case $basic_machine in arm*-semi) os=-aout ;; - c4x-* | tic4x-*) - os=-coff + c4x-* | tic4x-*) + os=-coff + ;; + c8051-*) + os=-elf + ;; + hexagon-*) + os=-elf + ;; + tic54x-*) + os=-coff + ;; + tic55x-*) + os=-coff + ;; + tic6x-*) + os=-coff ;; # This must come before the *-dec entry. pdp10-*) @@ -1446,14 +1598,11 @@ case $basic_machine in ;; m68000-sun) os=-sunos3 - # This also exists in the configure program, but was not the - # default. - # os=-sunos4 ;; m68*-cisco) os=-aout ;; - mep-*) + mep-*) os=-elf ;; mips*-cisco) @@ -1480,7 +1629,7 @@ case $basic_machine in *-ibm) os=-aix ;; - *-knuth) + *-knuth) os=-mmixware ;; *-wec) @@ -1585,7 +1734,7 @@ case $basic_machine in -sunos*) vendor=sun ;; - -aix*) + -cnk*|-aix*) vendor=ibm ;; -beos*) diff --git a/external/tiff-4.0.9/config/depcomp b/external/tiff-4.1.0/config/depcomp similarity index 98% rename from external/tiff-4.0.9/config/depcomp rename to external/tiff-4.1.0/config/depcomp index fc98710e..65cbf709 100755 --- a/external/tiff-4.0.9/config/depcomp +++ b/external/tiff-4.1.0/config/depcomp @@ -1,9 +1,9 @@ #! /bin/sh # depcomp - compile a program generating dependencies as side-effects -scriptversion=2013-05-30.07; # UTC +scriptversion=2018-03-07.03; # UTC -# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ scriptversion=2013-05-30.07; # UTC # GNU General Public License for more details. # You should have received a copy of the GNU General Public License -# along with this program. If not, see . +# along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -783,9 +783,9 @@ exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" +# time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: diff --git a/external/tiff-4.1.0/config/install-sh b/external/tiff-4.1.0/config/install-sh new file mode 100755 index 00000000..0b0fdcbb --- /dev/null +++ b/external/tiff-4.1.0/config/install-sh @@ -0,0 +1,501 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2013-12-25.23; # UTC + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# 'make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. + +tab=' ' +nl=' +' +IFS=" $tab$nl" + +# Set DOITPROG to "echo" to test this script. + +doit=${DOITPROG-} +doit_exec=${doit:-exec} + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog +rmcmd="$rmprog -f" +stripcmd= + +src= +dst= +dir_arg= +dst_arg= + +copy_on_change=false +is_target_a_directory=possibly + +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) ;; + + -C) copy_on_change=true;; + + -d) dir_arg=true;; + + -g) chgrpcmd="$chgrpprog $2" + shift;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + case $mode in + *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) + is_target_a_directory=always + dst_arg=$2 + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + shift;; + + -T) is_target_a_directory=never;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +# We allow the use of options -d and -T together, by making -d +# take the precedence; this is for compatibility with GNU install. + +if test -n "$dir_arg"; then + if test -n "$dst_arg"; then + echo "$0: target directory not allowed when installing a directory." >&2 + exit 1 + fi +fi + +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call 'install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + if test $# -gt 1 || test "$is_target_a_directory" = always; then + if test ! -d "$dst_arg"; then + echo "$0: $dst_arg: Is not a directory." >&2 + exit 1 + fi + fi +fi + +if test -z "$dir_arg"; then + do_exit='(exit $ret); exit $ret' + trap "ret=129; $do_exit" 1 + trap "ret=130; $do_exit" 2 + trap "ret=141; $do_exit" 13 + trap "ret=143; $do_exit" 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names problematic for 'test' and other utilities. + case $src in + -* | [=\(\)!]) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + dst=$dst_arg + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test "$is_target_a_directory" = never; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + dstdir=`dirname "$dst"` + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + [-=\(\)!]*) prefix='./';; + *) prefix='';; + esac + + oIFS=$IFS + IFS=/ + set -f + set fnord $dstdir + shift + set +f + IFS=$oIFS + + prefixes= + + for d + do + test X"$d" = X && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + set +f && + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/external/tiff-4.0.9/config/ltmain.sh b/external/tiff-4.1.0/config/ltmain.sh old mode 100755 new mode 100644 similarity index 99% rename from external/tiff-4.0.9/config/ltmain.sh rename to external/tiff-4.1.0/config/ltmain.sh index 147d758a..0f0a2da3 --- a/external/tiff-4.0.9/config/ltmain.sh +++ b/external/tiff-4.1.0/config/ltmain.sh @@ -31,7 +31,7 @@ PROGRAM=libtool PACKAGE=libtool -VERSION="2.4.6 Debian-2.4.6-0.1" +VERSION=2.4.6 package_revision=2.4.6 @@ -2073,7 +2073,7 @@ include the following information: autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` Report bugs to . -GNU libtool home page: . +GNU libtool home page: . General help using GNU software: ." exit 0 } @@ -7272,13 +7272,10 @@ func_mode_link () # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization - # -specs=* GCC specs files # -stdlib=* select c++ std lib with clang - # -fsanitize=* Clang/GCC memory and address sanitizer -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ - -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ - -specs=*|-fsanitize=*) + -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result func_append compile_command " $arg" @@ -7571,10 +7568,7 @@ func_mode_link () case $pass in dlopen) libs=$dlfiles ;; dlpreopen) libs=$dlprefiles ;; - link) - libs="$deplibs %DEPLIBS%" - test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" - ;; + link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test lib,dlpreopen = "$linkmode,$pass"; then @@ -7893,19 +7887,19 @@ func_mode_link () # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" - tmp_libs= - for deplib in $dependency_libs; do - deplibs="$deplib $deplibs" - if $opt_preserve_dup_deps; then - case "$tmp_libs " in - *" $deplib "*) func_append specialdeplibs " $deplib" ;; - esac - fi - func_append tmp_libs " $deplib" - done elif test prog != "$linkmode" && test lib != "$linkmode"; then func_fatal_error "'$lib' is not a convenience library" fi + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if $opt_preserve_dup_deps; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done continue fi # $pass = conv @@ -8829,9 +8823,6 @@ func_mode_link () revision=$number_minor lt_irix_increment=no ;; - *) - func_fatal_configuration "$modename: unknown library version type '$version_type'" - ;; esac ;; no) diff --git a/external/tiff-4.0.9/config/missing b/external/tiff-4.1.0/config/missing similarity index 94% rename from external/tiff-4.0.9/config/missing rename to external/tiff-4.1.0/config/missing index f62bbae3..625aeb11 100755 --- a/external/tiff-4.0.9/config/missing +++ b/external/tiff-4.1.0/config/missing @@ -1,9 +1,9 @@ #! /bin/sh # Common wrapper for a few potentially missing GNU programs. -scriptversion=2013-10-28.13; # UTC +scriptversion=2018-03-07.03; # UTC -# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify @@ -17,7 +17,7 @@ scriptversion=2013-10-28.13; # UTC # GNU General Public License for more details. # You should have received a copy of the GNU General Public License -# along with this program. If not, see . +# along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -101,9 +101,9 @@ else exit $st fi -perl_URL=http://www.perl.org/ -flex_URL=http://flex.sourceforge.net/ -gnu_software_URL=http://www.gnu.org/software +perl_URL=https://www.perl.org/ +flex_URL=https://github.com/westes/flex +gnu_software_URL=https://www.gnu.org/software program_details () { @@ -207,9 +207,9 @@ give_advice "$1" | sed -e '1s/^/WARNING: /' \ exit $st # Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" +# time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: diff --git a/external/tiff-4.0.9/config/test-driver b/external/tiff-4.1.0/config/test-driver similarity index 77% rename from external/tiff-4.0.9/config/test-driver rename to external/tiff-4.1.0/config/test-driver index aba4d1d2..8e575b01 100755 --- a/external/tiff-4.0.9/config/test-driver +++ b/external/tiff-4.1.0/config/test-driver @@ -1,9 +1,9 @@ #! /bin/sh -# test-driver - basic driver script for the 'parallel-tests' mode. +# test-driver - basic testsuite driver script. -scriptversion=2012-06-27.10; # UTC +scriptversion=2013-07-13.22; # UTC -# Copyright (C) 2011-2012 Free Software Foundation, Inc. +# Copyright (C) 2011-2014 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -44,13 +44,12 @@ print_usage () Usage: test-driver --test-name=NAME --log-file=PATH --trs-file=PATH [--expect-failure={yes|no}] [--color-tests={yes|no}] - [--enable-hard-errors={yes|no}] [--] TEST-SCRIPT + [--enable-hard-errors={yes|no}] [--] + TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS] The '--test-name', '--log-file' and '--trs-file' options are mandatory. END } -# TODO: better error handling in option parsing (in particular, ensure -# TODO: $log_file, $trs_file and $test_name are defined). test_name= # Used for reporting. log_file= # Where to save the output of the test script. trs_file= # Where to save the metadata of the test run. @@ -69,10 +68,23 @@ while test $# -gt 0; do --enable-hard-errors) enable_hard_errors=$2; shift;; --) shift; break;; -*) usage_error "invalid option: '$1'";; + *) break;; esac shift done +missing_opts= +test x"$test_name" = x && missing_opts="$missing_opts --test-name" +test x"$log_file" = x && missing_opts="$missing_opts --log-file" +test x"$trs_file" = x && missing_opts="$missing_opts --trs-file" +if test x"$missing_opts" != x; then + usage_error "the following mandatory options are missing:$missing_opts" +fi + +if test $# -eq 0; then + usage_error "missing argument" +fi + if test $color_tests = yes; then # Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'. red='' # Red. @@ -94,11 +106,14 @@ trap "st=143; $do_exit" 15 # Test script is run here. "$@" >$log_file 2>&1 estatus=$? + if test $enable_hard_errors = no && test $estatus -eq 99; then - estatus=1 + tweaked_estatus=1 +else + tweaked_estatus=$estatus fi -case $estatus:$expect_failure in +case $tweaked_estatus:$expect_failure in 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; 0:*) col=$grn res=PASS recheck=no gcopy=no;; 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; @@ -107,6 +122,12 @@ case $estatus:$expect_failure in *:*) col=$red res=FAIL recheck=yes gcopy=yes;; esac +# Report the test outcome and exit status in the logs, so that one can +# know whether the test passed or failed simply by looking at the '.log' +# file, without the need of also peaking into the corresponding '.trs' +# file (automake bug#11814). +echo "$res $test_name (exit status: $estatus)" >>$log_file + # Report outcome to console. echo "${col}${res}${std}: $test_name" diff --git a/external/tiff-4.0.9/configure b/external/tiff-4.1.0/configure similarity index 98% rename from external/tiff-4.0.9/configure rename to external/tiff-4.1.0/configure index 4bb7c05a..17597b79 100755 --- a/external/tiff-4.0.9/configure +++ b/external/tiff-4.1.0/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for LibTIFF Software 4.0.9. +# Generated by GNU Autoconf 2.69 for LibTIFF Software 4.1.0. # # Report bugs to . # @@ -590,8 +590,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='LibTIFF Software' PACKAGE_TARNAME='tiff' -PACKAGE_VERSION='4.0.9' -PACKAGE_STRING='LibTIFF Software 4.0.9' +PACKAGE_VERSION='4.1.0' +PACKAGE_STRING='LibTIFF Software 4.1.0' PACKAGE_BUGREPORT='tiff@lists.maptools.org' PACKAGE_URL='' @@ -656,6 +656,10 @@ X_CFLAGS XMKMF HAVE_CXX_FALSE HAVE_CXX_TRUE +HAVE_WEBP_FALSE +HAVE_WEBP_TRUE +HAVE_ZSTD_FALSE +HAVE_ZSTD_TRUE HAVE_LZMA_FALSE HAVE_LZMA_TRUE HAVE_JBIG_FALSE @@ -708,7 +712,6 @@ am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE -am__quote am__include DEPDIR OBJEXT @@ -800,7 +803,8 @@ PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR -SHELL' +SHELL +am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking @@ -840,6 +844,12 @@ with_jbig_lib_dir enable_lzma with_lzma_include_dir with_lzma_lib_dir +enable_zstd +with_zstd_include_dir +with_zstd_lib_dir +enable_webp +with_webp_include_dir +with_webp_lib_dir enable_jpeg12 with_jpeg12_include_dir with_jpeg12_lib @@ -1408,7 +1418,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures LibTIFF Software 4.0.9 to adapt to many kinds of systems. +\`configure' configures LibTIFF Software 4.1.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1482,7 +1492,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of LibTIFF Software 4.0.9:";; + short | recursive ) echo "Configuration of LibTIFF Software 4.1.0:";; esac cat <<\_ACEOF @@ -1528,6 +1538,10 @@ Optional Features: compression, enabled by default) --disable-lzma disable liblzma usage (required for LZMA2 compression, enabled by default) + --disable-zstd disable libzstd usage (required for zstd + compression, enabled by default) + --disable-webp disable libwebp usage (required for webp + compression, enabled by default) --enable-jpeg12 enable libjpeg 8/12bit dual mode --enable-cxx enable C++ stream API building (requires C++ compiler) @@ -1539,8 +1553,8 @@ Optional Features: mutiple strips of specified size to reduce memory usage) --enable-defer-strile-load - enable deferred strip/tile offset/size loading - (experimental) + enable deferred strip/tile offset/size loading (also + available at runtime with the 'D' flag of TIFFOpen() --enable-chunky-strip-read enable reading large strips in chunks for TIFFReadScanline() (experimental) @@ -1577,6 +1591,12 @@ Optional Packages: --with-lzma-include-dir=DIR location of liblzma headers --with-lzma-lib-dir=DIR location of liblzma library binary + --with-zstd-include-dir=DIR + location of libzstd headers + --with-zstd-lib-dir=DIR location of libzstd library binary + --with-webp-include-dir=DIR + location of libwebp headers + --with-webp-lib-dir=DIR location of libwebp library binary --with-jpeg12-include-dir=DIR location of libjpeg 12bit headers --with-jpeg12-lib=LIBRARY @@ -1668,7 +1688,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -LibTIFF Software configure 4.0.9 +LibTIFF Software configure 4.1.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2441,7 +2461,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by LibTIFF Software $as_me 4.0.9, which was +It was created by LibTIFF Software $as_me 4.1.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2898,7 +2918,7 @@ case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac -am__api_version='1.15' +am__api_version='1.16' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or @@ -3384,7 +3404,7 @@ fi # Define the identity of the package. PACKAGE='tiff' - VERSION='4.0.9' + VERSION='4.1.0' cat >>confdefs.h <<_ACEOF @@ -3414,8 +3434,8 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: -# -# +# +# mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The @@ -3551,7 +3571,7 @@ END Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation -that behaves properly: . +that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM @@ -3587,15 +3607,15 @@ fi LIBTIFF_MAJOR_VERSION=4 -LIBTIFF_MINOR_VERSION=0 -LIBTIFF_MICRO_VERSION=9 +LIBTIFF_MINOR_VERSION=1 +LIBTIFF_MICRO_VERSION=0 LIBTIFF_ALPHA_VERSION= LIBTIFF_VERSION=$LIBTIFF_MAJOR_VERSION.$LIBTIFF_MINOR_VERSION.$LIBTIFF_MICRO_VERSION$LIBTIFF_ALPHA_VERSION LIBTIFF_RELEASE_DATE=`date +"%Y%m%d"` -LIBTIFF_CURRENT=8 +LIBTIFF_CURRENT=10 LIBTIFF_REVISION=0 -LIBTIFF_AGE=3 +LIBTIFF_AGE=5 LIBTIFF_VERSION_INFO=$LIBTIFF_CURRENT:$LIBTIFF_REVISION:$LIBTIFF_AGE # This is a special hack for OpenBSD and MirOS systems. The dynamic linker @@ -4470,45 +4490,45 @@ DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" - -am_make=${MAKE-make} -cat > confinc << 'END' +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 +$as_echo_n "checking whether ${MAKE-make} supports the include directive... " >&6; } +cat > confinc.mk << 'END' am__doit: - @echo this is the am__doit target + @echo this is the am__doit target >confinc.out .PHONY: am__doit END -# If we don't find an include directive, just comment out the code. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 -$as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from 'make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD +# BSD make does it like this. +echo '.include "confinc.mk" # ignored' > confmf.BSD +# Other make implementations (GNU, Solaris 10, AIX) do it like this. +echo 'include confinc.mk # ignored' > confmf.GNU +_am_result=no +for s in GNU BSD; do + { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 + (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + case $?:`cat confinc.out 2>/dev/null` in #( + '0:this is the am__doit target') : + case $s in #( + BSD) : + am__include='.include' am__quote='"' ;; #( + *) : + am__include='include' am__quote='' ;; +esac ;; #( + *) : ;; - esac -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 -$as_echo "$_am_result" >&6; } -rm -f confinc confmf +esac + if test "$am__include" != "#"; then + _am_result="yes ($s style)" + break + fi +done +rm -f confinc.* confmf.* +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 +$as_echo "${_am_result}" >&6; } # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : @@ -6104,7 +6124,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; -netbsd* | netbsdelf*-gnu) +netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else @@ -10091,9 +10111,6 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie openbsd* | bitrig*) with_gnu_ld=no ;; - linux* | k*bsd*-gnu | gnu*) - link_all_deplibs=no - ;; esac ld_shlibs=yes @@ -10348,7 +10365,7 @@ _LT_EOF fi ;; - netbsd* | netbsdelf*-gnu) + netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= @@ -11018,7 +11035,6 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test yes = "$lt_cv_irix_exported_symbol"; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi - link_all_deplibs=no else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' @@ -11040,7 +11056,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; } esac ;; - netbsd* | netbsdelf*-gnu) + netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else @@ -12155,18 +12171,6 @@ fi dynamic_linker='GNU/Linux ld.so' ;; -netbsdelf*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='NetBSD ld.elf_so' - ;; - netbsd*) version_type=sunos need_lib_prefix=no @@ -15479,7 +15483,7 @@ lt_prog_compiler_static_CXX= ;; esac ;; - netbsd* | netbsdelf*-gnu) + netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise @@ -15854,9 +15858,6 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie ;; esac ;; - linux* | k*bsd*-gnu | gnu*) - link_all_deplibs_CXX=no - ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; @@ -16550,18 +16551,6 @@ fi dynamic_linker='GNU/Linux ld.so' ;; -netbsdelf*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='NetBSD ld.elf_so' - ;; - netbsd*) version_type=sunos need_lib_prefix=no @@ -16988,7 +16977,7 @@ fi ;; esac -for ac_header in assert.h fcntl.h io.h limits.h malloc.h search.h sys/time.h unistd.h +for ac_header in assert.h fcntl.h io.h search.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" @@ -17524,76 +17513,6 @@ _ACEOF -# Obtain size of an 'signed short' and define as SIZEOF_SIGNED_SHORT -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of signed short" >&5 -$as_echo_n "checking size of signed short... " >&6; } -if ${ac_cv_sizeof_signed_short+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (signed short))" "ac_cv_sizeof_signed_short" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_signed_short" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "cannot compute sizeof (signed short) -See \`config.log' for more details" "$LINENO" 5; } - else - ac_cv_sizeof_signed_short=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_signed_short" >&5 -$as_echo "$ac_cv_sizeof_signed_short" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_SIGNED_SHORT $ac_cv_sizeof_signed_short -_ACEOF - - - -# Obtain size of an 'unsigned short' and define as SIZEOF_UNSIGNED_SHORT -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned short" >&5 -$as_echo_n "checking size of unsigned short... " >&6; } -if ${ac_cv_sizeof_unsigned_short+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned short))" "ac_cv_sizeof_unsigned_short" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_unsigned_short" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "cannot compute sizeof (unsigned short) -See \`config.log' for more details" "$LINENO" 5; } - else - ac_cv_sizeof_unsigned_short=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_short" >&5 -$as_echo "$ac_cv_sizeof_unsigned_short" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_UNSIGNED_SHORT $ac_cv_sizeof_unsigned_short -_ACEOF - - - # Obtain size of an 'signed int' and define as SIZEOF_SIGNED_INT # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects @@ -18094,15 +18013,15 @@ _ACEOF $as_echo_n "checking for signed size type... " >&6; } SSIZE_T='unknown' SSIZE_FORMAT='unknown' -if test $ac_cv_sizeof_signed_int -eq $ac_cv_sizeof_unsigned_char_p +if test $ac_cv_sizeof_signed_int -eq $ac_cv_sizeof_size_t then SSIZE_T='signed int' SSIZE_FORMAT='"%d"' -elif test $ac_cv_sizeof_signed_long -eq $ac_cv_sizeof_unsigned_char_p +elif test $ac_cv_sizeof_signed_long -eq $ac_cv_sizeof_size_t then SSIZE_T='signed long' SSIZE_FORMAT='"%ld"' -elif test $ac_cv_sizeof_signed_long_long -eq $ac_cv_sizeof_unsigned_char_p +elif test $ac_cv_sizeof_signed_long_long -eq $ac_cv_sizeof_size_t then SSIZE_T='signed long long' case "${host_os}" in @@ -18158,52 +18077,7 @@ cat >>confdefs.h <<_ACEOF _ACEOF -ac_fn_c_check_type "$LINENO" "int8" "ac_cv_type_int8" " -#if HAVE_INTTYPES_H -# include -#endif - -" -if test "x$ac_cv_type_int8" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_INT8 1 -_ACEOF - - -fi -ac_fn_c_check_type "$LINENO" "int16" "ac_cv_type_int16" " -#if HAVE_INTTYPES_H -# include -#endif - -" -if test "x$ac_cv_type_int16" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_INT16 1 -_ACEOF - - -fi -ac_fn_c_check_type "$LINENO" "int32" "ac_cv_type_int32" " -#if HAVE_INTTYPES_H -# include -#endif - -" -if test "x$ac_cv_type_int32" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_INT32 1 -_ACEOF - - -fi - - -for ac_func in floor isascii memmove memset mmap pow setmode snprintf sqrt \ -strchr strrchr strstr strtol strtoul strtoull +for ac_func in mmap setmode snprintf do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" @@ -18258,6 +18132,34 @@ esac fi +ac_fn_c_check_func "$LINENO" "strtol" "ac_cv_func_strtol" +if test "x$ac_cv_func_strtol" = xyes; then : + $as_echo "#define HAVE_STRTOL 1" >>confdefs.h + +else + case " $LIBOBJS " in + *" strtol.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS strtol.$ac_objext" + ;; +esac + +fi + + +ac_fn_c_check_func "$LINENO" "strtoll" "ac_cv_func_strtoll" +if test "x$ac_cv_func_strtoll" = xyes; then : + $as_echo "#define HAVE_STRTOLL 1" >>confdefs.h + +else + case " $LIBOBJS " in + *" strtoll.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS strtoll.$ac_objext" + ;; +esac + +fi + + ac_fn_c_check_func "$LINENO" "strtoul" "ac_cv_func_strtoul" if test "x$ac_cv_func_strtoul" = xyes; then : $as_echo "#define HAVE_STRTOUL 1" >>confdefs.h @@ -19183,6 +19085,238 @@ fi +HAVE_ZSTD=no + +# Check whether --enable-zstd was given. +if test "${enable_zstd+set}" = set; then : + enableval=$enable_zstd; +fi + + +# Check whether --with-zstd-include-dir was given. +if test "${with_zstd_include_dir+set}" = set; then : + withval=$with_zstd_include_dir; +fi + + +# Check whether --with-zstd-lib-dir was given. +if test "${with_zstd_lib_dir+set}" = set; then : + withval=$with_zstd_lib_dir; +fi + + +if test "x$enable_zstd" != "xno" ; then + + if test "x$with_zstd_lib_dir" != "x" ; then + LDFLAGS="-L$with_zstd_lib_dir $LDFLAGS" + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ZSTD_decompressStream in -lzstd" >&5 +$as_echo_n "checking for ZSTD_decompressStream in -lzstd... " >&6; } +if ${ac_cv_lib_zstd_ZSTD_decompressStream+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lzstd $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char ZSTD_decompressStream (); +int +main () +{ +return ZSTD_decompressStream (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_zstd_ZSTD_decompressStream=yes +else + ac_cv_lib_zstd_ZSTD_decompressStream=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_zstd_ZSTD_decompressStream" >&5 +$as_echo "$ac_cv_lib_zstd_ZSTD_decompressStream" >&6; } +if test "x$ac_cv_lib_zstd_ZSTD_decompressStream" = xyes; then : + zstd_lib=yes +else + zstd_lib=no +fi + + if test "$zstd_lib" = "no" -a "x$with_zstd_lib_dir" != "x"; then + as_fn_error $? "zstd library not found at $with_zstd_lib_dir" "$LINENO" 5 + fi + + if test "x$with_zstd_include_dir" != "x" ; then + CPPFLAGS="-I$with_zstd_include_dir $CPPFLAGS" + fi + ac_fn_c_check_header_mongrel "$LINENO" "zstd.h" "ac_cv_header_zstd_h" "$ac_includes_default" +if test "x$ac_cv_header_zstd_h" = xyes; then : + zstd_h=yes +else + zstd_h=no +fi + + + if test "$zstd_h" = "no" -a "x$with_zstd_include_dir" != "x" ; then + as_fn_error $? "Libzstd headers not found at $with_zstd_include_dir" "$LINENO" 5 + fi + + if test "$zstd_lib" = "yes" -a "$zstd_h" = "yes" ; then + HAVE_ZSTD=yes + fi + +fi + +if test "$HAVE_ZSTD" = "yes" ; then + +$as_echo "#define ZSTD_SUPPORT 1" >>confdefs.h + + LIBS="-lzstd $LIBS" + tiff_libs_private="-lzstd ${tiff_libs_private}" + + if test "$HAVE_RPATH" = "yes" -a "x$with_zstd_lib_dir" != "x" ; then + LIBDIR="-R $with_zstd_lib_dir $LIBDIR" + fi + +fi + + if test "$HAVE_ZSTD" = 'yes'; then + HAVE_ZSTD_TRUE= + HAVE_ZSTD_FALSE='#' +else + HAVE_ZSTD_TRUE='#' + HAVE_ZSTD_FALSE= +fi + + + +HAVE_WEBP=no + +# Check whether --enable-webp was given. +if test "${enable_webp+set}" = set; then : + enableval=$enable_webp; +fi + + +# Check whether --with-webp-include-dir was given. +if test "${with_webp_include_dir+set}" = set; then : + withval=$with_webp_include_dir; +fi + + +# Check whether --with-webp-lib-dir was given. +if test "${with_webp_lib_dir+set}" = set; then : + withval=$with_webp_lib_dir; +fi + + +if test "x$enable_webp" != "xno" ; then + + if test "x$with_webp_lib_dir" != "x" ; then + LDFLAGS="-L$with_webp_lib_dir $LDFLAGS" + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for WebPDecode in -lwebp" >&5 +$as_echo_n "checking for WebPDecode in -lwebp... " >&6; } +if ${ac_cv_lib_webp_WebPDecode+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lwebp $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char WebPDecode (); +int +main () +{ +return WebPDecode (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_webp_WebPDecode=yes +else + ac_cv_lib_webp_WebPDecode=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_webp_WebPDecode" >&5 +$as_echo "$ac_cv_lib_webp_WebPDecode" >&6; } +if test "x$ac_cv_lib_webp_WebPDecode" = xyes; then : + webp_lib=yes +else + webp_lib=no +fi + + if test "$webp_lib" = "no" -a "x$with_webp_lib_dir" != "x"; then + as_fn_error $? "webp library not found at $with_webp_lib_dir" "$LINENO" 5 + fi + + if test "x$with_webp_include_dir" != "x" ; then + CPPFLAGS="-I$with_webp_include_dir $CPPFLAGS" + fi + ac_fn_c_check_header_mongrel "$LINENO" "webp/decode.h" "ac_cv_header_webp_decode_h" "$ac_includes_default" +if test "x$ac_cv_header_webp_decode_h" = xyes; then : + webp_h=yes +else + webp_h=no +fi + + + if test "$webp_h" = "no" -a "x$with_webp_include_dir" != "x" ; then + as_fn_error $? "Libwebp headers not found at $with_webp_include_dir" "$LINENO" 5 + fi + + if test "$webp_lib" = "yes" -a "$webp_h" = "yes" ; then + HAVE_WEBP=yes + fi + +fi + +if test "$HAVE_WEBP" = "yes" ; then + +$as_echo "#define WEBP_SUPPORT 1" >>confdefs.h + + LIBS="-lwebp $LIBS" + tiff_libs_private="-lwebp ${tiff_libs_private}" + + if test "$HAVE_RPATH" = "yes" -a "x$with_webp_lib_dir" != "x" ; then + LIBDIR="-R $with_webp_lib_dir $LIBDIR" + fi + +fi + + if test "$HAVE_WEBP" = 'yes'; then + HAVE_WEBP_TRUE= + HAVE_WEBP_FALSE='#' +else + HAVE_WEBP_TRUE='#' + HAVE_WEBP_FALSE= +fi + + + HAVE_JPEG12=no # Check whether --enable-jpeg12 was given. @@ -21122,6 +21256,14 @@ if test -z "${HAVE_LZMA_TRUE}" && test -z "${HAVE_LZMA_FALSE}"; then as_fn_error $? "conditional \"HAVE_LZMA\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${HAVE_ZSTD_TRUE}" && test -z "${HAVE_ZSTD_FALSE}"; then + as_fn_error $? "conditional \"HAVE_ZSTD\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_WEBP_TRUE}" && test -z "${HAVE_WEBP_FALSE}"; then + as_fn_error $? "conditional \"HAVE_WEBP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${HAVE_CXX_TRUE}" && test -z "${HAVE_CXX_FALSE}"; then as_fn_error $? "conditional \"HAVE_CXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -21531,7 +21673,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by LibTIFF Software $as_me 4.0.9, which was +This file was extended by LibTIFF Software $as_me 4.1.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -21597,7 +21739,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -LibTIFF Software config.status 4.0.9 +LibTIFF Software config.status 4.1.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" @@ -21716,7 +21858,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # -AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" +AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" # The HP-UX ksh and POSIX shell print the target directory to stdout @@ -22734,29 +22876,35 @@ $as_echo "$as_me: executing $ac_file commands" >&6;} # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac + # TODO: see whether this extra hack can be removed once we start + # requiring Autoconf 2.70 or later. + case $CONFIG_FILES in #( + *\'*) : + eval set x "$CONFIG_FILES" ;; #( + *) : + set x $CONFIG_FILES ;; #( + *) : + ;; +esac shift - for mf + # Used to flag and report bootstrapping failures. + am_rc=0 + for am_mf do # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named 'Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line + am_mf=`$as_echo "$am_mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile which includes + # dependency-tracking related rules and includes. + # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`$as_dirname -- "$mf" || -$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$mf" : 'X\(//\)[^/]' \| \ - X"$mf" : 'X\(//\)$' \| \ - X"$mf" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$mf" | + sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ + || continue + am_dirpart=`$as_dirname -- "$am_mf" || +$as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$am_mf" : 'X\(//\)[^/]' \| \ + X"$am_mf" : 'X\(//\)$' \| \ + X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -22774,53 +22922,48 @@ $as_echo X"$mf" | q } s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running 'make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "$am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`$as_dirname -- "$file" || -$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$file" : 'X\(//\)[^/]' \| \ - X"$file" : 'X\(//\)$' \| \ - X"$file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ + am_filepart=`$as_basename -- "$am_mf" || +$as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ + X"$am_mf" : 'X\(//\)$' \| \ + X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$am_mf" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } - /^X\(\/\/\)$/{ + /^X\/\(\/\/\)$/{ s//\1/ q } - /^X\(\/\).*/{ + /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` - as_dir=$dirpart/$fdir; as_fn_mkdir_p - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done + { echo "$as_me:$LINENO: cd "$am_dirpart" \ + && sed -e '/# am--include-marker/d' "$am_filepart" \ + | $MAKE -f - am--depfiles" >&5 + (cd "$am_dirpart" \ + && sed -e '/# am--include-marker/d' "$am_filepart" \ + | $MAKE -f - am--depfiles) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } || am_rc=$? done + if test $am_rc -ne 0; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "Something went wrong bootstrapping makefile fragments + for automatic dependency tracking. Try re-running configure with the + '--disable-dependency-tracking' option to at least be able to build + the package (albeit without support for automatic dependency tracking). +See \`config.log' for more details" "$LINENO" 5; } + fi + { am_dirpart=; unset am_dirpart;} + { am_filepart=; unset am_filepart;} + { am_mf=; unset am_mf;} + { am_rc=; unset am_rc;} + rm -f conftest-deps.mk } ;; "libtool":C) @@ -23604,6 +23747,8 @@ echo " Old JPEG support: ${HAVE_OJPEG}" echo " JPEG 8/12 bit dual mode: ${HAVE_JPEG12}" echo " ISO JBIG support: ${HAVE_JBIG}" echo " LZMA2 support: ${HAVE_LZMA}" +echo " ZSTD support: ${HAVE_ZSTD}" +echo " WEBP support: ${HAVE_WEBP}" echo "" echo " C++ support: ${HAVE_CXX}" echo "" diff --git a/external/tiff-4.0.9/configure.ac b/external/tiff-4.1.0/configure.ac similarity index 90% rename from external/tiff-4.0.9/configure.ac rename to external/tiff-4.1.0/configure.ac index 0dd32b75..eecb8e99 100644 --- a/external/tiff-4.0.9/configure.ac +++ b/external/tiff-4.1.0/configure.ac @@ -25,7 +25,7 @@ dnl OF THIS SOFTWARE. dnl Process this file with autoconf to produce a configure script. AC_PREREQ(2.64) -AC_INIT([LibTIFF Software],[4.0.9],[tiff@lists.maptools.org],[tiff]) +AC_INIT([LibTIFF Software],[4.1.0],[tiff@lists.maptools.org],[tiff]) AC_CONFIG_AUX_DIR(config) AC_CONFIG_MACRO_DIR(m4) AC_LANG(C) @@ -40,8 +40,8 @@ AM_MAINTAINER_MODE dnl Versioning. dnl Don't fill the ALPHA_VERSION field, if not applicable. LIBTIFF_MAJOR_VERSION=4 -LIBTIFF_MINOR_VERSION=0 -LIBTIFF_MICRO_VERSION=9 +LIBTIFF_MINOR_VERSION=1 +LIBTIFF_MICRO_VERSION=0 LIBTIFF_ALPHA_VERSION= LIBTIFF_VERSION=$LIBTIFF_MAJOR_VERSION.$LIBTIFF_MINOR_VERSION.$LIBTIFF_MICRO_VERSION$LIBTIFF_ALPHA_VERSION dnl This will be used with the 'make release' target @@ -76,9 +76,9 @@ dnl 5. If any interfaces have been added since the last public release, then dnl increment age. dnl 6. If any interfaces have been removed since the last public release, dnl then set age to 0. -LIBTIFF_CURRENT=8 +LIBTIFF_CURRENT=10 LIBTIFF_REVISION=0 -LIBTIFF_AGE=3 +LIBTIFF_AGE=5 LIBTIFF_VERSION_INFO=$LIBTIFF_CURRENT:$LIBTIFF_REVISION:$LIBTIFF_AGE # This is a special hack for OpenBSD and MirOS systems. The dynamic linker @@ -174,7 +174,7 @@ case "${host_os}" in esac dnl Checks for header files. -AC_CHECK_HEADERS([assert.h fcntl.h io.h limits.h malloc.h search.h sys/time.h unistd.h]) +AC_CHECK_HEADERS([assert.h fcntl.h io.h search.h unistd.h]) dnl Checks for typedefs, structures, and compiler characteristics. AC_C_CONST @@ -196,12 +196,6 @@ dnl --------------------------------------------------------------------------- dnl Compute sized types for current CPU and compiler options dnl --------------------------------------------------------------------------- -# Obtain size of an 'signed short' and define as SIZEOF_SIGNED_SHORT -AC_CHECK_SIZEOF(signed short) - -# Obtain size of an 'unsigned short' and define as SIZEOF_UNSIGNED_SHORT -AC_CHECK_SIZEOF(unsigned short) - # Obtain size of an 'signed int' and define as SIZEOF_SIGNED_INT AC_CHECK_SIZEOF(signed int) @@ -371,15 +365,15 @@ AC_DEFINE_UNQUOTED([TIFF_SIZE_FORMAT],[$SIZE_FORMAT],[Size type formatter]) AC_MSG_CHECKING(for signed size type) SSIZE_T='unknown' SSIZE_FORMAT='unknown' -if test $ac_cv_sizeof_signed_int -eq $ac_cv_sizeof_unsigned_char_p +if test $ac_cv_sizeof_signed_int -eq $ac_cv_sizeof_size_t then SSIZE_T='signed int' SSIZE_FORMAT='"%d"' -elif test $ac_cv_sizeof_signed_long -eq $ac_cv_sizeof_unsigned_char_p +elif test $ac_cv_sizeof_signed_long -eq $ac_cv_sizeof_size_t then SSIZE_T='signed long' SSIZE_FORMAT='"%ld"' -elif test $ac_cv_sizeof_signed_long_long -eq $ac_cv_sizeof_unsigned_char_p +elif test $ac_cv_sizeof_signed_long_long -eq $ac_cv_sizeof_size_t then SSIZE_T='signed long long' case "${host_os}" in @@ -412,22 +406,15 @@ AC_MSG_RESULT($PTRDIFF_T) AC_DEFINE_UNQUOTED(TIFF_PTRDIFF_T,$PTRDIFF_T,[Pointer difference type]) AC_DEFINE_UNQUOTED(TIFF_PTRDIFF_FORMAT,$PTRDIFF_FORMAT,[Pointer difference type formatter]) -dnl Some compilers (IBM VisualAge) has these types defined, so check it here: -AC_CHECK_TYPES([int8, int16, int32],,, -[ -#if HAVE_INTTYPES_H -# include -#endif -]) - dnl Checks for library functions. -AC_CHECK_FUNCS([floor isascii memmove memset mmap pow setmode snprintf sqrt \ -strchr strrchr strstr strtol strtoul strtoull]) +AC_CHECK_FUNCS([mmap setmode snprintf]) dnl Will use local replacements for unavailable functions AC_REPLACE_FUNCS(getopt) AC_REPLACE_FUNCS(snprintf) AC_REPLACE_FUNCS(strcasecmp) +AC_REPLACE_FUNCS(strtol) +AC_REPLACE_FUNCS(strtoll) AC_REPLACE_FUNCS(strtoul) AC_REPLACE_FUNCS(strtoull) AC_REPLACE_FUNCS(lfind) @@ -826,6 +813,114 @@ fi AM_CONDITIONAL(HAVE_LZMA, test "$HAVE_LZMA" = 'yes') +dnl --------------------------------------------------------------------------- +dnl Check for libzstd. +dnl --------------------------------------------------------------------------- + +HAVE_ZSTD=no + +AC_ARG_ENABLE(zstd, + AS_HELP_STRING([--disable-zstd], + [disable libzstd usage (required for zstd compression, enabled by default)]),,) +AC_ARG_WITH(zstd-include-dir, + AS_HELP_STRING([--with-zstd-include-dir=DIR], + [location of libzstd headers]),,) +AC_ARG_WITH(zstd-lib-dir, + AS_HELP_STRING([--with-zstd-lib-dir=DIR], + [location of libzstd library binary]),,) + +if test "x$enable_zstd" != "xno" ; then + + if test "x$with_zstd_lib_dir" != "x" ; then + LDFLAGS="-L$with_zstd_lib_dir $LDFLAGS" + fi + + AC_CHECK_LIB(zstd, ZSTD_decompressStream, [zstd_lib=yes], [zstd_lib=no],) + if test "$zstd_lib" = "no" -a "x$with_zstd_lib_dir" != "x"; then + AC_MSG_ERROR([zstd library not found at $with_zstd_lib_dir]) + fi + + if test "x$with_zstd_include_dir" != "x" ; then + CPPFLAGS="-I$with_zstd_include_dir $CPPFLAGS" + fi + AC_CHECK_HEADER(zstd.h, [zstd_h=yes], [zstd_h=no]) + if test "$zstd_h" = "no" -a "x$with_zstd_include_dir" != "x" ; then + AC_MSG_ERROR([Libzstd headers not found at $with_zstd_include_dir]) + fi + + if test "$zstd_lib" = "yes" -a "$zstd_h" = "yes" ; then + HAVE_ZSTD=yes + fi + +fi + +if test "$HAVE_ZSTD" = "yes" ; then + AC_DEFINE(ZSTD_SUPPORT,1,[Support zstd compression]) + LIBS="-lzstd $LIBS" + tiff_libs_private="-lzstd ${tiff_libs_private}" + + if test "$HAVE_RPATH" = "yes" -a "x$with_zstd_lib_dir" != "x" ; then + LIBDIR="-R $with_zstd_lib_dir $LIBDIR" + fi + +fi + +AM_CONDITIONAL(HAVE_ZSTD, test "$HAVE_ZSTD" = 'yes') + +dnl --------------------------------------------------------------------------- +dnl Check for libwebp. +dnl --------------------------------------------------------------------------- + +HAVE_WEBP=no + +AC_ARG_ENABLE(webp, + AS_HELP_STRING([--disable-webp], + [disable libwebp usage (required for webp compression, enabled by default)]),,) +AC_ARG_WITH(webp-include-dir, + AS_HELP_STRING([--with-webp-include-dir=DIR], + [location of libwebp headers]),,) +AC_ARG_WITH(webp-lib-dir, + AS_HELP_STRING([--with-webp-lib-dir=DIR], + [location of libwebp library binary]),,) + +if test "x$enable_webp" != "xno" ; then + + if test "x$with_webp_lib_dir" != "x" ; then + LDFLAGS="-L$with_webp_lib_dir $LDFLAGS" + fi + + AC_CHECK_LIB(webp, WebPDecode, [webp_lib=yes], [webp_lib=no],) + if test "$webp_lib" = "no" -a "x$with_webp_lib_dir" != "x"; then + AC_MSG_ERROR([webp library not found at $with_webp_lib_dir]) + fi + + if test "x$with_webp_include_dir" != "x" ; then + CPPFLAGS="-I$with_webp_include_dir $CPPFLAGS" + fi + AC_CHECK_HEADER(webp/decode.h, [webp_h=yes], [webp_h=no]) + if test "$webp_h" = "no" -a "x$with_webp_include_dir" != "x" ; then + AC_MSG_ERROR([Libwebp headers not found at $with_webp_include_dir]) + fi + + if test "$webp_lib" = "yes" -a "$webp_h" = "yes" ; then + HAVE_WEBP=yes + fi + +fi + +if test "$HAVE_WEBP" = "yes" ; then + AC_DEFINE(WEBP_SUPPORT,1,[Support webp compression]) + LIBS="-lwebp $LIBS" + tiff_libs_private="-lwebp ${tiff_libs_private}" + + if test "$HAVE_RPATH" = "yes" -a "x$with_webp_lib_dir" != "x" ; then + LIBDIR="-R $with_webp_lib_dir $LIBDIR" + fi + +fi + +AM_CONDITIONAL(HAVE_WEBP, test "$HAVE_WEBP" = 'yes') + dnl --------------------------------------------------------------------------- dnl Should 8/12 bit jpeg mode be enabled? dnl --------------------------------------------------------------------------- @@ -975,17 +1070,16 @@ fi dnl --------------------------------------------------------------------------- dnl Should we try to defer loading of strip/tile offsets and sizes to -dnl optimize directory scanning? These is an experimental feature for -dnl libtiff 4.0. +dnl optimize directory scanning? dnl --------------------------------------------------------------------------- AC_ARG_ENABLE(defer-strile-load, AS_HELP_STRING([--enable-defer-strile-load], - [enable deferred strip/tile offset/size loading (experimental)]), + [enable deferred strip/tile offset/size loading (also available at runtime with the 'D' flag of TIFFOpen()]), [HAVE_DEFER_STRILE_LOAD=$enableval], [HAVE_DEFER_STRILE_LOAD=no]) if test "$HAVE_DEFER_STRILE_LOAD" = "yes" ; then - AC_DEFINE(DEFER_STRILE_LOAD,1,[enable deferred strip/tile offset/size loading (experimental)]) + AC_DEFINE(DEFER_STRILE_LOAD,1,[enable deferred strip/tile offset/size loading]) fi @@ -1103,6 +1197,8 @@ LOC_MSG([ Old JPEG support: ${HAVE_OJPEG}]) LOC_MSG([ JPEG 8/12 bit dual mode: ${HAVE_JPEG12}]) LOC_MSG([ ISO JBIG support: ${HAVE_JBIG}]) LOC_MSG([ LZMA2 support: ${HAVE_LZMA}]) +LOC_MSG([ ZSTD support: ${HAVE_ZSTD}]) +LOC_MSG([ WEBP support: ${HAVE_WEBP}]) LOC_MSG() LOC_MSG([ C++ support: ${HAVE_CXX}]) LOC_MSG() diff --git a/external/tiff-4.0.9/configure.com b/external/tiff-4.1.0/configure.com similarity index 99% rename from external/tiff-4.0.9/configure.com rename to external/tiff-4.1.0/configure.com index 22675172..a3064425 100644 --- a/external/tiff-4.0.9/configure.com +++ b/external/tiff-4.1.0/configure.com @@ -1,4 +1,3 @@ -$! $Id: configure.com,v 1.3 2012-07-29 15:45:29 tgl Exp $ $! $! OpenVMS configure procedure for libtiff $! (c) Alexey Chupahin 22-NOV-2007 diff --git a/external/tiff-4.0.9/contrib/CMakeLists.txt b/external/tiff-4.1.0/contrib/CMakeLists.txt similarity index 100% rename from external/tiff-4.0.9/contrib/CMakeLists.txt rename to external/tiff-4.1.0/contrib/CMakeLists.txt diff --git a/external/tiff-4.0.9/contrib/Makefile.am b/external/tiff-4.1.0/contrib/Makefile.am similarity index 100% rename from external/tiff-4.0.9/contrib/Makefile.am rename to external/tiff-4.1.0/contrib/Makefile.am diff --git a/external/tiff-4.0.9/contrib/Makefile.in b/external/tiff-4.1.0/contrib/Makefile.in similarity index 98% rename from external/tiff-4.0.9/contrib/Makefile.in rename to external/tiff-4.1.0/contrib/Makefile.in index 1d1d0293..c4d5cd6e 100644 --- a/external/tiff-4.0.9/contrib/Makefile.in +++ b/external/tiff-4.1.0/contrib/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -121,7 +121,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs +mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/libtiff/tif_config.h \ $(top_builddir)/libtiff/tiffconf.h CONFIG_CLEAN_FILES = @@ -160,7 +160,7 @@ am__recursive_targets = \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ - distdir + distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is @@ -181,8 +181,7 @@ am__define_uniq_tagged_files = \ ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) -am__DIST_COMMON = $(srcdir)/Makefile.in \ - $(top_srcdir)/config/mkinstalldirs README +am__DIST_COMMON = $(srcdir)/Makefile.in README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ @@ -382,8 +381,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -500,7 +499,10 @@ cscopelist-am: $(am__tagged_files) distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ diff --git a/external/tiff-4.0.9/contrib/README b/external/tiff-4.1.0/contrib/README similarity index 100% rename from external/tiff-4.0.9/contrib/README rename to external/tiff-4.1.0/contrib/README diff --git a/external/tiff-4.0.9/contrib/addtiffo/CMakeLists.txt b/external/tiff-4.1.0/contrib/addtiffo/CMakeLists.txt similarity index 100% rename from external/tiff-4.0.9/contrib/addtiffo/CMakeLists.txt rename to external/tiff-4.1.0/contrib/addtiffo/CMakeLists.txt diff --git a/external/tiff-4.0.9/contrib/addtiffo/Makefile.am b/external/tiff-4.1.0/contrib/addtiffo/Makefile.am similarity index 100% rename from external/tiff-4.0.9/contrib/addtiffo/Makefile.am rename to external/tiff-4.1.0/contrib/addtiffo/Makefile.am diff --git a/external/tiff-4.0.9/contrib/addtiffo/Makefile.in b/external/tiff-4.1.0/contrib/addtiffo/Makefile.in similarity index 94% rename from external/tiff-4.0.9/contrib/addtiffo/Makefile.in rename to external/tiff-4.1.0/contrib/addtiffo/Makefile.in index 24c604e1..abe4c027 100644 --- a/external/tiff-4.0.9/contrib/addtiffo/Makefile.in +++ b/external/tiff-4.1.0/contrib/addtiffo/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -123,7 +123,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs +mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/libtiff/tif_config.h \ $(top_builddir)/libtiff/tiffconf.h CONFIG_CLEAN_FILES = @@ -151,7 +151,9 @@ am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/libtiff depcomp = $(SHELL) $(top_srcdir)/config/depcomp -am__depfiles_maybe = depfiles +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = ./$(DEPDIR)/addtiffo.Po \ + ./$(DEPDIR)/tif_overview.Po ./$(DEPDIR)/tif_ovrcache.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @@ -198,7 +200,7 @@ am__define_uniq_tagged_files = \ ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp \ - $(top_srcdir)/config/mkinstalldirs README + README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ @@ -378,8 +380,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -410,9 +412,15 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/addtiffo.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_overview.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_ovrcache.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/addtiffo.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_overview.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_ovrcache.Po@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @@ -493,7 +501,10 @@ cscopelist-am: $(am__tagged_files) distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -563,7 +574,9 @@ clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/addtiffo.Po + -rm -f ./$(DEPDIR)/tif_overview.Po + -rm -f ./$(DEPDIR)/tif_ovrcache.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags @@ -609,7 +622,9 @@ install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/addtiffo.Po + -rm -f ./$(DEPDIR)/tif_overview.Po + -rm -f ./$(DEPDIR)/tif_ovrcache.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic @@ -630,9 +645,9 @@ uninstall-am: .MAKE: install-am install-strip -.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \ - ctags-am distclean distclean-compile distclean-generic \ +.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ + clean-generic clean-libtool clean-noinstPROGRAMS cscopelist-am \ + ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ diff --git a/external/tiff-4.0.9/contrib/addtiffo/Makefile.vc b/external/tiff-4.1.0/contrib/addtiffo/Makefile.vc similarity index 100% rename from external/tiff-4.0.9/contrib/addtiffo/Makefile.vc rename to external/tiff-4.1.0/contrib/addtiffo/Makefile.vc diff --git a/external/tiff-4.0.9/contrib/addtiffo/README b/external/tiff-4.1.0/contrib/addtiffo/README similarity index 100% rename from external/tiff-4.0.9/contrib/addtiffo/README rename to external/tiff-4.1.0/contrib/addtiffo/README diff --git a/external/tiff-4.0.9/contrib/addtiffo/addtiffo.c b/external/tiff-4.1.0/contrib/addtiffo/addtiffo.c similarity index 99% rename from external/tiff-4.0.9/contrib/addtiffo/addtiffo.c rename to external/tiff-4.1.0/contrib/addtiffo/addtiffo.c index 7bc3f444..e1d70623 100644 --- a/external/tiff-4.0.9/contrib/addtiffo/addtiffo.c +++ b/external/tiff-4.1.0/contrib/addtiffo/addtiffo.c @@ -1,6 +1,4 @@ /****************************************************************************** - * $Id: addtiffo.c,v 1.8 2015-05-30 20:30:27 bfriesen Exp $ - * * Project: GeoTIFF Overview Builder * Purpose: Mainline for building overviews in a TIFF file. * Author: Frank Warmerdam, warmerdam@pobox.com diff --git a/external/tiff-4.0.9/contrib/addtiffo/tif_overview.c b/external/tiff-4.1.0/contrib/addtiffo/tif_overview.c similarity index 100% rename from external/tiff-4.0.9/contrib/addtiffo/tif_overview.c rename to external/tiff-4.1.0/contrib/addtiffo/tif_overview.c diff --git a/external/tiff-4.0.9/contrib/addtiffo/tif_ovrcache.c b/external/tiff-4.1.0/contrib/addtiffo/tif_ovrcache.c similarity index 99% rename from external/tiff-4.0.9/contrib/addtiffo/tif_ovrcache.c rename to external/tiff-4.1.0/contrib/addtiffo/tif_ovrcache.c index 171527b5..67a88120 100644 --- a/external/tiff-4.0.9/contrib/addtiffo/tif_ovrcache.c +++ b/external/tiff-4.1.0/contrib/addtiffo/tif_ovrcache.c @@ -1,6 +1,4 @@ /****************************************************************************** - * $Id: tif_ovrcache.c,v 1.11 2015-05-29 03:08:19 bfriesen Exp $ - * * Project: TIFF Overview Builder * Purpose: Library functions to maintain two rows of tiles or two strips * of data for output overviews as an output cache. diff --git a/external/tiff-4.0.9/contrib/addtiffo/tif_ovrcache.h b/external/tiff-4.1.0/contrib/addtiffo/tif_ovrcache.h similarity index 100% rename from external/tiff-4.0.9/contrib/addtiffo/tif_ovrcache.h rename to external/tiff-4.1.0/contrib/addtiffo/tif_ovrcache.h diff --git a/external/tiff-4.0.9/contrib/dbs/CMakeLists.txt b/external/tiff-4.1.0/contrib/dbs/CMakeLists.txt similarity index 100% rename from external/tiff-4.0.9/contrib/dbs/CMakeLists.txt rename to external/tiff-4.1.0/contrib/dbs/CMakeLists.txt diff --git a/external/tiff-4.0.9/contrib/dbs/Makefile.am b/external/tiff-4.1.0/contrib/dbs/Makefile.am similarity index 100% rename from external/tiff-4.0.9/contrib/dbs/Makefile.am rename to external/tiff-4.1.0/contrib/dbs/Makefile.am diff --git a/external/tiff-4.0.9/contrib/dbs/Makefile.in b/external/tiff-4.1.0/contrib/dbs/Makefile.in similarity index 95% rename from external/tiff-4.0.9/contrib/dbs/Makefile.in rename to external/tiff-4.1.0/contrib/dbs/Makefile.in index e3503e10..38a13830 100644 --- a/external/tiff-4.0.9/contrib/dbs/Makefile.in +++ b/external/tiff-4.1.0/contrib/dbs/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -124,7 +124,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs +mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/libtiff/tif_config.h \ $(top_builddir)/libtiff/tiffconf.h CONFIG_CLEAN_FILES = @@ -160,7 +160,10 @@ am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/libtiff depcomp = $(SHELL) $(top_srcdir)/config/depcomp -am__depfiles_maybe = depfiles +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = ./$(DEPDIR)/tiff-bi.Po \ + ./$(DEPDIR)/tiff-grayscale.Po ./$(DEPDIR)/tiff-palette.Po \ + ./$(DEPDIR)/tiff-rgb.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @@ -204,7 +207,7 @@ am__recursive_targets = \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ - distdir + distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is @@ -226,7 +229,7 @@ ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp \ - $(top_srcdir)/config/mkinstalldirs README + README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ @@ -437,8 +440,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -481,10 +484,16 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiff-bi.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiff-grayscale.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiff-palette.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiff-rgb.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiff-bi.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiff-grayscale.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiff-palette.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiff-rgb.Po@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @@ -612,7 +621,10 @@ cscopelist-am: $(am__tagged_files) distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -708,7 +720,10 @@ clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-recursive - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/tiff-bi.Po + -rm -f ./$(DEPDIR)/tiff-grayscale.Po + -rm -f ./$(DEPDIR)/tiff-palette.Po + -rm -f ./$(DEPDIR)/tiff-rgb.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags @@ -754,7 +769,10 @@ install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/tiff-bi.Po + -rm -f ./$(DEPDIR)/tiff-grayscale.Po + -rm -f ./$(DEPDIR)/tiff-palette.Po + -rm -f ./$(DEPDIR)/tiff-rgb.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic @@ -775,8 +793,8 @@ uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip -.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ - check-am clean clean-generic clean-libtool \ +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ + am--depfiles check check-am clean clean-generic clean-libtool \ clean-noinstPROGRAMS cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ diff --git a/external/tiff-4.0.9/contrib/dbs/README b/external/tiff-4.1.0/contrib/dbs/README similarity index 100% rename from external/tiff-4.0.9/contrib/dbs/README rename to external/tiff-4.1.0/contrib/dbs/README diff --git a/external/tiff-4.0.9/contrib/dbs/tiff-bi.c b/external/tiff-4.1.0/contrib/dbs/tiff-bi.c similarity index 97% rename from external/tiff-4.0.9/contrib/dbs/tiff-bi.c rename to external/tiff-4.1.0/contrib/dbs/tiff-bi.c index 33f05c7d..db0e8c89 100644 --- a/external/tiff-4.0.9/contrib/dbs/tiff-bi.c +++ b/external/tiff-4.1.0/contrib/dbs/tiff-bi.c @@ -1,5 +1,3 @@ -/* $Id: tiff-bi.c,v 1.3 2010-06-08 18:55:15 bfriesen Exp $ */ - /* * tiff-bi.c -- create a Class B (bilevel) TIFF file * diff --git a/external/tiff-4.0.9/contrib/dbs/tiff-grayscale.c b/external/tiff-4.1.0/contrib/dbs/tiff-grayscale.c similarity index 98% rename from external/tiff-4.0.9/contrib/dbs/tiff-grayscale.c rename to external/tiff-4.1.0/contrib/dbs/tiff-grayscale.c index 00b229f3..92c7b904 100644 --- a/external/tiff-4.0.9/contrib/dbs/tiff-grayscale.c +++ b/external/tiff-4.1.0/contrib/dbs/tiff-grayscale.c @@ -1,5 +1,3 @@ -/* $Id: tiff-grayscale.c,v 1.6 2010-06-08 18:55:15 bfriesen Exp $ */ - /* * tiff-grayscale.c -- create a Class G (grayscale) TIFF file * with a gray response curve in linear optical density diff --git a/external/tiff-4.0.9/contrib/dbs/tiff-palette.c b/external/tiff-4.1.0/contrib/dbs/tiff-palette.c similarity index 99% rename from external/tiff-4.0.9/contrib/dbs/tiff-palette.c rename to external/tiff-4.1.0/contrib/dbs/tiff-palette.c index 3d9e862b..7b3d433f 100644 --- a/external/tiff-4.0.9/contrib/dbs/tiff-palette.c +++ b/external/tiff-4.1.0/contrib/dbs/tiff-palette.c @@ -1,5 +1,3 @@ -/* $Id: tiff-palette.c,v 1.5 2010-06-08 18:55:15 bfriesen Exp $ */ - /* * tiff-palette.c -- create a Class P (palette) TIFF file * diff --git a/external/tiff-4.0.9/contrib/dbs/tiff-rgb.c b/external/tiff-4.1.0/contrib/dbs/tiff-rgb.c similarity index 99% rename from external/tiff-4.0.9/contrib/dbs/tiff-rgb.c rename to external/tiff-4.1.0/contrib/dbs/tiff-rgb.c index bf904990..d14ed005 100644 --- a/external/tiff-4.0.9/contrib/dbs/tiff-rgb.c +++ b/external/tiff-4.1.0/contrib/dbs/tiff-rgb.c @@ -1,5 +1,3 @@ -/* $Id: tiff-rgb.c,v 1.4 2010-06-08 18:55:15 bfriesen Exp $ */ - /* * tiff-rgb.c -- create a 24-bit Class R (rgb) TIFF file * diff --git a/external/tiff-4.0.9/contrib/dbs/xtiff/CMakeLists.txt b/external/tiff-4.1.0/contrib/dbs/xtiff/CMakeLists.txt similarity index 100% rename from external/tiff-4.0.9/contrib/dbs/xtiff/CMakeLists.txt rename to external/tiff-4.1.0/contrib/dbs/xtiff/CMakeLists.txt diff --git a/external/tiff-4.0.9/contrib/dbs/xtiff/Makefile.am b/external/tiff-4.1.0/contrib/dbs/xtiff/Makefile.am similarity index 100% rename from external/tiff-4.0.9/contrib/dbs/xtiff/Makefile.am rename to external/tiff-4.1.0/contrib/dbs/xtiff/Makefile.am diff --git a/external/tiff-4.0.9/contrib/dbs/xtiff/Makefile.in b/external/tiff-4.1.0/contrib/dbs/xtiff/Makefile.in similarity index 97% rename from external/tiff-4.0.9/contrib/dbs/xtiff/Makefile.in rename to external/tiff-4.1.0/contrib/dbs/xtiff/Makefile.in index 08993c44..61594863 100644 --- a/external/tiff-4.0.9/contrib/dbs/xtiff/Makefile.in +++ b/external/tiff-4.1.0/contrib/dbs/xtiff/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -124,7 +124,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs +mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/libtiff/tif_config.h \ $(top_builddir)/libtiff/tiffconf.h CONFIG_CLEAN_FILES = @@ -149,8 +149,7 @@ am__can_run_installinfo = \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -am__DIST_COMMON = $(srcdir)/Makefile.in \ - $(top_srcdir)/config/mkinstalldirs README +am__DIST_COMMON = $(srcdir)/Makefile.in README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ @@ -327,8 +326,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -352,7 +351,10 @@ ctags CTAGS: cscope cscopelist: -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ diff --git a/external/tiff-4.0.9/contrib/dbs/xtiff/README b/external/tiff-4.1.0/contrib/dbs/xtiff/README similarity index 100% rename from external/tiff-4.0.9/contrib/dbs/xtiff/README rename to external/tiff-4.1.0/contrib/dbs/xtiff/README diff --git a/external/tiff-4.0.9/contrib/dbs/xtiff/patchlevel.h b/external/tiff-4.1.0/contrib/dbs/xtiff/patchlevel.h similarity index 100% rename from external/tiff-4.0.9/contrib/dbs/xtiff/patchlevel.h rename to external/tiff-4.1.0/contrib/dbs/xtiff/patchlevel.h diff --git a/external/tiff-4.0.9/contrib/dbs/xtiff/xtiff.c b/external/tiff-4.1.0/contrib/dbs/xtiff/xtiff.c similarity index 99% rename from external/tiff-4.0.9/contrib/dbs/xtiff/xtiff.c rename to external/tiff-4.1.0/contrib/dbs/xtiff/xtiff.c index 97e4ffe2..bc10b670 100644 --- a/external/tiff-4.0.9/contrib/dbs/xtiff/xtiff.c +++ b/external/tiff-4.1.0/contrib/dbs/xtiff/xtiff.c @@ -1,6 +1,4 @@ /* - * $Id: xtiff.c,v 1.4 2013-05-02 14:44:29 tgl Exp $ - * * xtiff - view a TIFF file in an X window * * Dan Sears diff --git a/external/tiff-4.0.9/contrib/dbs/xtiff/xtifficon.h b/external/tiff-4.1.0/contrib/dbs/xtiff/xtifficon.h similarity index 100% rename from external/tiff-4.0.9/contrib/dbs/xtiff/xtifficon.h rename to external/tiff-4.1.0/contrib/dbs/xtiff/xtifficon.h diff --git a/external/tiff-4.0.9/contrib/iptcutil/CMakeLists.txt b/external/tiff-4.1.0/contrib/iptcutil/CMakeLists.txt similarity index 100% rename from external/tiff-4.0.9/contrib/iptcutil/CMakeLists.txt rename to external/tiff-4.1.0/contrib/iptcutil/CMakeLists.txt diff --git a/external/tiff-4.0.9/contrib/iptcutil/Makefile.am b/external/tiff-4.1.0/contrib/iptcutil/Makefile.am similarity index 100% rename from external/tiff-4.0.9/contrib/iptcutil/Makefile.am rename to external/tiff-4.1.0/contrib/iptcutil/Makefile.am diff --git a/external/tiff-4.0.9/contrib/iptcutil/Makefile.in b/external/tiff-4.1.0/contrib/iptcutil/Makefile.in similarity index 95% rename from external/tiff-4.0.9/contrib/iptcutil/Makefile.in rename to external/tiff-4.1.0/contrib/iptcutil/Makefile.in index 0ee5ad3c..790bb6c0 100644 --- a/external/tiff-4.0.9/contrib/iptcutil/Makefile.in +++ b/external/tiff-4.1.0/contrib/iptcutil/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -123,7 +123,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs +mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/libtiff/tif_config.h \ $(top_builddir)/libtiff/tiffconf.h CONFIG_CLEAN_FILES = @@ -150,7 +150,8 @@ am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/libtiff depcomp = $(SHELL) $(top_srcdir)/config/depcomp -am__depfiles_maybe = depfiles +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = ./$(DEPDIR)/iptcutil.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @@ -197,7 +198,7 @@ am__define_uniq_tagged_files = \ ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp \ - $(top_srcdir)/config/mkinstalldirs README + README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ @@ -378,8 +379,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -410,7 +411,13 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iptcutil.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iptcutil.Po@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @@ -491,7 +498,10 @@ cscopelist-am: $(am__tagged_files) distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -561,7 +571,7 @@ clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/iptcutil.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags @@ -607,7 +617,7 @@ install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/iptcutil.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic @@ -628,9 +638,9 @@ uninstall-am: .MAKE: install-am install-strip -.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \ - ctags-am distclean distclean-compile distclean-generic \ +.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ + clean-generic clean-libtool clean-noinstPROGRAMS cscopelist-am \ + ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ diff --git a/external/tiff-4.0.9/contrib/iptcutil/README b/external/tiff-4.1.0/contrib/iptcutil/README similarity index 100% rename from external/tiff-4.0.9/contrib/iptcutil/README rename to external/tiff-4.1.0/contrib/iptcutil/README diff --git a/external/tiff-4.0.9/contrib/iptcutil/iptcutil.c b/external/tiff-4.1.0/contrib/iptcutil/iptcutil.c similarity index 99% rename from external/tiff-4.0.9/contrib/iptcutil/iptcutil.c rename to external/tiff-4.1.0/contrib/iptcutil/iptcutil.c index c359df87..621716df 100644 --- a/external/tiff-4.0.9/contrib/iptcutil/iptcutil.c +++ b/external/tiff-4.1.0/contrib/iptcutil/iptcutil.c @@ -1,5 +1,3 @@ -/* $Id: iptcutil.c,v 1.11 2015-06-21 01:09:09 bfriesen Exp $ */ - #include "tif_config.h" #include @@ -784,7 +782,7 @@ int sindex(char ch,char *string) char *cp; for(cp=string;*cp;++cp) if(ch==*cp) - return (int)(cp-string); /* return postion of character */ + return (int)(cp-string); /* return position of character */ return -1; /* eol ... no match found */ } @@ -928,6 +926,7 @@ int tokenizer(unsigned inflag,char *token,int tokmax,char *line, { case IN_WHITE: _p_state=IN_TOKEN; /* switch states */ + /* Fall through */ case IN_TOKEN: /* these 2 are */ case IN_QUOTE: /* identical here */ diff --git a/external/tiff-4.0.9/contrib/iptcutil/test.iptc b/external/tiff-4.1.0/contrib/iptcutil/test.iptc similarity index 100% rename from external/tiff-4.0.9/contrib/iptcutil/test.iptc rename to external/tiff-4.1.0/contrib/iptcutil/test.iptc diff --git a/external/tiff-4.0.9/contrib/iptcutil/test.txt b/external/tiff-4.1.0/contrib/iptcutil/test.txt similarity index 100% rename from external/tiff-4.0.9/contrib/iptcutil/test.txt rename to external/tiff-4.1.0/contrib/iptcutil/test.txt diff --git a/external/tiff-4.0.9/contrib/mfs/CMakeLists.txt b/external/tiff-4.1.0/contrib/mfs/CMakeLists.txt similarity index 100% rename from external/tiff-4.0.9/contrib/mfs/CMakeLists.txt rename to external/tiff-4.1.0/contrib/mfs/CMakeLists.txt diff --git a/external/tiff-4.0.9/contrib/mfs/Makefile.am b/external/tiff-4.1.0/contrib/mfs/Makefile.am similarity index 100% rename from external/tiff-4.0.9/contrib/mfs/Makefile.am rename to external/tiff-4.1.0/contrib/mfs/Makefile.am diff --git a/external/tiff-4.0.9/contrib/mfs/Makefile.in b/external/tiff-4.1.0/contrib/mfs/Makefile.in similarity index 97% rename from external/tiff-4.0.9/contrib/mfs/Makefile.in rename to external/tiff-4.1.0/contrib/mfs/Makefile.in index 0a3b8406..201e700b 100644 --- a/external/tiff-4.0.9/contrib/mfs/Makefile.in +++ b/external/tiff-4.1.0/contrib/mfs/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -121,7 +121,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs +mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/libtiff/tif_config.h \ $(top_builddir)/libtiff/tiffconf.h CONFIG_CLEAN_FILES = @@ -146,8 +146,7 @@ am__can_run_installinfo = \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -am__DIST_COMMON = $(srcdir)/Makefile.in \ - $(top_srcdir)/config/mkinstalldirs README +am__DIST_COMMON = $(srcdir)/Makefile.in README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ @@ -322,8 +321,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -347,7 +346,10 @@ ctags CTAGS: cscope cscopelist: -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ diff --git a/external/tiff-4.0.9/contrib/mfs/README b/external/tiff-4.1.0/contrib/mfs/README similarity index 100% rename from external/tiff-4.0.9/contrib/mfs/README rename to external/tiff-4.1.0/contrib/mfs/README diff --git a/external/tiff-4.0.9/contrib/mfs/mfs_file.c b/external/tiff-4.1.0/contrib/mfs/mfs_file.c similarity index 100% rename from external/tiff-4.0.9/contrib/mfs/mfs_file.c rename to external/tiff-4.1.0/contrib/mfs/mfs_file.c diff --git a/external/tiff-4.0.9/contrib/pds/CMakeLists.txt b/external/tiff-4.1.0/contrib/pds/CMakeLists.txt similarity index 100% rename from external/tiff-4.0.9/contrib/pds/CMakeLists.txt rename to external/tiff-4.1.0/contrib/pds/CMakeLists.txt diff --git a/external/tiff-4.0.9/contrib/pds/Makefile.am b/external/tiff-4.1.0/contrib/pds/Makefile.am similarity index 100% rename from external/tiff-4.0.9/contrib/pds/Makefile.am rename to external/tiff-4.1.0/contrib/pds/Makefile.am diff --git a/external/tiff-4.0.9/contrib/pds/Makefile.in b/external/tiff-4.1.0/contrib/pds/Makefile.in similarity index 97% rename from external/tiff-4.0.9/contrib/pds/Makefile.in rename to external/tiff-4.1.0/contrib/pds/Makefile.in index 29e48aa3..e4c4651d 100644 --- a/external/tiff-4.0.9/contrib/pds/Makefile.in +++ b/external/tiff-4.1.0/contrib/pds/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -121,7 +121,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs +mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/libtiff/tif_config.h \ $(top_builddir)/libtiff/tiffconf.h CONFIG_CLEAN_FILES = @@ -146,8 +146,7 @@ am__can_run_installinfo = \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -am__DIST_COMMON = $(srcdir)/Makefile.in \ - $(top_srcdir)/config/mkinstalldirs README +am__DIST_COMMON = $(srcdir)/Makefile.in README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ @@ -325,8 +324,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -350,7 +349,10 @@ ctags CTAGS: cscope cscopelist: -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ diff --git a/external/tiff-4.0.9/contrib/pds/README b/external/tiff-4.1.0/contrib/pds/README similarity index 98% rename from external/tiff-4.0.9/contrib/pds/README rename to external/tiff-4.1.0/contrib/pds/README index b9abc6b3..a36b0549 100644 --- a/external/tiff-4.0.9/contrib/pds/README +++ b/external/tiff-4.1.0/contrib/pds/README @@ -30,7 +30,7 @@ Your ReadRGBA() routine works well for reading many different formats (TILED, STIP, compressed or not, etc.) of the most basic types of data (RGB, 8-bit greyscale, 8-bit colormapped) into an SGI-style data array, and serves as a good template for users with other needs. I used it as -an exmaple of how to make an iterator which, rather than fill a data +an example of how to make an iterator which, rather than fill a data array, calls an arbitrary user-supplied callback function for each "chunk" of data - that "chunk" might be a strip or a tile, and might have one sample-per-pixel or two, and might be 8-bit data or 16-bit or diff --git a/external/tiff-4.0.9/contrib/pds/tif_imageiter.c b/external/tiff-4.1.0/contrib/pds/tif_imageiter.c similarity index 98% rename from external/tiff-4.0.9/contrib/pds/tif_imageiter.c rename to external/tiff-4.1.0/contrib/pds/tif_imageiter.c index e025dc52..243cfd65 100644 --- a/external/tiff-4.0.9/contrib/pds/tif_imageiter.c +++ b/external/tiff-4.1.0/contrib/pds/tif_imageiter.c @@ -1,5 +1,3 @@ -/* $Header: /cvs/maptools/cvsroot/libtiff/contrib/pds/tif_imageiter.c,v 1.4 2010-06-08 18:55:15 bfriesen Exp $ */ - /* * Copyright (c) 1991-1996 Sam Leffler * Copyright (c) 1991-1996 Silicon Graphics, Inc. @@ -116,7 +114,7 @@ TIFFImageIterBegin(TIFFImageIter* img, TIFF* tif, int stop, char emsg[1024]) TIFFErrorExt(tif->tif_clientdata, TIFFFileName(tif), "Missing required \"Colormap\" tag"); return (0); } - /* fall thru... */ + /* fall through... */ case PHOTOMETRIC_MINISWHITE: case PHOTOMETRIC_MINISBLACK: /* This should work now so skip the check - BSR @@ -183,7 +181,7 @@ TIFFImageIterBegin(TIFFImageIter* img, TIFF* tif, int stop, char emsg[1024]) case ORIENTATION_LEFTBOT: /* XXX */ TIFFWarning(TIFFFileName(tif), "using bottom-left orientation"); img->orientation = ORIENTATION_BOTLEFT; - /* fall thru... */ + /* fall through... */ case ORIENTATION_BOTLEFT: break; case ORIENTATION_TOPRIGHT: @@ -192,7 +190,7 @@ TIFFImageIterBegin(TIFFImageIter* img, TIFF* tif, int stop, char emsg[1024]) default: TIFFWarning(TIFFFileName(tif), "using top-left orientation"); img->orientation = ORIENTATION_TOPLEFT; - /* fall thru... */ + /* fall through... */ case ORIENTATION_TOPLEFT: break; } diff --git a/external/tiff-4.0.9/contrib/pds/tif_imageiter.h b/external/tiff-4.1.0/contrib/pds/tif_imageiter.h similarity index 98% rename from external/tiff-4.0.9/contrib/pds/tif_imageiter.h rename to external/tiff-4.1.0/contrib/pds/tif_imageiter.h index e7dbe46c..4f4fd279 100644 --- a/external/tiff-4.0.9/contrib/pds/tif_imageiter.h +++ b/external/tiff-4.1.0/contrib/pds/tif_imageiter.h @@ -44,7 +44,7 @@ struct _TIFFImageIter { uint16 samplesperpixel; /* image samples/pixel */ uint16 orientation; /* image orientation */ uint16 photometric; /* image photometric interp */ - uint16* redcmap; /* colormap pallete */ + uint16* redcmap; /* colormap palette */ uint16* greencmap; uint16* bluecmap; /* get image data routine */ diff --git a/external/tiff-4.0.9/contrib/pds/tif_pdsdirread.c b/external/tiff-4.1.0/contrib/pds/tif_pdsdirread.c similarity index 99% rename from external/tiff-4.0.9/contrib/pds/tif_pdsdirread.c rename to external/tiff-4.1.0/contrib/pds/tif_pdsdirread.c index 37e513ae..cc6231da 100644 --- a/external/tiff-4.0.9/contrib/pds/tif_pdsdirread.c +++ b/external/tiff-4.1.0/contrib/pds/tif_pdsdirread.c @@ -1,5 +1,3 @@ -/* $Header: /cvs/maptools/cvsroot/libtiff/contrib/pds/tif_pdsdirread.c,v 1.4 2010-06-08 18:55:15 bfriesen Exp $ */ - /* * Copyright (c) 1988-1996 Sam Leffler * Copyright (c) 1991-1996 Silicon Graphics, Inc. @@ -194,7 +192,7 @@ TIFFReadPrivateDataSubDirectory(TIFF* tif, toff_t pdir_offset, * the fields to check type and tag information, * and to extract info required to size data * structures. A second pass is made afterwards - * to read in everthing not taken in the first pass. + * to read in everything not taken in the first pass. */ td = &tif->tif_dir; @@ -827,7 +825,7 @@ TIFFFetchNormalSubTag(TIFF* tif, TIFFDirEntry* dp, const TIFFFieldInfo* fip, break; } } - /* fall thru... */ + /* fall through... */ case TIFF_LONG: case TIFF_SLONG: { uint32 v32 = diff --git a/external/tiff-4.0.9/contrib/pds/tif_pdsdirwrite.c b/external/tiff-4.1.0/contrib/pds/tif_pdsdirwrite.c similarity index 99% rename from external/tiff-4.0.9/contrib/pds/tif_pdsdirwrite.c rename to external/tiff-4.1.0/contrib/pds/tif_pdsdirwrite.c index 3c632da6..a670bda1 100644 --- a/external/tiff-4.0.9/contrib/pds/tif_pdsdirwrite.c +++ b/external/tiff-4.1.0/contrib/pds/tif_pdsdirwrite.c @@ -1,5 +1,3 @@ -/* $Header: /cvs/maptools/cvsroot/libtiff/contrib/pds/tif_pdsdirwrite.c,v 1.4 2010-06-08 18:55:15 bfriesen Exp $ */ - /* When writing data to TIFF files, it is often useful to store application- specific data in a private TIFF directory so that the tags don't need to be registered and won't conflict with other people's user-defined tags. diff --git a/external/tiff-4.0.9/contrib/ras/CMakeLists.txt b/external/tiff-4.1.0/contrib/ras/CMakeLists.txt similarity index 100% rename from external/tiff-4.0.9/contrib/ras/CMakeLists.txt rename to external/tiff-4.1.0/contrib/ras/CMakeLists.txt diff --git a/external/tiff-4.0.9/contrib/ras/Makefile.am b/external/tiff-4.1.0/contrib/ras/Makefile.am similarity index 100% rename from external/tiff-4.0.9/contrib/ras/Makefile.am rename to external/tiff-4.1.0/contrib/ras/Makefile.am diff --git a/external/tiff-4.0.9/contrib/ras/Makefile.in b/external/tiff-4.1.0/contrib/ras/Makefile.in similarity index 97% rename from external/tiff-4.0.9/contrib/ras/Makefile.in rename to external/tiff-4.1.0/contrib/ras/Makefile.in index 67075acb..0028f091 100644 --- a/external/tiff-4.0.9/contrib/ras/Makefile.in +++ b/external/tiff-4.1.0/contrib/ras/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -121,7 +121,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs +mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/libtiff/tif_config.h \ $(top_builddir)/libtiff/tiffconf.h CONFIG_CLEAN_FILES = @@ -146,8 +146,7 @@ am__can_run_installinfo = \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -am__DIST_COMMON = $(srcdir)/Makefile.in \ - $(top_srcdir)/config/mkinstalldirs README +am__DIST_COMMON = $(srcdir)/Makefile.in README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ @@ -323,8 +322,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -348,7 +347,10 @@ ctags CTAGS: cscope cscopelist: -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ diff --git a/external/tiff-4.0.9/contrib/ras/README b/external/tiff-4.1.0/contrib/ras/README similarity index 100% rename from external/tiff-4.0.9/contrib/ras/README rename to external/tiff-4.1.0/contrib/ras/README diff --git a/external/tiff-4.0.9/contrib/ras/ras2tif.c b/external/tiff-4.1.0/contrib/ras/ras2tif.c similarity index 100% rename from external/tiff-4.0.9/contrib/ras/ras2tif.c rename to external/tiff-4.1.0/contrib/ras/ras2tif.c diff --git a/external/tiff-4.0.9/contrib/ras/tif2ras.c b/external/tiff-4.1.0/contrib/ras/tif2ras.c similarity index 98% rename from external/tiff-4.0.9/contrib/ras/tif2ras.c rename to external/tiff-4.1.0/contrib/ras/tif2ras.c index e1c321df..79db104e 100644 --- a/external/tiff-4.0.9/contrib/ras/tif2ras.c +++ b/external/tiff-4.1.0/contrib/ras/tif2ras.c @@ -1,6 +1,3 @@ -#ifndef lint -static char id[] = "$Id: tif2ras.c,v 1.3 2010-06-08 18:55:15 bfriesen Exp $"; -#endif /*- * tif2ras.c - Converts from a Tagged Image File Format image to a Sun Raster. * diff --git a/external/tiff-4.0.9/contrib/stream/CMakeLists.txt b/external/tiff-4.1.0/contrib/stream/CMakeLists.txt similarity index 100% rename from external/tiff-4.0.9/contrib/stream/CMakeLists.txt rename to external/tiff-4.1.0/contrib/stream/CMakeLists.txt diff --git a/external/tiff-4.0.9/contrib/stream/Makefile.am b/external/tiff-4.1.0/contrib/stream/Makefile.am similarity index 100% rename from external/tiff-4.0.9/contrib/stream/Makefile.am rename to external/tiff-4.1.0/contrib/stream/Makefile.am diff --git a/external/tiff-4.0.9/contrib/stream/Makefile.in b/external/tiff-4.1.0/contrib/stream/Makefile.in similarity index 97% rename from external/tiff-4.0.9/contrib/stream/Makefile.in rename to external/tiff-4.1.0/contrib/stream/Makefile.in index a7e314ce..481faa82 100644 --- a/external/tiff-4.0.9/contrib/stream/Makefile.in +++ b/external/tiff-4.1.0/contrib/stream/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -121,7 +121,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs +mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/libtiff/tif_config.h \ $(top_builddir)/libtiff/tiffconf.h CONFIG_CLEAN_FILES = @@ -146,8 +146,7 @@ am__can_run_installinfo = \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -am__DIST_COMMON = $(srcdir)/Makefile.in \ - $(top_srcdir)/config/mkinstalldirs README +am__DIST_COMMON = $(srcdir)/Makefile.in README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ @@ -323,8 +322,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -348,7 +347,10 @@ ctags CTAGS: cscope cscopelist: -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ diff --git a/external/tiff-4.0.9/contrib/stream/README b/external/tiff-4.1.0/contrib/stream/README similarity index 100% rename from external/tiff-4.0.9/contrib/stream/README rename to external/tiff-4.1.0/contrib/stream/README diff --git a/external/tiff-4.0.9/contrib/stream/tiffstream.cpp b/external/tiff-4.1.0/contrib/stream/tiffstream.cpp similarity index 100% rename from external/tiff-4.0.9/contrib/stream/tiffstream.cpp rename to external/tiff-4.1.0/contrib/stream/tiffstream.cpp diff --git a/external/tiff-4.0.9/contrib/stream/tiffstream.h b/external/tiff-4.1.0/contrib/stream/tiffstream.h similarity index 100% rename from external/tiff-4.0.9/contrib/stream/tiffstream.h rename to external/tiff-4.1.0/contrib/stream/tiffstream.h diff --git a/external/tiff-4.0.9/contrib/tags/CMakeLists.txt b/external/tiff-4.1.0/contrib/tags/CMakeLists.txt similarity index 100% rename from external/tiff-4.0.9/contrib/tags/CMakeLists.txt rename to external/tiff-4.1.0/contrib/tags/CMakeLists.txt diff --git a/external/tiff-4.0.9/contrib/tags/Makefile.am b/external/tiff-4.1.0/contrib/tags/Makefile.am similarity index 100% rename from external/tiff-4.0.9/contrib/tags/Makefile.am rename to external/tiff-4.1.0/contrib/tags/Makefile.am diff --git a/external/tiff-4.0.9/contrib/tags/Makefile.in b/external/tiff-4.1.0/contrib/tags/Makefile.in similarity index 97% rename from external/tiff-4.0.9/contrib/tags/Makefile.in rename to external/tiff-4.1.0/contrib/tags/Makefile.in index ec8302c6..0b53ed76 100644 --- a/external/tiff-4.0.9/contrib/tags/Makefile.in +++ b/external/tiff-4.1.0/contrib/tags/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -121,7 +121,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs +mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/libtiff/tif_config.h \ $(top_builddir)/libtiff/tiffconf.h CONFIG_CLEAN_FILES = @@ -146,8 +146,7 @@ am__can_run_installinfo = \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -am__DIST_COMMON = $(srcdir)/Makefile.in \ - $(top_srcdir)/config/mkinstalldirs README +am__DIST_COMMON = $(srcdir)/Makefile.in README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ @@ -326,8 +325,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -351,7 +350,10 @@ ctags CTAGS: cscope cscopelist: -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ diff --git a/external/tiff-4.0.9/contrib/tags/README b/external/tiff-4.1.0/contrib/tags/README similarity index 98% rename from external/tiff-4.0.9/contrib/tags/README rename to external/tiff-4.1.0/contrib/tags/README index 73c6c213..3220b7b1 100644 --- a/external/tiff-4.0.9/contrib/tags/README +++ b/external/tiff-4.1.0/contrib/tags/README @@ -2,7 +2,7 @@ NOTE: Sept/2004 The following described approach to managing tag extensions has been -mostly superceeded since libtiff 3.6.0. The described approach requires +mostly superseded since libtiff 3.6.0. The described approach requires internal knowledge of the libtiff API and tends to be very fragile in the face of libtiff upgrades. diff --git a/external/tiff-4.0.9/contrib/tags/listtif.c b/external/tiff-4.1.0/contrib/tags/listtif.c similarity index 100% rename from external/tiff-4.0.9/contrib/tags/listtif.c rename to external/tiff-4.1.0/contrib/tags/listtif.c diff --git a/external/tiff-4.0.9/contrib/tags/maketif.c b/external/tiff-4.1.0/contrib/tags/maketif.c similarity index 100% rename from external/tiff-4.0.9/contrib/tags/maketif.c rename to external/tiff-4.1.0/contrib/tags/maketif.c diff --git a/external/tiff-4.0.9/contrib/tags/xtif_dir.c b/external/tiff-4.1.0/contrib/tags/xtif_dir.c similarity index 99% rename from external/tiff-4.0.9/contrib/tags/xtif_dir.c rename to external/tiff-4.1.0/contrib/tags/xtif_dir.c index e67a6abf..35295526 100644 --- a/external/tiff-4.0.9/contrib/tags/xtif_dir.c +++ b/external/tiff-4.1.0/contrib/tags/xtif_dir.c @@ -269,7 +269,7 @@ _XTIFFDefaultDirectory(TIFF *tif) * Install into TIFF structure. */ TIFFMEMBER(tif,clientdir) = (tidata_t)xt; - tif->tif_flags |= XTIFF_INITIALIZED; /* dont do this again! */ + tif->tif_flags |= XTIFF_INITIALIZED; /* don't do this again! */ } /* set up our own defaults */ diff --git a/external/tiff-4.0.9/contrib/tags/xtiffio.h b/external/tiff-4.1.0/contrib/tags/xtiffio.h similarity index 100% rename from external/tiff-4.0.9/contrib/tags/xtiffio.h rename to external/tiff-4.1.0/contrib/tags/xtiffio.h diff --git a/external/tiff-4.0.9/contrib/tags/xtiffiop.h b/external/tiff-4.1.0/contrib/tags/xtiffiop.h similarity index 100% rename from external/tiff-4.0.9/contrib/tags/xtiffiop.h rename to external/tiff-4.1.0/contrib/tags/xtiffiop.h diff --git a/external/tiff-4.0.9/contrib/win_dib/CMakeLists.txt b/external/tiff-4.1.0/contrib/win_dib/CMakeLists.txt similarity index 100% rename from external/tiff-4.0.9/contrib/win_dib/CMakeLists.txt rename to external/tiff-4.1.0/contrib/win_dib/CMakeLists.txt diff --git a/external/tiff-4.0.9/contrib/win_dib/Makefile.am b/external/tiff-4.1.0/contrib/win_dib/Makefile.am similarity index 100% rename from external/tiff-4.0.9/contrib/win_dib/Makefile.am rename to external/tiff-4.1.0/contrib/win_dib/Makefile.am diff --git a/external/tiff-4.0.9/contrib/win_dib/Makefile.in b/external/tiff-4.1.0/contrib/win_dib/Makefile.in similarity index 97% rename from external/tiff-4.0.9/contrib/win_dib/Makefile.in rename to external/tiff-4.1.0/contrib/win_dib/Makefile.in index 47805786..7663106d 100644 --- a/external/tiff-4.0.9/contrib/win_dib/Makefile.in +++ b/external/tiff-4.1.0/contrib/win_dib/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -121,7 +121,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs +mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/libtiff/tif_config.h \ $(top_builddir)/libtiff/tiffconf.h CONFIG_CLEAN_FILES = @@ -146,8 +146,7 @@ am__can_run_installinfo = \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -am__DIST_COMMON = $(srcdir)/Makefile.in \ - $(top_srcdir)/config/mkinstalldirs +am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ @@ -325,8 +324,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -350,7 +349,10 @@ ctags CTAGS: cscope cscopelist: -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ diff --git a/external/tiff-4.0.9/contrib/win_dib/Makefile.w95 b/external/tiff-4.1.0/contrib/win_dib/Makefile.w95 similarity index 97% rename from external/tiff-4.0.9/contrib/win_dib/Makefile.w95 rename to external/tiff-4.1.0/contrib/win_dib/Makefile.w95 index 3f461ef5..3f15e832 100644 --- a/external/tiff-4.0.9/contrib/win_dib/Makefile.w95 +++ b/external/tiff-4.1.0/contrib/win_dib/Makefile.w95 @@ -1,5 +1,3 @@ -# $Header: /usr/people/sam/tiff/libtiff/RCS/Makefile.w95,v 1.2 1994/11/28 -06:13:31 sam Exp $ # # Tag Image File Format Library # diff --git a/external/tiff-4.0.9/contrib/win_dib/README.Tiffile b/external/tiff-4.1.0/contrib/win_dib/README.Tiffile similarity index 100% rename from external/tiff-4.0.9/contrib/win_dib/README.Tiffile rename to external/tiff-4.1.0/contrib/win_dib/README.Tiffile diff --git a/external/tiff-4.0.9/contrib/win_dib/README.tiff2dib b/external/tiff-4.1.0/contrib/win_dib/README.tiff2dib similarity index 95% rename from external/tiff-4.0.9/contrib/win_dib/README.tiff2dib rename to external/tiff-4.1.0/contrib/win_dib/README.tiff2dib index 3e6075fb..ff70ca1a 100644 --- a/external/tiff-4.0.9/contrib/win_dib/README.tiff2dib +++ b/external/tiff-4.1.0/contrib/win_dib/README.tiff2dib @@ -40,7 +40,7 @@ it contain the function LoadTIFFinDIB that load a TIFF file and build a memory DIB with it and return the HANDLE (HDIB) of the memory bloc containing this DIB. Since DIB is the "natural" bitmap format for Windows 3.1, 95 and NT, -this function sould be usefull for some Windows 95 (or NT) developer. +this function should be useful for some Windows 95 (or NT) developer. Sorry for my approximate english ... diff --git a/external/tiff-4.0.9/contrib/win_dib/Tiffile.cpp b/external/tiff-4.1.0/contrib/win_dib/Tiffile.cpp similarity index 99% rename from external/tiff-4.0.9/contrib/win_dib/Tiffile.cpp rename to external/tiff-4.1.0/contrib/win_dib/Tiffile.cpp index 9d958b1c..2f7965d6 100644 --- a/external/tiff-4.0.9/contrib/win_dib/Tiffile.cpp +++ b/external/tiff-4.1.0/contrib/win_dib/Tiffile.cpp @@ -360,7 +360,7 @@ setorientation(TIFFRGBAImage* img, uint32 h) case ORIENTATION_LEFTBOT: /* XXX */ TIFFWarning(TIFFFileName(tif), "using bottom-left orientation"); img->orientation = ORIENTATION_BOTLEFT; - /* fall thru... */ + /* fall through... */ case ORIENTATION_BOTLEFT: y = 0; break; @@ -370,7 +370,7 @@ setorientation(TIFFRGBAImage* img, uint32 h) default: TIFFWarning(TIFFFileName(tif), "using top-left orientation"); img->orientation = ORIENTATION_TOPLEFT; - /* fall thru... */ + /* fall through... */ case ORIENTATION_TOPLEFT: y = h-1; break; diff --git a/external/tiff-4.0.9/contrib/win_dib/tiff2dib.c b/external/tiff-4.1.0/contrib/win_dib/tiff2dib.c similarity index 100% rename from external/tiff-4.0.9/contrib/win_dib/tiff2dib.c rename to external/tiff-4.1.0/contrib/win_dib/tiff2dib.c diff --git a/external/tiff-4.0.9/html/CMakeLists.txt b/external/tiff-4.1.0/html/CMakeLists.txt similarity index 100% rename from external/tiff-4.0.9/html/CMakeLists.txt rename to external/tiff-4.1.0/html/CMakeLists.txt diff --git a/external/tiff-4.0.9/html/Makefile.am b/external/tiff-4.1.0/html/Makefile.am similarity index 98% rename from external/tiff-4.0.9/html/Makefile.am rename to external/tiff-4.1.0/html/Makefile.am index 12193df7..10b419b2 100644 --- a/external/tiff-4.0.9/html/Makefile.am +++ b/external/tiff-4.1.0/html/Makefile.am @@ -86,7 +86,9 @@ docfiles = \ v4.0.6.html \ v4.0.7.html \ v4.0.8.html \ - v4.0.9.html + v4.0.9.html \ + v4.0.10.html \ + v4.1.0.html dist_doc_DATA = $(docfiles) diff --git a/external/tiff-4.0.9/html/Makefile.in b/external/tiff-4.1.0/html/Makefile.in similarity index 98% rename from external/tiff-4.0.9/html/Makefile.in rename to external/tiff-4.1.0/html/Makefile.in index 4c0c8e3e..30932e63 100644 --- a/external/tiff-4.0.9/html/Makefile.in +++ b/external/tiff-4.1.0/html/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -124,7 +124,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_doc_DATA) \ $(am__DIST_COMMON) -mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs +mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/libtiff/tif_config.h \ $(top_builddir)/libtiff/tiffconf.h CONFIG_CLEAN_FILES = @@ -192,7 +192,7 @@ am__recursive_targets = \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ - distdir + distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is @@ -213,8 +213,7 @@ am__define_uniq_tagged_files = \ ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) -am__DIST_COMMON = $(srcdir)/Makefile.in \ - $(top_srcdir)/config/mkinstalldirs +am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ @@ -449,7 +448,9 @@ docfiles = \ v4.0.6.html \ v4.0.7.html \ v4.0.8.html \ - v4.0.9.html + v4.0.9.html \ + v4.0.10.html \ + v4.1.0.html dist_doc_DATA = $(docfiles) SUBDIRS = images man @@ -476,8 +477,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -615,7 +616,10 @@ cscopelist-am: $(am__tagged_files) distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ diff --git a/external/tiff-4.0.9/html/TIFFTechNote2.html b/external/tiff-4.1.0/html/TIFFTechNote2.html similarity index 100% rename from external/tiff-4.0.9/html/TIFFTechNote2.html rename to external/tiff-4.1.0/html/TIFFTechNote2.html diff --git a/external/tiff-4.0.9/html/addingtags.html b/external/tiff-4.1.0/html/addingtags.html similarity index 98% rename from external/tiff-4.0.9/html/addingtags.html rename to external/tiff-4.1.0/html/addingtags.html index 4e89205b..c61a2623 100644 --- a/external/tiff-4.0.9/html/addingtags.html +++ b/external/tiff-4.1.0/html/addingtags.html @@ -12,7 +12,7 @@

Libtiff has built-in knowledge of all the standard TIFF tags, as -well as extentions. The following describes how to add knowledge of +well as extensions. The following describes how to add knowledge of new tags as builtins to libtiff, or how to application specific tags can be used by applications without modifying libtiff.

@@ -113,7 +113,7 @@

Defining Application Tags

This is done by calling TIFFMergeFieldInfo() with one or more TIFFFieldInfos.

-The libgeotiff library provides geospatial information extentions within +The libgeotiff library provides geospatial information extensions within a TIFF file. First, a set of TIFFFieldInfo's is prepared with information on the new tags:

diff --git a/external/tiff-4.0.9/html/bugs.html b/external/tiff-4.1.0/html/bugs.html similarity index 66% rename from external/tiff-4.0.9/html/bugs.html rename to external/tiff-4.1.0/html/bugs.html index 07fc78b8..bc27955e 100644 --- a/external/tiff-4.0.9/html/bugs.html +++ b/external/tiff-4.1.0/html/bugs.html @@ -14,19 +14,20 @@

Of course, reporting bugs is no substitute for discussion. The -tiff@lists.maptools.org mailing +tiff@lists.osgeo.org mailing list is for users of this software, and discussion TIFF issues in general. It is managed with the Mailman software, and the web interface for subscribing and managing your access to the list is at:

- http://lists.maptools.org/mailman/listinfo/tiff

+ http://lists.osgeo.org/mailman/listinfo/tiff

Posts to the list are only accepted from members of the list in order to limit the amount of spam propagated.

@@ -56,6 +57,6 @@


-Last updated: $Date: 2016-04-08 02:34:03 $ +Last updated: 2019-10-01 diff --git a/external/tiff-4.0.9/html/build.html b/external/tiff-4.1.0/html/build.html similarity index 99% rename from external/tiff-4.0.9/html/build.html rename to external/tiff-4.1.0/html/build.html index f52b0966..77fbc40b 100644 --- a/external/tiff-4.0.9/html/build.html +++ b/external/tiff-4.1.0/html/build.html @@ -689,7 +689,7 @@

Table of Contents

libtiff/version.h version string (generated by Makefile) libtiff/tif_apple.c Apple-related OS support libtiff/tif_atari.c Atari-related OS support -libtiff/tif_aux.c auxilary directory-related functions +libtiff/tif_aux.c auxiliary directory-related functions libtiff/tif_close.c close an open TIFF file libtiff/tif_codec.c configuration table of builtin codecs libtiff/tif_compress.c compression scheme support diff --git a/external/tiff-4.0.9/html/contrib.html b/external/tiff-4.1.0/html/contrib.html similarity index 100% rename from external/tiff-4.0.9/html/contrib.html rename to external/tiff-4.1.0/html/contrib.html diff --git a/external/tiff-4.0.9/html/document.html b/external/tiff-4.1.0/html/document.html similarity index 91% rename from external/tiff-4.0.9/html/document.html rename to external/tiff-4.1.0/html/document.html index 936635bc..71d04126 100644 --- a/external/tiff-4.0.9/html/document.html +++ b/external/tiff-4.1.0/html/document.html @@ -14,8 +14,8 @@

A copy of the 6.0 specification is available from Adobe at http://partners.adobe.com/public/developer/en/tiff/TIFF6.pdf, or from the libtiff -ftp site at -ftp://download.osgeo.org/libtiff/doc/TIFF6.pdf.

+ftp site at +https://download.osgeo.org/libtiff/doc/TIFF6.pdf.

Draft TIFF Technical Note #2 covers problems diff --git a/external/tiff-4.0.9/html/images.html b/external/tiff-4.1.0/html/images.html similarity index 88% rename from external/tiff-4.0.9/html/images.html rename to external/tiff-4.1.0/html/images.html index b2c5664c..6e2e29be 100644 --- a/external/tiff-4.0.9/html/images.html +++ b/external/tiff-4.1.0/html/images.html @@ -22,8 +22,8 @@

The latest archive of test images is located at - -ftp://download.osgeo.org/libtiff/pics-3.8.0.tar.gz + +https://download.osgeo.org/libtiff/pics-3.8.0.tar.gz

There are two other good sources for TIFF test images: diff --git a/external/tiff-4.0.9/html/images/CMakeLists.txt b/external/tiff-4.1.0/html/images/CMakeLists.txt similarity index 100% rename from external/tiff-4.0.9/html/images/CMakeLists.txt rename to external/tiff-4.1.0/html/images/CMakeLists.txt diff --git a/external/tiff-4.0.9/html/images/Makefile.am b/external/tiff-4.1.0/html/images/Makefile.am similarity index 100% rename from external/tiff-4.0.9/html/images/Makefile.am rename to external/tiff-4.1.0/html/images/Makefile.am diff --git a/external/tiff-4.0.9/html/images/Makefile.in b/external/tiff-4.1.0/html/images/Makefile.in similarity index 97% rename from external/tiff-4.0.9/html/images/Makefile.in rename to external/tiff-4.1.0/html/images/Makefile.in index 80b74bfe..234a29a5 100644 --- a/external/tiff-4.0.9/html/images/Makefile.in +++ b/external/tiff-4.1.0/html/images/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -123,7 +123,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_doc_DATA) \ $(am__DIST_COMMON) -mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs +mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/libtiff/tif_config.h \ $(top_builddir)/libtiff/tiffconf.h CONFIG_CLEAN_FILES = @@ -177,8 +177,7 @@ am__uninstall_files_from_dir = { \ am__installdirs = "$(DESTDIR)$(docdir)" DATA = $(dist_doc_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -am__DIST_COMMON = $(srcdir)/Makefile.in \ - $(top_srcdir)/config/mkinstalldirs +am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ @@ -370,8 +369,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -416,7 +415,10 @@ ctags CTAGS: cscope cscopelist: -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ diff --git a/external/tiff-4.0.9/html/images/back.gif b/external/tiff-4.1.0/html/images/back.gif similarity index 100% rename from external/tiff-4.0.9/html/images/back.gif rename to external/tiff-4.1.0/html/images/back.gif diff --git a/external/tiff-4.0.9/html/images/bali.jpg b/external/tiff-4.1.0/html/images/bali.jpg similarity index 100% rename from external/tiff-4.0.9/html/images/bali.jpg rename to external/tiff-4.1.0/html/images/bali.jpg diff --git a/external/tiff-4.0.9/html/images/cat.gif b/external/tiff-4.1.0/html/images/cat.gif similarity index 100% rename from external/tiff-4.0.9/html/images/cat.gif rename to external/tiff-4.1.0/html/images/cat.gif diff --git a/external/tiff-4.0.9/html/images/cover.jpg b/external/tiff-4.1.0/html/images/cover.jpg similarity index 100% rename from external/tiff-4.0.9/html/images/cover.jpg rename to external/tiff-4.1.0/html/images/cover.jpg diff --git a/external/tiff-4.0.9/html/images/cramps.gif b/external/tiff-4.1.0/html/images/cramps.gif similarity index 100% rename from external/tiff-4.0.9/html/images/cramps.gif rename to external/tiff-4.1.0/html/images/cramps.gif diff --git a/external/tiff-4.0.9/html/images/dave.gif b/external/tiff-4.1.0/html/images/dave.gif similarity index 100% rename from external/tiff-4.0.9/html/images/dave.gif rename to external/tiff-4.1.0/html/images/dave.gif diff --git a/external/tiff-4.0.9/html/images/info.gif b/external/tiff-4.1.0/html/images/info.gif similarity index 100% rename from external/tiff-4.0.9/html/images/info.gif rename to external/tiff-4.1.0/html/images/info.gif diff --git a/external/tiff-4.0.9/html/images/jello.jpg b/external/tiff-4.1.0/html/images/jello.jpg similarity index 100% rename from external/tiff-4.0.9/html/images/jello.jpg rename to external/tiff-4.1.0/html/images/jello.jpg diff --git a/external/tiff-4.0.9/html/images/jim.gif b/external/tiff-4.1.0/html/images/jim.gif similarity index 100% rename from external/tiff-4.0.9/html/images/jim.gif rename to external/tiff-4.1.0/html/images/jim.gif diff --git a/external/tiff-4.0.9/html/images/note.gif b/external/tiff-4.1.0/html/images/note.gif similarity index 100% rename from external/tiff-4.0.9/html/images/note.gif rename to external/tiff-4.1.0/html/images/note.gif diff --git a/external/tiff-4.0.9/html/images/oxford.gif b/external/tiff-4.1.0/html/images/oxford.gif similarity index 100% rename from external/tiff-4.0.9/html/images/oxford.gif rename to external/tiff-4.1.0/html/images/oxford.gif diff --git a/external/tiff-4.0.9/html/images/quad.jpg b/external/tiff-4.1.0/html/images/quad.jpg similarity index 100% rename from external/tiff-4.0.9/html/images/quad.jpg rename to external/tiff-4.1.0/html/images/quad.jpg diff --git a/external/tiff-4.0.9/html/images/ring.gif b/external/tiff-4.1.0/html/images/ring.gif similarity index 100% rename from external/tiff-4.0.9/html/images/ring.gif rename to external/tiff-4.1.0/html/images/ring.gif diff --git a/external/tiff-4.0.9/html/images/smallliz.jpg b/external/tiff-4.1.0/html/images/smallliz.jpg similarity index 100% rename from external/tiff-4.0.9/html/images/smallliz.jpg rename to external/tiff-4.1.0/html/images/smallliz.jpg diff --git a/external/tiff-4.0.9/html/images/strike.gif b/external/tiff-4.1.0/html/images/strike.gif similarity index 100% rename from external/tiff-4.0.9/html/images/strike.gif rename to external/tiff-4.1.0/html/images/strike.gif diff --git a/external/tiff-4.0.9/html/images/warning.gif b/external/tiff-4.1.0/html/images/warning.gif similarity index 100% rename from external/tiff-4.0.9/html/images/warning.gif rename to external/tiff-4.1.0/html/images/warning.gif diff --git a/external/tiff-4.0.9/html/index.html b/external/tiff-4.1.0/html/index.html similarity index 80% rename from external/tiff-4.0.9/html/index.html rename to external/tiff-4.1.0/html/index.html index 1c5a3ec3..dca511e7 100644 --- a/external/tiff-4.0.9/html/index.html +++ b/external/tiff-4.1.0/html/index.html @@ -20,33 +20,31 @@

LibTIFF - TIFF Library and Utilities

Home Page #2 + https://libtiff.gitlab.io/libtiff/ + + + Home Page #3 http://libtiff.maptools.org/ Latest Stable Release - v4.0.9 + v4.1.0 Master Download Site - download.osgeo.org, directory libtiff + download.osgeo.org, directory libtiff Mailing List - tiff@lists.maptools.org, - Subscription, + tiff@lists.osgeo.org, + Subscription, Archive. Please, read the TIFF FAQ before asking questions. - Anonymous CVS - export CVSROOT=:pserver:cvsanon@cvs.maptools.org:/cvs/maptools/cvsroot
- cvs login

- (use empty password)
- cvs checkout libtiff
- to get the stable libtiff code or
- cvs checkout -r branch-3-9 libtiff
- to get the previous stable branch supporting the 3.9.X release series. + git repository + https://gitlab.com/libtiff/libtiff
@@ -76,9 +74,9 @@

LibTIFF - TIFF Library and Utilities

Questions should be sent to the TIFF mailing list: - tiff@lists.maptools.org, with + tiff@lists.osgeo.org, with a subscription interface at - http://lists.maptools.org/mailman/listinfo/tiff. + http://lists.osgeo.org/mailman/listinfo/tiff.

The persons currently actively maintaining and releasing libtiff @@ -102,7 +100,7 @@

LibTIFF - TIFF Library and Utilities

  • Contributed software
  • TIFF documentation
  • Building the software distribution
  • -
  • Bugs, Bugzilla, and the TIFF mailing list
  • +
  • Bugs, GitLab issues, and the TIFF mailing list
  • Test images
  • Acknowledgements and copyright issues
  • Man Pages
  • @@ -116,7 +114,7 @@

    LibTIFF - TIFF Library and Utilities


    - Last updated $Date: 2017-11-07 02:00:06 $. + Last updated 2019-11-03

    diff --git a/external/tiff-4.0.9/html/internals.html b/external/tiff-4.1.0/html/internals.html similarity index 100% rename from external/tiff-4.0.9/html/internals.html rename to external/tiff-4.1.0/html/internals.html diff --git a/external/tiff-4.0.9/html/intro.html b/external/tiff-4.1.0/html/intro.html similarity index 100% rename from external/tiff-4.0.9/html/intro.html rename to external/tiff-4.1.0/html/intro.html diff --git a/external/tiff-4.0.9/html/libtiff.html b/external/tiff-4.1.0/html/libtiff.html similarity index 99% rename from external/tiff-4.0.9/html/libtiff.html rename to external/tiff-4.1.0/html/libtiff.html index b1de7a27..56535d97 100644 --- a/external/tiff-4.0.9/html/libtiff.html +++ b/external/tiff-4.1.0/html/libtiff.html @@ -45,8 +45,8 @@

    Using The TIFF Library

    to the capabilities of the library; it is not an attempt to describe everything a developer needs to know about the library or about TIFF. Detailed information on the interfaces to the library are given in - the UNIX - manual pages that accompany this software. + the UNIX manual pages that accompany + this software.

    Michael Still has also written a useful introduction to libtiff for the @@ -97,7 +97,7 @@

    How to tell which version you have

    information. The library include file <tiffio.h> contains a C pre-processor define TIFFLIB_VERSION that can be used to check library - version compatiblity at compile time. + version compatibility at compile time.


    Library Datatypes

    diff --git a/external/tiff-4.0.9/html/man/CMakeLists.txt b/external/tiff-4.1.0/html/man/CMakeLists.txt similarity index 100% rename from external/tiff-4.0.9/html/man/CMakeLists.txt rename to external/tiff-4.1.0/html/man/CMakeLists.txt diff --git a/external/tiff-4.0.9/html/man/HtmlDoc.cmake b/external/tiff-4.1.0/html/man/HtmlDoc.cmake similarity index 100% rename from external/tiff-4.0.9/html/man/HtmlDoc.cmake rename to external/tiff-4.1.0/html/man/HtmlDoc.cmake diff --git a/external/tiff-4.0.9/html/man/Makefile.am b/external/tiff-4.1.0/html/man/Makefile.am similarity index 100% rename from external/tiff-4.0.9/html/man/Makefile.am rename to external/tiff-4.1.0/html/man/Makefile.am diff --git a/external/tiff-4.0.9/html/man/Makefile.in b/external/tiff-4.1.0/html/man/Makefile.in similarity index 98% rename from external/tiff-4.0.9/html/man/Makefile.in rename to external/tiff-4.1.0/html/man/Makefile.in index eb99fd1b..c435bad5 100644 --- a/external/tiff-4.0.9/html/man/Makefile.in +++ b/external/tiff-4.1.0/html/man/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -123,7 +123,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_doc_DATA) \ $(am__DIST_COMMON) -mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs +mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/libtiff/tif_config.h \ $(top_builddir)/libtiff/tiffconf.h CONFIG_CLEAN_FILES = @@ -177,8 +177,7 @@ am__uninstall_files_from_dir = { \ am__installdirs = "$(DESTDIR)$(docdir)" DATA = $(dist_doc_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -am__DIST_COMMON = $(srcdir)/Makefile.in \ - $(top_srcdir)/config/mkinstalldirs +am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ @@ -426,8 +425,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -472,7 +471,10 @@ ctags CTAGS: cscope cscopelist: -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ diff --git a/external/tiff-4.0.9/html/man/TIFFClose.3tiff.html b/external/tiff-4.1.0/html/man/TIFFClose.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/TIFFClose.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFClose.3tiff.html diff --git a/external/tiff-4.0.9/html/man/TIFFDataWidth.3tiff.html b/external/tiff-4.1.0/html/man/TIFFDataWidth.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/TIFFDataWidth.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFDataWidth.3tiff.html diff --git a/external/tiff-4.0.9/html/man/TIFFError.3tiff.html b/external/tiff-4.1.0/html/man/TIFFError.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/TIFFError.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFError.3tiff.html diff --git a/external/tiff-4.0.9/html/man/TIFFFieldDataType.3tiff.html b/external/tiff-4.1.0/html/man/TIFFFieldDataType.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/TIFFFieldDataType.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFFieldDataType.3tiff.html diff --git a/external/tiff-4.0.9/html/man/TIFFFieldName.3tiff.html b/external/tiff-4.1.0/html/man/TIFFFieldName.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/TIFFFieldName.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFFieldName.3tiff.html diff --git a/external/tiff-4.0.9/html/man/TIFFFieldPassCount.3tiff.html b/external/tiff-4.1.0/html/man/TIFFFieldPassCount.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/TIFFFieldPassCount.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFFieldPassCount.3tiff.html diff --git a/external/tiff-4.0.9/html/man/TIFFFieldReadCount.3tiff.html b/external/tiff-4.1.0/html/man/TIFFFieldReadCount.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/TIFFFieldReadCount.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFFieldReadCount.3tiff.html diff --git a/external/tiff-4.0.9/html/man/TIFFFieldTag.3tiff.html b/external/tiff-4.1.0/html/man/TIFFFieldTag.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/TIFFFieldTag.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFFieldTag.3tiff.html diff --git a/external/tiff-4.0.9/html/man/TIFFFieldWriteCount.3tiff.html b/external/tiff-4.1.0/html/man/TIFFFieldWriteCount.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/TIFFFieldWriteCount.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFFieldWriteCount.3tiff.html diff --git a/external/tiff-4.0.9/html/man/TIFFFlush.3tiff.html b/external/tiff-4.1.0/html/man/TIFFFlush.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/TIFFFlush.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFFlush.3tiff.html diff --git a/external/tiff-4.0.9/html/man/TIFFGetField.3tiff.html b/external/tiff-4.1.0/html/man/TIFFGetField.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/TIFFGetField.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFGetField.3tiff.html diff --git a/external/tiff-4.0.9/html/man/TIFFOpen.3tiff.html b/external/tiff-4.1.0/html/man/TIFFOpen.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/TIFFOpen.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFOpen.3tiff.html diff --git a/external/tiff-4.0.9/html/man/TIFFPrintDirectory.3tiff.html b/external/tiff-4.1.0/html/man/TIFFPrintDirectory.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/TIFFPrintDirectory.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFPrintDirectory.3tiff.html diff --git a/external/tiff-4.0.9/html/man/TIFFRGBAImage.3tiff.html b/external/tiff-4.1.0/html/man/TIFFRGBAImage.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/TIFFRGBAImage.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFRGBAImage.3tiff.html diff --git a/external/tiff-4.0.9/html/man/TIFFReadDirectory.3tiff.html b/external/tiff-4.1.0/html/man/TIFFReadDirectory.3tiff.html similarity index 97% rename from external/tiff-4.0.9/html/man/TIFFReadDirectory.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFReadDirectory.3tiff.html index 1e32f7cd..5e4004db 100644 --- a/external/tiff-4.0.9/html/man/TIFFReadDirectory.3tiff.html +++ b/external/tiff-4.1.0/html/man/TIFFReadDirectory.3tiff.html @@ -151,23 +151,23 @@

    DIAGNOSTICS

    unknown tag was encountered in the directory; the library ignores all such tags.

    -

    TIFF directory is missing requred +

    TIFF directory is missing required "ImageLength" field. The image violates the specification by not having a necessary field. There is no way for the library to recover from this error.

    -

    TIFF directory is missing requred +

    TIFF directory is missing required "PlanarConfig" field. The image violates the specification by not having a necessary field. There is no way for the library to recover from this error.

    -

    TIFF directory is missing requred +

    TIFF directory is missing required "StripOffsets" field. The image has multiple strips, but is missing the tag that specifies the file offset to each strip of data. There is no way for the library to recover from this error.

    -

    TIFF directory is missing requred +

    TIFF directory is missing required "TileOffsets" field. The image has multiple tiles, but is missing the tag that specifies the file offset to each tile of data. There is no way for the library to diff --git a/external/tiff-4.0.9/html/man/TIFFReadEncodedStrip.3tiff.html b/external/tiff-4.1.0/html/man/TIFFReadEncodedStrip.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/TIFFReadEncodedStrip.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFReadEncodedStrip.3tiff.html diff --git a/external/tiff-4.0.9/html/man/TIFFReadEncodedTile.3tiff.html b/external/tiff-4.1.0/html/man/TIFFReadEncodedTile.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/TIFFReadEncodedTile.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFReadEncodedTile.3tiff.html diff --git a/external/tiff-4.0.9/html/man/TIFFReadRGBAImage.3tiff.html b/external/tiff-4.1.0/html/man/TIFFReadRGBAImage.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/TIFFReadRGBAImage.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFReadRGBAImage.3tiff.html diff --git a/external/tiff-4.0.9/html/man/TIFFReadRGBAStrip.3tiff.html b/external/tiff-4.1.0/html/man/TIFFReadRGBAStrip.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/TIFFReadRGBAStrip.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFReadRGBAStrip.3tiff.html diff --git a/external/tiff-4.0.9/html/man/TIFFReadRGBATile.3tiff.html b/external/tiff-4.1.0/html/man/TIFFReadRGBATile.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/TIFFReadRGBATile.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFReadRGBATile.3tiff.html diff --git a/external/tiff-4.0.9/html/man/TIFFReadRawStrip.3tiff.html b/external/tiff-4.1.0/html/man/TIFFReadRawStrip.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/TIFFReadRawStrip.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFReadRawStrip.3tiff.html diff --git a/external/tiff-4.0.9/html/man/TIFFReadRawTile.3tiff.html b/external/tiff-4.1.0/html/man/TIFFReadRawTile.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/TIFFReadRawTile.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFReadRawTile.3tiff.html diff --git a/external/tiff-4.0.9/html/man/TIFFReadScanline.3tiff.html b/external/tiff-4.1.0/html/man/TIFFReadScanline.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/TIFFReadScanline.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFReadScanline.3tiff.html diff --git a/external/tiff-4.0.9/html/man/TIFFReadTile.3tiff.html b/external/tiff-4.1.0/html/man/TIFFReadTile.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/TIFFReadTile.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFReadTile.3tiff.html diff --git a/external/tiff-4.0.9/html/man/TIFFSetDirectory.3tiff.html b/external/tiff-4.1.0/html/man/TIFFSetDirectory.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/TIFFSetDirectory.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFSetDirectory.3tiff.html diff --git a/external/tiff-4.0.9/html/man/TIFFSetField.3tiff.html b/external/tiff-4.1.0/html/man/TIFFSetField.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/TIFFSetField.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFSetField.3tiff.html diff --git a/external/tiff-4.0.9/html/man/TIFFWarning.3tiff.html b/external/tiff-4.1.0/html/man/TIFFWarning.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/TIFFWarning.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFWarning.3tiff.html diff --git a/external/tiff-4.0.9/html/man/TIFFWriteDirectory.3tiff.html b/external/tiff-4.1.0/html/man/TIFFWriteDirectory.3tiff.html similarity index 99% rename from external/tiff-4.0.9/html/man/TIFFWriteDirectory.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFWriteDirectory.3tiff.html index 9aff8c4c..6483aa6a 100644 --- a/external/tiff-4.0.9/html/man/TIFFWriteDirectory.3tiff.html +++ b/external/tiff-4.1.0/html/man/TIFFWriteDirectory.3tiff.html @@ -69,7 +69,7 @@

    DESCRIPTION

    the directory, but instead of place it at it’s old location (as TIFFWriteDirectory would) it will place them at the end of the file, correcting the pointer from the -preceeding directory or file header to point to it’s +preceding directory or file header to point to it’s new location. This is particularly important in cases where the size of the directory and pointed to data has grown, so it won’t fit in the space available at the old diff --git a/external/tiff-4.0.9/html/man/TIFFWriteEncodedStrip.3tiff.html b/external/tiff-4.1.0/html/man/TIFFWriteEncodedStrip.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/TIFFWriteEncodedStrip.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFWriteEncodedStrip.3tiff.html diff --git a/external/tiff-4.0.9/html/man/TIFFWriteEncodedTile.3tiff.html b/external/tiff-4.1.0/html/man/TIFFWriteEncodedTile.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/TIFFWriteEncodedTile.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFWriteEncodedTile.3tiff.html diff --git a/external/tiff-4.0.9/html/man/TIFFWriteRawStrip.3tiff.html b/external/tiff-4.1.0/html/man/TIFFWriteRawStrip.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/TIFFWriteRawStrip.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFWriteRawStrip.3tiff.html diff --git a/external/tiff-4.0.9/html/man/TIFFWriteRawTile.3tiff.html b/external/tiff-4.1.0/html/man/TIFFWriteRawTile.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/TIFFWriteRawTile.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFWriteRawTile.3tiff.html diff --git a/external/tiff-4.0.9/html/man/TIFFWriteScanline.3tiff.html b/external/tiff-4.1.0/html/man/TIFFWriteScanline.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/TIFFWriteScanline.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFWriteScanline.3tiff.html diff --git a/external/tiff-4.0.9/html/man/TIFFWriteTile.3tiff.html b/external/tiff-4.1.0/html/man/TIFFWriteTile.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/TIFFWriteTile.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFWriteTile.3tiff.html diff --git a/external/tiff-4.0.9/html/man/TIFFbuffer.3tiff.html b/external/tiff-4.1.0/html/man/TIFFbuffer.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/TIFFbuffer.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFbuffer.3tiff.html diff --git a/external/tiff-4.0.9/html/man/TIFFcodec.3tiff.html b/external/tiff-4.1.0/html/man/TIFFcodec.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/TIFFcodec.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFcodec.3tiff.html diff --git a/external/tiff-4.0.9/html/man/TIFFcolor.3tiff.html b/external/tiff-4.1.0/html/man/TIFFcolor.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/TIFFcolor.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFcolor.3tiff.html diff --git a/external/tiff-4.0.9/html/man/TIFFmemory.3tiff.html b/external/tiff-4.1.0/html/man/TIFFmemory.3tiff.html similarity index 99% rename from external/tiff-4.0.9/html/man/TIFFmemory.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFmemory.3tiff.html index 39fa7894..283be9bd 100644 --- a/external/tiff-4.0.9/html/man/TIFFmemory.3tiff.html +++ b/external/tiff-4.1.0/html/man/TIFFmemory.3tiff.html @@ -76,7 +76,7 @@

    DESCRIPTION

    compared for equality using _TIFFmemcmp. These routines conform to the equivalent ANSI C routines: memset, memcpy, and memcmp, -repsectively.

    +respectively.

    diff --git a/external/tiff-4.0.9/html/man/TIFFquery.3tiff.html b/external/tiff-4.1.0/html/man/TIFFquery.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/TIFFquery.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFquery.3tiff.html diff --git a/external/tiff-4.0.9/html/man/TIFFsize.3tiff.html b/external/tiff-4.1.0/html/man/TIFFsize.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/TIFFsize.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFsize.3tiff.html diff --git a/external/tiff-4.0.9/html/man/TIFFstrip.3tiff.html b/external/tiff-4.1.0/html/man/TIFFstrip.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/TIFFstrip.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFstrip.3tiff.html diff --git a/external/tiff-4.0.9/html/man/TIFFswab.3tiff.html b/external/tiff-4.1.0/html/man/TIFFswab.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/TIFFswab.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFswab.3tiff.html diff --git a/external/tiff-4.0.9/html/man/TIFFtile.3tiff.html b/external/tiff-4.1.0/html/man/TIFFtile.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/TIFFtile.3tiff.html rename to external/tiff-4.1.0/html/man/TIFFtile.3tiff.html diff --git a/external/tiff-4.0.9/html/man/fax2ps.1.html b/external/tiff-4.1.0/html/man/fax2ps.1.html similarity index 100% rename from external/tiff-4.0.9/html/man/fax2ps.1.html rename to external/tiff-4.1.0/html/man/fax2ps.1.html diff --git a/external/tiff-4.0.9/html/man/fax2tiff.1.html b/external/tiff-4.1.0/html/man/fax2tiff.1.html similarity index 100% rename from external/tiff-4.0.9/html/man/fax2tiff.1.html rename to external/tiff-4.1.0/html/man/fax2tiff.1.html diff --git a/external/tiff-4.0.9/html/man/index.html b/external/tiff-4.1.0/html/man/index.html similarity index 100% rename from external/tiff-4.0.9/html/man/index.html rename to external/tiff-4.1.0/html/man/index.html diff --git a/external/tiff-4.0.9/html/man/libtiff.3tiff.html b/external/tiff-4.1.0/html/man/libtiff.3tiff.html similarity index 100% rename from external/tiff-4.0.9/html/man/libtiff.3tiff.html rename to external/tiff-4.1.0/html/man/libtiff.3tiff.html diff --git a/external/tiff-4.0.9/html/man/pal2rgb.1.html b/external/tiff-4.1.0/html/man/pal2rgb.1.html similarity index 100% rename from external/tiff-4.0.9/html/man/pal2rgb.1.html rename to external/tiff-4.1.0/html/man/pal2rgb.1.html diff --git a/external/tiff-4.0.9/html/man/ppm2tiff.1.html b/external/tiff-4.1.0/html/man/ppm2tiff.1.html similarity index 100% rename from external/tiff-4.0.9/html/man/ppm2tiff.1.html rename to external/tiff-4.1.0/html/man/ppm2tiff.1.html diff --git a/external/tiff-4.0.9/html/man/raw2tiff.1.html b/external/tiff-4.1.0/html/man/raw2tiff.1.html similarity index 100% rename from external/tiff-4.0.9/html/man/raw2tiff.1.html rename to external/tiff-4.1.0/html/man/raw2tiff.1.html diff --git a/external/tiff-4.0.9/html/man/tiff2bw.1.html b/external/tiff-4.1.0/html/man/tiff2bw.1.html similarity index 100% rename from external/tiff-4.0.9/html/man/tiff2bw.1.html rename to external/tiff-4.1.0/html/man/tiff2bw.1.html diff --git a/external/tiff-4.0.9/html/man/tiff2pdf.1.html b/external/tiff-4.1.0/html/man/tiff2pdf.1.html similarity index 100% rename from external/tiff-4.0.9/html/man/tiff2pdf.1.html rename to external/tiff-4.1.0/html/man/tiff2pdf.1.html diff --git a/external/tiff-4.0.9/html/man/tiff2ps.1.html b/external/tiff-4.1.0/html/man/tiff2ps.1.html similarity index 100% rename from external/tiff-4.0.9/html/man/tiff2ps.1.html rename to external/tiff-4.1.0/html/man/tiff2ps.1.html diff --git a/external/tiff-4.0.9/html/man/tiff2rgba.1.html b/external/tiff-4.1.0/html/man/tiff2rgba.1.html similarity index 100% rename from external/tiff-4.0.9/html/man/tiff2rgba.1.html rename to external/tiff-4.1.0/html/man/tiff2rgba.1.html diff --git a/external/tiff-4.0.9/html/man/tiffcmp.1.html b/external/tiff-4.1.0/html/man/tiffcmp.1.html similarity index 100% rename from external/tiff-4.0.9/html/man/tiffcmp.1.html rename to external/tiff-4.1.0/html/man/tiffcmp.1.html diff --git a/external/tiff-4.0.9/html/man/tiffcp.1.html b/external/tiff-4.1.0/html/man/tiffcp.1.html similarity index 100% rename from external/tiff-4.0.9/html/man/tiffcp.1.html rename to external/tiff-4.1.0/html/man/tiffcp.1.html diff --git a/external/tiff-4.0.9/html/man/tiffcrop.1.html b/external/tiff-4.1.0/html/man/tiffcrop.1.html similarity index 100% rename from external/tiff-4.0.9/html/man/tiffcrop.1.html rename to external/tiff-4.1.0/html/man/tiffcrop.1.html diff --git a/external/tiff-4.0.9/html/man/tiffdither.1.html b/external/tiff-4.1.0/html/man/tiffdither.1.html similarity index 100% rename from external/tiff-4.0.9/html/man/tiffdither.1.html rename to external/tiff-4.1.0/html/man/tiffdither.1.html diff --git a/external/tiff-4.0.9/html/man/tiffdump.1.html b/external/tiff-4.1.0/html/man/tiffdump.1.html similarity index 100% rename from external/tiff-4.0.9/html/man/tiffdump.1.html rename to external/tiff-4.1.0/html/man/tiffdump.1.html diff --git a/external/tiff-4.0.9/html/man/tiffgt.1.html b/external/tiff-4.1.0/html/man/tiffgt.1.html similarity index 100% rename from external/tiff-4.0.9/html/man/tiffgt.1.html rename to external/tiff-4.1.0/html/man/tiffgt.1.html diff --git a/external/tiff-4.0.9/html/man/tiffinfo.1.html b/external/tiff-4.1.0/html/man/tiffinfo.1.html similarity index 100% rename from external/tiff-4.0.9/html/man/tiffinfo.1.html rename to external/tiff-4.1.0/html/man/tiffinfo.1.html diff --git a/external/tiff-4.0.9/html/man/tiffmedian.1.html b/external/tiff-4.1.0/html/man/tiffmedian.1.html similarity index 100% rename from external/tiff-4.0.9/html/man/tiffmedian.1.html rename to external/tiff-4.1.0/html/man/tiffmedian.1.html diff --git a/external/tiff-4.0.9/html/man/tiffset.1.html b/external/tiff-4.1.0/html/man/tiffset.1.html similarity index 100% rename from external/tiff-4.0.9/html/man/tiffset.1.html rename to external/tiff-4.1.0/html/man/tiffset.1.html diff --git a/external/tiff-4.0.9/html/man/tiffsplit.1.html b/external/tiff-4.1.0/html/man/tiffsplit.1.html similarity index 100% rename from external/tiff-4.0.9/html/man/tiffsplit.1.html rename to external/tiff-4.1.0/html/man/tiffsplit.1.html diff --git a/external/tiff-4.0.9/html/misc.html b/external/tiff-4.1.0/html/misc.html similarity index 100% rename from external/tiff-4.0.9/html/misc.html rename to external/tiff-4.1.0/html/misc.html diff --git a/external/tiff-4.0.9/html/support.html b/external/tiff-4.1.0/html/support.html similarity index 100% rename from external/tiff-4.0.9/html/support.html rename to external/tiff-4.1.0/html/support.html diff --git a/external/tiff-4.0.9/html/tools.html b/external/tiff-4.1.0/html/tools.html similarity index 100% rename from external/tiff-4.0.9/html/tools.html rename to external/tiff-4.1.0/html/tools.html diff --git a/external/tiff-4.0.9/html/v3.4beta007.html b/external/tiff-4.1.0/html/v3.4beta007.html similarity index 96% rename from external/tiff-4.0.9/html/v3.4beta007.html rename to external/tiff-4.1.0/html/v3.4beta007.html index 10a2946d..10307205 100644 --- a/external/tiff-4.0.9/html/v3.4beta007.html +++ b/external/tiff-4.1.0/html/v3.4beta007.html @@ -16,7 +16,7 @@
    Current Version: v3.4beta007
    Previous Version: v3.4beta004
    -Master FTP Site: ftp.sgi.com (192.48.153.1), directory graphics/tiff
    +Master Download Site: ftp.sgi.com (192.48.153.1), directory graphics/tiff

    diff --git a/external/tiff-4.0.9/html/v3.4beta016.html b/external/tiff-4.1.0/html/v3.4beta016.html similarity index 96% rename from external/tiff-4.0.9/html/v3.4beta016.html rename to external/tiff-4.1.0/html/v3.4beta016.html index 133a4697..170f3384 100644 --- a/external/tiff-4.0.9/html/v3.4beta016.html +++ b/external/tiff-4.1.0/html/v3.4beta016.html @@ -16,7 +16,7 @@
    Current Version: v3.4beta016
    Previous Version: v3.4beta007
    -Master FTP Site: ftp.sgi.com (192.48.153.1), directory graphics/tiff
    +Master Download Site: ftp.sgi.com (192.48.153.1), directory graphics/tiff

    diff --git a/external/tiff-4.0.9/html/v3.4beta018.html b/external/tiff-4.1.0/html/v3.4beta018.html similarity index 95% rename from external/tiff-4.0.9/html/v3.4beta018.html rename to external/tiff-4.1.0/html/v3.4beta018.html index 1256c8a9..4843c95d 100644 --- a/external/tiff-4.0.9/html/v3.4beta018.html +++ b/external/tiff-4.1.0/html/v3.4beta018.html @@ -16,7 +16,7 @@
    Current Version: v3.4beta018
    Previous Version: v3.4beta016
    -Master FTP Site: ftp.sgi.com (192.48.153.1), directory graphics/tiff
    +Master Download Site: ftp.sgi.com (192.48.153.1), directory graphics/tiff

    diff --git a/external/tiff-4.0.9/html/v3.4beta024.html b/external/tiff-4.1.0/html/v3.4beta024.html similarity index 97% rename from external/tiff-4.0.9/html/v3.4beta024.html rename to external/tiff-4.1.0/html/v3.4beta024.html index 09da9262..ee2b243b 100644 --- a/external/tiff-4.0.9/html/v3.4beta024.html +++ b/external/tiff-4.1.0/html/v3.4beta024.html @@ -16,7 +16,7 @@
    Current Version: v3.4beta024
    Previous Version: v3.4beta018
    -Master FTP Site: ftp.sgi.com (192.48.153.1), directory graphics/tiff
    +Master Download Site: ftp.sgi.com (192.48.153.1), directory graphics/tiff

    diff --git a/external/tiff-4.0.9/html/v3.4beta028.html b/external/tiff-4.1.0/html/v3.4beta028.html similarity index 97% rename from external/tiff-4.0.9/html/v3.4beta028.html rename to external/tiff-4.1.0/html/v3.4beta028.html index 827229ef..5ac9d75f 100644 --- a/external/tiff-4.0.9/html/v3.4beta028.html +++ b/external/tiff-4.1.0/html/v3.4beta028.html @@ -16,7 +16,7 @@
    Current Version: v3.4beta028
    Previous Version: v3.4beta024
    -Master FTP Site: ftp.sgi.com (192.48.153.1), directory graphics/tiff
    +Master Download Site: ftp.sgi.com (192.48.153.1), directory graphics/tiff

    diff --git a/external/tiff-4.0.9/html/v3.4beta029.html b/external/tiff-4.1.0/html/v3.4beta029.html similarity index 95% rename from external/tiff-4.0.9/html/v3.4beta029.html rename to external/tiff-4.1.0/html/v3.4beta029.html index 442a2f39..f7e863d0 100644 --- a/external/tiff-4.0.9/html/v3.4beta029.html +++ b/external/tiff-4.1.0/html/v3.4beta029.html @@ -16,7 +16,7 @@
    Current Version: v3.4beta029
    Previous Version: v3.4beta028
    -Master FTP Site: ftp.sgi.com (192.48.153.1), directory graphics/tiff
    +Master Download Site: ftp.sgi.com (192.48.153.1), directory graphics/tiff

    diff --git a/external/tiff-4.0.9/html/v3.4beta031.html b/external/tiff-4.1.0/html/v3.4beta031.html similarity index 96% rename from external/tiff-4.0.9/html/v3.4beta031.html rename to external/tiff-4.1.0/html/v3.4beta031.html index 5f350c78..137368da 100644 --- a/external/tiff-4.0.9/html/v3.4beta031.html +++ b/external/tiff-4.1.0/html/v3.4beta031.html @@ -16,7 +16,7 @@
    Current Version: v3.4beta031
    Previous Version: v3.4beta029
    -Master FTP Site: ftp.sgi.com (192.48.153.1), directory graphics/tiff
    +Master Download Site: ftp.sgi.com (192.48.153.1), directory graphics/tiff

    diff --git a/external/tiff-4.0.9/html/v3.4beta032.html b/external/tiff-4.1.0/html/v3.4beta032.html similarity index 95% rename from external/tiff-4.0.9/html/v3.4beta032.html rename to external/tiff-4.1.0/html/v3.4beta032.html index 87d18cd8..4651539e 100644 --- a/external/tiff-4.0.9/html/v3.4beta032.html +++ b/external/tiff-4.1.0/html/v3.4beta032.html @@ -16,7 +16,7 @@
    Current Version: v3.4beta032
    Previous Version: v3.4beta031
    -Master FTP Site: ftp.sgi.com (192.48.153.1), directory graphics/tiff
    +Master Download Site: ftp.sgi.com (192.48.153.1), directory graphics/tiff

    diff --git a/external/tiff-4.0.9/html/v3.4beta033.html b/external/tiff-4.1.0/html/v3.4beta033.html similarity index 94% rename from external/tiff-4.0.9/html/v3.4beta033.html rename to external/tiff-4.1.0/html/v3.4beta033.html index a6a6bbe2..f311e6a3 100644 --- a/external/tiff-4.0.9/html/v3.4beta033.html +++ b/external/tiff-4.1.0/html/v3.4beta033.html @@ -16,7 +16,7 @@
    Current Version: v3.4beta033 (aka the v3.4 release)
    Previous Version: v3.4beta032
    -Master FTP Site: ftp.sgi.com (192.48.153.1), directory graphics/tiff
    +Master Download Site: ftp.sgi.com (192.48.153.1), directory graphics/tiff

    diff --git a/external/tiff-4.0.9/html/v3.4beta034.html b/external/tiff-4.1.0/html/v3.4beta034.html similarity index 93% rename from external/tiff-4.0.9/html/v3.4beta034.html rename to external/tiff-4.1.0/html/v3.4beta034.html index c7ac9bd9..a2735de2 100644 --- a/external/tiff-4.0.9/html/v3.4beta034.html +++ b/external/tiff-4.1.0/html/v3.4beta034.html @@ -16,7 +16,7 @@
    Current Version: v3.4beta034
    Previous Version: v3.4beta033
    -Master FTP Site: ftp.sgi.com (192.48.153.1), directory graphics/tiff
    +Master Download Site: ftp.sgi.com (192.48.153.1), directory graphics/tiff

    diff --git a/external/tiff-4.0.9/html/v3.4beta035.html b/external/tiff-4.1.0/html/v3.4beta035.html similarity index 92% rename from external/tiff-4.0.9/html/v3.4beta035.html rename to external/tiff-4.1.0/html/v3.4beta035.html index 72c00907..5b0901d3 100644 --- a/external/tiff-4.0.9/html/v3.4beta035.html +++ b/external/tiff-4.1.0/html/v3.4beta035.html @@ -16,7 +16,7 @@
    Current Version: v3.4beta035
    Previous Version: v3.4beta034
    -Master FTP Site: ftp.sgi.com (192.48.153.1), directory graphics/tiff
    +Master Download Site: ftp.sgi.com (192.48.153.1), directory graphics/tiff

    diff --git a/external/tiff-4.0.9/html/v3.4beta036.html b/external/tiff-4.1.0/html/v3.4beta036.html similarity index 97% rename from external/tiff-4.0.9/html/v3.4beta036.html rename to external/tiff-4.1.0/html/v3.4beta036.html index 7a2fa8b3..a853113d 100644 --- a/external/tiff-4.0.9/html/v3.4beta036.html +++ b/external/tiff-4.1.0/html/v3.4beta036.html @@ -16,7 +16,7 @@
    Current Version: v3.4beta036
    Previous Version: v3.4beta035
    -Master FTP Site: ftp.sgi.com (192.48.153.1), directory graphics/tiff
    +Master Download Site: ftp.sgi.com (192.48.153.1), directory graphics/tiff

    diff --git a/external/tiff-4.0.9/html/v3.5.1.html b/external/tiff-4.1.0/html/v3.5.1.html similarity index 94% rename from external/tiff-4.0.9/html/v3.5.1.html rename to external/tiff-4.1.0/html/v3.5.1.html index 365700ce..e3ee7077 100644 --- a/external/tiff-4.0.9/html/v3.5.1.html +++ b/external/tiff-4.1.0/html/v3.5.1.html @@ -17,7 +17,7 @@
    Current Version: v3.5.1
    Previous Version: v3.4beta037
    -Master FTP Site: ftp.onshore.com, directory graphics/tiff
    +Master Download Site: ftp.onshore.com, directory graphics/tiff
    Master HTTP Site: ftp.onshore.com, directory graphics/tiff
    +Master Download Site: ftp.onshore.com, directory graphics/tiff
    Master HTTP Site: http://www.simplesystems.org/libtiff/
    diff --git a/external/tiff-4.0.9/html/v3.5.3.html b/external/tiff-4.1.0/html/v3.5.3.html similarity index 95% rename from external/tiff-4.0.9/html/v3.5.3.html rename to external/tiff-4.1.0/html/v3.5.3.html index 78f46983..9ea78562 100644 --- a/external/tiff-4.0.9/html/v3.5.3.html +++ b/external/tiff-4.1.0/html/v3.5.3.html @@ -17,7 +17,7 @@
    Current Version: v3.5.3
    Previous Version: v3.5.2
    -Master FTP Site: ftp.onshore.com, directory pub/libtiff
    +Master Download Site: ftp.onshore.com, directory pub/libtiff
    Master HTTP Site: http://www.simplesystems.org/libtiff/
    @@ -49,7 +49,7 @@ Unisys license to use LZW in free software that complies with the Open Source Definition

    -Unfortunatly, the removal of LZW compression means that saved image size has +Unfortunately, the removal of LZW compression means that saved image size has grown dramatically. Without a change in the TIFF spec to support another lossless compression format, this is unavoidable.

    diff --git a/external/tiff-4.0.9/html/v3.5.4.html b/external/tiff-4.1.0/html/v3.5.4.html similarity index 94% rename from external/tiff-4.0.9/html/v3.5.4.html rename to external/tiff-4.1.0/html/v3.5.4.html index 1d988bf6..7e3eb841 100644 --- a/external/tiff-4.0.9/html/v3.5.4.html +++ b/external/tiff-4.1.0/html/v3.5.4.html @@ -17,7 +17,7 @@


    Current Version: v3.5.4
    Previous Version: v3.5.3
    -Master FTP Site: ftp.onshore.com, directory pub/libtiff
    +Master Download Site: ftp.onshore.com, directory pub/libtiff
    Master HTTP Site: http://www.simplesystems.org/libtiff/
    diff --git a/external/tiff-4.0.9/html/v3.5.5.html b/external/tiff-4.1.0/html/v3.5.5.html similarity index 97% rename from external/tiff-4.0.9/html/v3.5.5.html rename to external/tiff-4.1.0/html/v3.5.5.html index 0b67f5cd..779e3772 100644 --- a/external/tiff-4.0.9/html/v3.5.5.html +++ b/external/tiff-4.1.0/html/v3.5.5.html @@ -17,7 +17,7 @@
    Current Version: v3.5.5
    Previous Version: v3.5.4
    -Master FTP Site: ftp.onshore.com, directory pub/libtiff
    +Master Download Site: ftp.onshore.com, directory pub/libtiff
    Master HTTP Site: http://www.simplesystems.org/libtiff/
    diff --git a/external/tiff-4.0.9/html/v3.5.6-beta.html b/external/tiff-4.1.0/html/v3.5.6-beta.html similarity index 96% rename from external/tiff-4.0.9/html/v3.5.6-beta.html rename to external/tiff-4.1.0/html/v3.5.6-beta.html index b552c371..498cc439 100644 --- a/external/tiff-4.0.9/html/v3.5.6-beta.html +++ b/external/tiff-4.1.0/html/v3.5.6-beta.html @@ -17,7 +17,7 @@
    Current Version: v3.5.6beta
    Previous Version: v3.5.5
    -Master FTP Site: ftp.onshore.com, directory pub/libtiff
    +Master Download Site: ftp.onshore.com, directory pub/libtiff
    Master HTTP Site: http://www.simplesystems.org/libtiff/
    @@ -112,7 +112,7 @@
  • Modified tiffio.h logic with regard to including windows.h. It won't include it when building with __CYGWIN__. -
  • README: update to mention www.libtiff.org, don't list Sam's old +
  • README: update to mention {REDACTED - defunct web site}, don't list Sam's old email address.
  • libtiff/tif_dirread.c: Don't use estimate strip byte count for diff --git a/external/tiff-4.0.9/html/v3.5.7.html b/external/tiff-4.1.0/html/v3.5.7.html similarity index 98% rename from external/tiff-4.0.9/html/v3.5.7.html rename to external/tiff-4.1.0/html/v3.5.7.html index 96f47916..b68e29ee 100644 --- a/external/tiff-4.0.9/html/v3.5.7.html +++ b/external/tiff-4.1.0/html/v3.5.7.html @@ -17,7 +17,7 @@
    Current Version: v3.5.7
    Previous Version: v3.5.6 Beta
    -Master FTP Site: download.osgeo.org, directory pub/libtiff
    +Master Download Site: download.osgeo.org, directory pub/libtiff
    Master HTTP Site: http://www.simplesystems.org/libtiff/
    @@ -200,7 +200,7 @@ sizes. (Bug 35) It fixes two problems:
    Without scaling (-S) the fax is now centered on the page size specified - with -H and/or -W. Before, fax2ps was using an obscure and practially + with -H and/or -W. Before, fax2ps was using an obscure and practically useless algorithm to allocate the image relative to Letter sized paper which sometime sled to useless whitespace on the paper, while at the same time cutting of the faxes printable area at the opposite border. diff --git a/external/tiff-4.0.9/html/v3.6.0.html b/external/tiff-4.1.0/html/v3.6.0.html similarity index 98% rename from external/tiff-4.0.9/html/v3.6.0.html rename to external/tiff-4.1.0/html/v3.6.0.html index c53cd155..11b10af0 100644 --- a/external/tiff-4.0.9/html/v3.6.0.html +++ b/external/tiff-4.1.0/html/v3.6.0.html @@ -17,7 +17,7 @@
    Current Version: v3.6.0
    Previous Version: v3.5.7
    -Master FTP Site: +Master Download Site: download.osgeo.org, directory pub/libtiff
    Master HTTP Site: http://www.simplesystems.org/libtiff/ @@ -64,12 +64,12 @@

    Custom Tag Support

    software that used the private data structures.

    Also, any tag not recognised -by libtiff would not be read and accessable to applications without some +by libtiff would not be read and accessible to applications without some fairly complicated work on the applications part to pre-register the tags as exemplified by the support for "Geo"TIFF tags by libgeotiff layered on libtiff.

    -Amoung other things this approach required the extension code +Among other things this approach required the extension code to access the private libtiff structures ... which made the higher level non-libtiff code be locked into a specific version of libtiff at compile time. This caused no end of bug reports!

    diff --git a/external/tiff-4.0.9/html/v3.6.1.html b/external/tiff-4.1.0/html/v3.6.1.html similarity index 98% rename from external/tiff-4.0.9/html/v3.6.1.html rename to external/tiff-4.1.0/html/v3.6.1.html index 3d6d838d..3f0e93c3 100644 --- a/external/tiff-4.0.9/html/v3.6.1.html +++ b/external/tiff-4.1.0/html/v3.6.1.html @@ -17,7 +17,7 @@


    Current Version: v3.6.1
    Previous Version: v3.6.0
    -Master FTP Site: +Master Download Site: download.osgeo.org, directory pub/libtiff
    Master HTTP Site: http://www.simplesystems.org/libtiff/ @@ -116,7 +116,7 @@ it was done in 3.6.0).
  • libtiff/{tiff.h, tif_dirinfo.c}: Added support for IFD (13) datatype, -intruduced in "Adobe PageMaker TIFF Technical Notes". +introduced in "Adobe PageMaker TIFF Technical Notes".
  • libtiff/{tif_color.c, tif_getimage.c, tiffio.h}: New color space conversion code: CIE L*a*b* 1976 images now supported by the TIFFRGBAImage diff --git a/external/tiff-4.0.9/html/v3.7.0.html b/external/tiff-4.1.0/html/v3.7.0.html similarity index 98% rename from external/tiff-4.0.9/html/v3.7.0.html rename to external/tiff-4.1.0/html/v3.7.0.html index 777782fa..c70e8e72 100644 --- a/external/tiff-4.0.9/html/v3.7.0.html +++ b/external/tiff-4.1.0/html/v3.7.0.html @@ -17,7 +17,7 @@
    Current Version: v3.7.0
    Previous Version: v3.7.0beta2
    -Master FTP Site: +Master Download Site: download.osgeo.org, directory pub/libtiff
    Master HTTP Site: http://www.simplesystems.org/libtiff/ diff --git a/external/tiff-4.0.9/html/v3.7.0alpha.html b/external/tiff-4.1.0/html/v3.7.0alpha.html similarity index 99% rename from external/tiff-4.0.9/html/v3.7.0alpha.html rename to external/tiff-4.1.0/html/v3.7.0alpha.html index 5f1aed9c..5ce60069 100644 --- a/external/tiff-4.0.9/html/v3.7.0alpha.html +++ b/external/tiff-4.1.0/html/v3.7.0alpha.html @@ -17,7 +17,7 @@
    Current Version: v3.7.0alpha
    Previous Version: v3.6.1
    -Master FTP Site: +Master Download Site: download.osgeo.org, directory pub/libtiff
    Master HTTP Site: http://www.simplesystems.org/libtiff/ diff --git a/external/tiff-4.0.9/html/v3.7.0beta.html b/external/tiff-4.1.0/html/v3.7.0beta.html similarity index 98% rename from external/tiff-4.0.9/html/v3.7.0beta.html rename to external/tiff-4.1.0/html/v3.7.0beta.html index 6ec852bc..a29e521f 100644 --- a/external/tiff-4.0.9/html/v3.7.0beta.html +++ b/external/tiff-4.1.0/html/v3.7.0beta.html @@ -17,7 +17,7 @@
    Current Version: v3.7.0beta
    Previous Version: v3.7.0alpha
    -Master FTP Site: +Master Download Site: download.osgeo.org, directory pub/libtiff
    Master HTTP Site: http://www.simplesystems.org/libtiff/ diff --git a/external/tiff-4.0.9/html/v3.7.0beta2.html b/external/tiff-4.1.0/html/v3.7.0beta2.html similarity index 97% rename from external/tiff-4.0.9/html/v3.7.0beta2.html rename to external/tiff-4.1.0/html/v3.7.0beta2.html index 4c430177..9a313aca 100644 --- a/external/tiff-4.0.9/html/v3.7.0beta2.html +++ b/external/tiff-4.1.0/html/v3.7.0beta2.html @@ -17,7 +17,7 @@
    Current Version: v3.7.0beta2
    Previous Version: v3.7.0beta
    -Master FTP Site: +Master Download Site: download.osgeo.org, directory pub/libtiff
    Master HTTP Site: http://www.simplesystems.org/libtiff/ diff --git a/external/tiff-4.0.9/html/v3.7.1.html b/external/tiff-4.1.0/html/v3.7.1.html similarity index 99% rename from external/tiff-4.0.9/html/v3.7.1.html rename to external/tiff-4.1.0/html/v3.7.1.html index 6794a8d5..3e332b14 100644 --- a/external/tiff-4.0.9/html/v3.7.1.html +++ b/external/tiff-4.1.0/html/v3.7.1.html @@ -17,7 +17,7 @@
    Current Version: v3.7.1
    Previous Version: v3.7.0
    -Master FTP Site: +Master Download Site: download.osgeo.org, directory pub/libtiff
    Master HTTP Site: http://www.simplesystems.org/libtiff/ diff --git a/external/tiff-4.0.9/html/v3.7.2.html b/external/tiff-4.1.0/html/v3.7.2.html similarity index 98% rename from external/tiff-4.0.9/html/v3.7.2.html rename to external/tiff-4.1.0/html/v3.7.2.html index 45347b72..2be1edef 100644 --- a/external/tiff-4.0.9/html/v3.7.2.html +++ b/external/tiff-4.1.0/html/v3.7.2.html @@ -17,7 +17,7 @@
    Current Version: v3.7.2
    Previous Version: v3.7.1
    -Master FTP Site: +Master Download Site: download.osgeo.org, directory pub/libtiff
    Master HTTP Site: http://www.simplesystems.org/libtiff/ @@ -46,7 +46,7 @@
      -
    • Maintainance release. Many bugfixes in the build environment +
    • Maintenance release. Many bugfixes in the build environment and compatibility improvements.
    diff --git a/external/tiff-4.0.9/html/v3.7.3.html b/external/tiff-4.1.0/html/v3.7.3.html similarity index 98% rename from external/tiff-4.0.9/html/v3.7.3.html rename to external/tiff-4.1.0/html/v3.7.3.html index 28981aef..c3aafff4 100644 --- a/external/tiff-4.0.9/html/v3.7.3.html +++ b/external/tiff-4.1.0/html/v3.7.3.html @@ -17,7 +17,7 @@
    Current Version: v3.7.3
    Previous Version: v3.7.2
    -Master FTP Site: +Master Download Site: download.osgeo.org, directory pub/libtiff
    Master HTTP Site: http://www.simplesystems.org/libtiff/ @@ -45,7 +45,7 @@ MAJOR CHANGES:
      -
    • Replace runtime endianess check with the compile time one. +
    • Replace runtime endianness check with the compile time one.
    • Added support for the new predictor type (floating point predictor), defined at the TIFF Technical Note 3. diff --git a/external/tiff-4.0.9/html/v3.7.4.html b/external/tiff-4.1.0/html/v3.7.4.html similarity index 98% rename from external/tiff-4.0.9/html/v3.7.4.html rename to external/tiff-4.1.0/html/v3.7.4.html index 8b4e5dd8..465af218 100644 --- a/external/tiff-4.0.9/html/v3.7.4.html +++ b/external/tiff-4.1.0/html/v3.7.4.html @@ -17,7 +17,7 @@
      Current Version: v3.7.4
      Previous Version: v3.7.3
      -Master FTP Site: +Master Download Site: download.osgeo.org, directory pub/libtiff
      Master HTTP Site: http://www.simplesystems.org/libtiff/ diff --git a/external/tiff-4.0.9/html/v3.8.0.html b/external/tiff-4.1.0/html/v3.8.0.html similarity index 98% rename from external/tiff-4.0.9/html/v3.8.0.html rename to external/tiff-4.1.0/html/v3.8.0.html index 05a96c72..8ac23f38 100644 --- a/external/tiff-4.0.9/html/v3.8.0.html +++ b/external/tiff-4.1.0/html/v3.8.0.html @@ -17,7 +17,7 @@
      Current Version: v3.8.0
      Previous Version: v3.7.4
      -Master FTP Site: +Master Download Site: download.osgeo.org, directory pub/libtiff
      Master HTTP Site: http://www.simplesystems.org/libtiff/ diff --git a/external/tiff-4.0.9/html/v3.8.1.html b/external/tiff-4.1.0/html/v3.8.1.html similarity index 99% rename from external/tiff-4.0.9/html/v3.8.1.html rename to external/tiff-4.1.0/html/v3.8.1.html index c4710f1d..6b069e32 100644 --- a/external/tiff-4.0.9/html/v3.8.1.html +++ b/external/tiff-4.1.0/html/v3.8.1.html @@ -17,7 +17,7 @@
      Current Version: v3.8.1
      Previous Version: v3.8.0
      -Master FTP Site: +Master Download Site: download.osgeo.org, directory pub/libtiff
      Master HTTP Site: http://www.simplesystems.org/libtiff/ diff --git a/external/tiff-4.0.9/html/v3.8.2.html b/external/tiff-4.1.0/html/v3.8.2.html similarity index 98% rename from external/tiff-4.0.9/html/v3.8.2.html rename to external/tiff-4.1.0/html/v3.8.2.html index 8d64ef73..10fa57d2 100644 --- a/external/tiff-4.0.9/html/v3.8.2.html +++ b/external/tiff-4.1.0/html/v3.8.2.html @@ -17,7 +17,7 @@
      Current Version: v3.8.2
      Previous Version: v3.8.1
      -Master FTP Site: +Master Download Site: download.osgeo.org, directory pub/libtiff
      Master HTTP Site: http://www.simplesystems.org/libtiff/ diff --git a/external/tiff-4.0.9/html/v3.9.0beta.html b/external/tiff-4.1.0/html/v3.9.0beta.html similarity index 99% rename from external/tiff-4.0.9/html/v3.9.0beta.html rename to external/tiff-4.1.0/html/v3.9.0beta.html index 52def61b..e973ca8b 100644 --- a/external/tiff-4.0.9/html/v3.9.0beta.html +++ b/external/tiff-4.1.0/html/v3.9.0beta.html @@ -17,7 +17,7 @@
      Current Version: v3.9.0beta
      Previous Version: v3.8.2
      -Master FTP Site: +Master Download Site: download.osgeo.org, directory pub/libtiff
      Master HTTP Site: http://www.simplesystems.org/libtiff/ diff --git a/external/tiff-4.0.9/html/v3.9.1.html b/external/tiff-4.1.0/html/v3.9.1.html similarity index 97% rename from external/tiff-4.0.9/html/v3.9.1.html rename to external/tiff-4.1.0/html/v3.9.1.html index 0cffd21c..fc6bca19 100644 --- a/external/tiff-4.0.9/html/v3.9.1.html +++ b/external/tiff-4.1.0/html/v3.9.1.html @@ -17,7 +17,7 @@
      Current Version: v3.9.1
      Previous Version: v3.9.1
      -Master FTP Site: +Master Download Site: download.osgeo.org, directory pub/libtiff
      Master HTTP Site: http://www.simplesystems.org/libtiff/ diff --git a/external/tiff-4.0.9/html/v3.9.2.html b/external/tiff-4.1.0/html/v3.9.2.html similarity index 97% rename from external/tiff-4.0.9/html/v3.9.2.html rename to external/tiff-4.1.0/html/v3.9.2.html index 83f2cc9f..34a117a4 100644 --- a/external/tiff-4.0.9/html/v3.9.2.html +++ b/external/tiff-4.1.0/html/v3.9.2.html @@ -17,7 +17,7 @@
      Current Version: v3.9.2
      Previous Version: v3.9.1
      -Master FTP Site: +Master Download Site: download.osgeo.org, directory pub/libtiff
      Master HTTP Site: http://www.simplesystems.org/libtiff/ diff --git a/external/tiff-4.0.9/html/v4.0.0.html b/external/tiff-4.1.0/html/v4.0.0.html similarity index 98% rename from external/tiff-4.0.9/html/v4.0.0.html rename to external/tiff-4.1.0/html/v4.0.0.html index d869c17c..f64208ac 100644 --- a/external/tiff-4.0.9/html/v4.0.0.html +++ b/external/tiff-4.1.0/html/v4.0.0.html @@ -17,10 +17,10 @@
      Current Version: v4.0.0
      Previous Version: v3.9.5
      -Master FTP Site: +Master Download Site: download.osgeo.org, directory pub/libtiff
      -Master HTTP Site: -ftp://download.osgeo.org/libtiff +Master HTTP Site: +https://download.osgeo.org/libtiff
    diff --git a/external/tiff-4.0.9/html/v4.0.1.html b/external/tiff-4.1.0/html/v4.0.1.html similarity index 97% rename from external/tiff-4.0.9/html/v4.0.1.html rename to external/tiff-4.1.0/html/v4.0.1.html index d75cd240..b4a8bc2f 100644 --- a/external/tiff-4.0.9/html/v4.0.1.html +++ b/external/tiff-4.1.0/html/v4.0.1.html @@ -16,7 +16,7 @@
    Current Version: v4.0.1
    Previous Version: v4.0.0
    -Master FTP Site: +Master Download Site: download.osgeo.org, directory pub/libtiff
    Master HTTP Site: http://www.simplesystems.org/libtiff/ diff --git a/external/tiff-4.1.0/html/v4.0.10.html b/external/tiff-4.1.0/html/v4.0.10.html new file mode 100644 index 00000000..b7d87361 --- /dev/null +++ b/external/tiff-4.1.0/html/v4.0.10.html @@ -0,0 +1,326 @@ + + + + Changes in TIFF v4.0.10 + + + + + + + + +TIFF CHANGE INFORMATION + + + + +

    +This document describes the changes made to the software between the +previous and current versions (see above). If you don't +find something listed here, then it was not done in this timeframe, or +it was not considered important enough to be mentioned. The following +information is located here: +

    +

    +


    + + + +MAJOR CHANGES: + +
      + +
    • The libtiff source repository is changed from CVS to Git and the master libtiff source repository is now at Gitlab. This is the first release to be made from the new Git repository.
    • + +
    + + +


    + + +CHANGES IN THE SOFTWARE CONFIGURATION: + +
      + +
    • Minimum CMake version is now v2.8.11 for the CMake-based build.
    • + +
    • Libwebp will be automatically detected and used by configure/cmake if present. + +
    • Libzstd will be automatically detected and used by configure/cmake if present. + + +
    + +


    + + + +CHANGES IN LIBTIFF: + + + +


    + + + +CHANGES IN THE TOOLS: + + + +


    + + + +CHANGES IN THE CONTRIB AREA: + +
      + +
    • None
    • + +
    + + + diff --git a/external/tiff-4.0.9/html/v4.0.2.html b/external/tiff-4.1.0/html/v4.0.2.html similarity index 97% rename from external/tiff-4.0.9/html/v4.0.2.html rename to external/tiff-4.1.0/html/v4.0.2.html index 8dade5f3..91f20dde 100644 --- a/external/tiff-4.0.9/html/v4.0.2.html +++ b/external/tiff-4.1.0/html/v4.0.2.html @@ -16,7 +16,7 @@
    Current Version: v4.0.2
    Previous Version: v4.0.1
    -Master FTP Site: +Master Download Site: download.osgeo.org, directory pub/libtiff
    Master HTTP Site: http://www.simplesystems.org/libtiff/ diff --git a/external/tiff-4.0.9/html/v4.0.3.html b/external/tiff-4.1.0/html/v4.0.3.html similarity index 97% rename from external/tiff-4.0.9/html/v4.0.3.html rename to external/tiff-4.1.0/html/v4.0.3.html index 1e9e7925..14ccfb39 100644 --- a/external/tiff-4.0.9/html/v4.0.3.html +++ b/external/tiff-4.1.0/html/v4.0.3.html @@ -16,7 +16,7 @@
    Current Version: v4.0.3
    Previous Version: v4.0.2
    -Master FTP Site: +Master Download Site: download.osgeo.org, directory pub/libtiff
    Master HTTP Site: http://www.simplesystems.org/libtiff/ diff --git a/external/tiff-4.0.9/html/v4.0.4.html b/external/tiff-4.1.0/html/v4.0.4.html similarity index 99% rename from external/tiff-4.0.9/html/v4.0.4.html rename to external/tiff-4.1.0/html/v4.0.4.html index 6ddf2a1e..a5691140 100644 --- a/external/tiff-4.0.9/html/v4.0.4.html +++ b/external/tiff-4.1.0/html/v4.0.4.html @@ -16,7 +16,7 @@
    Current Version: v4.0.4
    Previous Version: v4.0.4beta
    -Master FTP Site: +Master Download Site: download.osgeo.org, directory pub/libtiff
    Master HTTP Site: http://www.simplesystems.org/libtiff/ diff --git a/external/tiff-4.0.9/html/v4.0.4beta.html b/external/tiff-4.1.0/html/v4.0.4beta.html similarity index 99% rename from external/tiff-4.0.9/html/v4.0.4beta.html rename to external/tiff-4.1.0/html/v4.0.4beta.html index 28c543fd..e06a2c22 100644 --- a/external/tiff-4.0.9/html/v4.0.4beta.html +++ b/external/tiff-4.1.0/html/v4.0.4beta.html @@ -16,7 +16,7 @@
    Current Version: v4.0.4beta
    Previous Version: v4.0.3
    -Master FTP Site: +Master Download Site: download.osgeo.org, directory pub/libtiff
    Master HTTP Site: http://www.simplesystems.org/libtiff/ diff --git a/external/tiff-4.0.9/html/v4.0.5.html b/external/tiff-4.1.0/html/v4.0.5.html similarity index 98% rename from external/tiff-4.0.9/html/v4.0.5.html rename to external/tiff-4.1.0/html/v4.0.5.html index ac91d72f..c638638a 100644 --- a/external/tiff-4.0.9/html/v4.0.5.html +++ b/external/tiff-4.1.0/html/v4.0.5.html @@ -16,7 +16,7 @@
    Current Version: v4.0.5
    Previous Version: v4.0.4
    -Master FTP Site: +Master Download Site: download.osgeo.org, directory pub/libtiff
    Master HTTP Site: http://www.simplesystems.org/libtiff/ diff --git a/external/tiff-4.0.9/html/v4.0.6.html b/external/tiff-4.1.0/html/v4.0.6.html similarity index 98% rename from external/tiff-4.0.9/html/v4.0.6.html rename to external/tiff-4.1.0/html/v4.0.6.html index 31749199..8fc63b5c 100644 --- a/external/tiff-4.0.9/html/v4.0.6.html +++ b/external/tiff-4.1.0/html/v4.0.6.html @@ -16,7 +16,7 @@
    Current Version: v4.0.6
    Previous Version: v4.0.5
    -Master FTP Site: +Master Download Site: download.osgeo.org, directory pub/libtiff
    Master HTTP Site: http://www.simplesystems.org/libtiff/ diff --git a/external/tiff-4.0.9/html/v4.0.7.html b/external/tiff-4.1.0/html/v4.0.7.html similarity index 99% rename from external/tiff-4.0.9/html/v4.0.7.html rename to external/tiff-4.1.0/html/v4.0.7.html index e29e8d53..e1b5dec9 100644 --- a/external/tiff-4.0.9/html/v4.0.7.html +++ b/external/tiff-4.1.0/html/v4.0.7.html @@ -16,7 +16,7 @@
    Current Version: v4.0.7
    Previous Version: v4.0.6
    -Master FTP Site: +Master Download Site: download.osgeo.org, directory pub/libtiff
    Master HTTP Site #1: http://www.simplesystems.org/libtiff/
    diff --git a/external/tiff-4.0.9/html/v4.0.8.html b/external/tiff-4.1.0/html/v4.0.8.html similarity index 99% rename from external/tiff-4.0.9/html/v4.0.8.html rename to external/tiff-4.1.0/html/v4.0.8.html index 8b85e9c2..86db3bbf 100644 --- a/external/tiff-4.0.9/html/v4.0.8.html +++ b/external/tiff-4.1.0/html/v4.0.8.html @@ -16,7 +16,7 @@
    Current Version: v4.0.8
    Previous Version: v4.0.7
    -Master FTP Site: +Master Download Site: download.osgeo.org, directory pub/libtiff
    Master HTTP Site #1: http://www.simplesystems.org/libtiff/
    diff --git a/external/tiff-4.0.9/html/v4.0.9.html b/external/tiff-4.1.0/html/v4.0.9.html similarity index 99% rename from external/tiff-4.0.9/html/v4.0.9.html rename to external/tiff-4.1.0/html/v4.0.9.html index 9be5f274..4efe987f 100644 --- a/external/tiff-4.0.9/html/v4.0.9.html +++ b/external/tiff-4.1.0/html/v4.0.9.html @@ -16,7 +16,7 @@
    Current Version: v4.0.9
    Previous Version: v4.0.8
    -Master FTP Site: +Master Download Site: download.osgeo.org, directory pub/libtiff
    Master HTTP Site #1: http://www.simplesystems.org/libtiff/
    diff --git a/external/tiff-4.1.0/html/v4.1.0.html b/external/tiff-4.1.0/html/v4.1.0.html new file mode 100644 index 00000000..7c61fac7 --- /dev/null +++ b/external/tiff-4.1.0/html/v4.1.0.html @@ -0,0 +1,198 @@ + + + + Changes in TIFF v4.1.0 + + + + + + + + +TIFF CHANGE INFORMATION + + + + +

    +This document describes the changes made to the software between the +previous and current versions (see above). If you don't +find something listed here, then it was not done in this timeframe, or +it was not considered important enough to be mentioned. The following +information is located here. A change summary is also provided by the +ChangeLog file included in the release package and by the Git commit +history: +

    +

    +


    + + + +MAJOR CHANGES: + +
      + +
    • Make defer strile offset/bytecount loading available at runtime + and add per-strile offset/bytecount loading capabilities. Part of + this commit makes the behaviour that was previously met when libtiff + was compiled with -DDEFER_STRILE_LOAD available for default builds + when specifying the new 'D' (Deferred) TIFFOpen() flag. In that + mode, the [Tile/Strip][ByteCounts/Offsets] arrays are only loaded + when first accessed. This can speed-up the opening of files stored + on the network when just metadata retrieval is needed. + + Another addition is the capability of loading only the values of + the offset/bytecount of the strile of interest instead of the + whole array. This is enabled with the new 'O' (Ondemand) flag of + TIFFOpen() (which implies 'D'). + + The public TIFFGetStrileOffset[WithErr]() and + TIFFGetStrileByteCount[WithErr]() functions have been added to + API. They are of particular interest when using sparse files (with + offset == bytecount == 0) and you want to detect if a strile is + present or not without decompressing the data, or updating an + existing sparse file. +
    • + +
    • The BigTIFF writer now optimizes file size by using 32-bit LONG + values (rather than 64-bit) where it is reasonable and safe to do + so. Likewise, the 16-bit SHORT type is used when possible for + StripByteCounts/TileByteCounts. +
    • + +
    + + +


    + + +CHANGES IN THE SOFTWARE CONFIGURATION: + +
      + +
    • The WIN32 build now uses tif_win32.c when building with CMake.
    • + +
    • Properly set value of HOST_FILLORDER to LSB2MSB for Windows + CMake builds. It was not being properly set!
    • + +
    + +


    + + + +CHANGES IN LIBTIFF: + +
      + +
    • + Changes in the libtiff library may be viewed on-line + at Libtiff + Library Commits. +
    • + +
    • + New function TIFFReadFromUserBuffer() which replaces the use of + TIFFReadEncodedStrip()/TIFFReadEncodedTile() when the user can + provide the buffer for the input data, for example when he wants + to avoid libtiff to read the strile offset/count values from the + [Strip|Tile][Offsets/ByteCounts] array. +
    • + +
    • + New functions TIFFDeferStrileArrayWriting() and TIFFForceStrileArrayWriting() + Those advanced writing functions must be used in a particular sequence + to make their intended effect. Their aim is to control when/where + the [Strip/Tile][Offsets/ByteCounts] arrays are written into the file. + + The purpose of this is to generate 'cloud-optimized geotiff' files where + the first KB of the file only contain the IFD entries without the potentially + large strile arrays. Those are written afterwards. +
    • + +
    + +


    + + + +CHANGES IN THE TOOLS: + + + +


    + + + +CHANGES IN THE CONTRIB AREA: + + + + + diff --git a/external/tiff-4.0.9/libtiff-4.pc.in b/external/tiff-4.1.0/libtiff-4.pc.in similarity index 100% rename from external/tiff-4.0.9/libtiff-4.pc.in rename to external/tiff-4.1.0/libtiff-4.pc.in diff --git a/external/tiff-4.0.9/libtiff/CMakeLists.txt b/external/tiff-4.1.0/libtiff/CMakeLists.txt similarity index 94% rename from external/tiff-4.0.9/libtiff/CMakeLists.txt rename to external/tiff-4.1.0/libtiff/CMakeLists.txt index 087dfa9e..080685db 100644 --- a/external/tiff-4.0.9/libtiff/CMakeLists.txt +++ b/external/tiff-4.1.0/libtiff/CMakeLists.txt @@ -93,8 +93,10 @@ set(tiff_SOURCES tif_tile.c tif_version.c tif_warning.c + tif_webp.c tif_write.c - tif_zip.c) + tif_zip.c + tif_zstd.c) set(tiffxx_HEADERS tiffio.hxx) @@ -102,7 +104,7 @@ set(tiffxx_HEADERS set(tiffxx_SOURCES tif_stream.cxx) -if(WIN32_IO) +if(USE_WIN32_FILEIO) extra_dist(tif_unix.c) list(APPEND tiff_SOURCES tif_win32.c) else() @@ -110,12 +112,14 @@ else() list(APPEND tiff_SOURCES tif_unix.c) endif() -include_directories(${CMAKE_CURRENT_SOURCE_DIR} - ${CMAKE_CURRENT_BINARY_DIR} - ${TIFF_INCLUDES}) - add_library(tiff ${tiff_SOURCES} ${tiff_HEADERS} ${nodist_tiff_HEADERS} ${tiff_port_SOURCES} libtiff.def) +target_include_directories(tiff + PUBLIC + $ + $ + ${TIFF_INCLUDES} +) target_link_libraries(tiff ${TIFF_LIBRARY_DEPS}) set_target_properties(tiff PROPERTIES SOVERSION ${SO_COMPATVERSION}) if(NOT CYGWIN) @@ -138,7 +142,7 @@ install(TARGETS tiff install(FILES ${tiff_HEADERS} ${nodist_tiff_HEADERS} DESTINATION "${CMAKE_INSTALL_FULL_INCLUDEDIR}") -if(cxx) +if(CXX_SUPPORT) add_library(tiffxx ${tiffxx_SOURCES} ${tiffxx_HEADERS}) target_link_libraries(tiffxx tiff) set_target_properties(tiffxx PROPERTIES SOVERSION ${SO_COMPATVERSION}) diff --git a/external/tiff-4.0.9/libtiff/Makefile.am b/external/tiff-4.1.0/libtiff/Makefile.am similarity index 98% rename from external/tiff-4.0.9/libtiff/Makefile.am rename to external/tiff-4.1.0/libtiff/Makefile.am index 9cbc5b1d..14a250a5 100644 --- a/external/tiff-4.0.9/libtiff/Makefile.am +++ b/external/tiff-4.1.0/libtiff/Makefile.am @@ -98,8 +98,10 @@ libtiff_la_SOURCES = \ tif_tile.c \ tif_version.c \ tif_warning.c \ + tif_webp.c \ tif_write.c \ - tif_zip.c + tif_zip.c \ + tif_zstd.c libtiffxx_la_SOURCES = \ tif_stream.cxx diff --git a/external/tiff-4.0.9/libtiff/Makefile.in b/external/tiff-4.1.0/libtiff/Makefile.in similarity index 82% rename from external/tiff-4.0.9/libtiff/Makefile.in rename to external/tiff-4.1.0/libtiff/Makefile.in index 62fb7bc8..a593fc22 100644 --- a/external/tiff-4.0.9/libtiff/Makefile.in +++ b/external/tiff-4.1.0/libtiff/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -136,10 +136,11 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__libtiffinclude_HEADERS_DIST) \ $(noinst_HEADERS) $(am__DIST_COMMON) -mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs +mkinstalldirs = $(install_sh) -d CONFIG_HEADER = tif_config.h tiffconf.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = +PROGRAMS = $(noinst_PROGRAMS) am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ @@ -180,8 +181,8 @@ am__libtiff_la_SOURCES_DIST = tif_aux.c tif_close.c tif_codec.c \ tif_lzma.c tif_lzw.c tif_next.c tif_ojpeg.c tif_open.c \ tif_packbits.c tif_pixarlog.c tif_predict.c tif_print.c \ tif_read.c tif_strip.c tif_swab.c tif_thunder.c tif_tile.c \ - tif_version.c tif_warning.c tif_write.c tif_zip.c tif_win32.c \ - tif_unix.c + tif_version.c tif_warning.c tif_webp.c tif_write.c tif_zip.c \ + tif_zstd.c tif_win32.c tif_unix.c @WIN32_IO_TRUE@am__objects_1 = tif_win32.lo @WIN32_IO_FALSE@am__objects_2 = tif_unix.lo am_libtiff_la_OBJECTS = tif_aux.lo tif_close.lo tif_codec.lo \ @@ -193,7 +194,8 @@ am_libtiff_la_OBJECTS = tif_aux.lo tif_close.lo tif_codec.lo \ tif_open.lo tif_packbits.lo tif_pixarlog.lo tif_predict.lo \ tif_print.lo tif_read.lo tif_strip.lo tif_swab.lo \ tif_thunder.lo tif_tile.lo tif_version.lo tif_warning.lo \ - tif_write.lo tif_zip.lo $(am__objects_1) $(am__objects_2) + tif_webp.lo tif_write.lo tif_zip.lo tif_zstd.lo \ + $(am__objects_1) $(am__objects_2) libtiff_la_OBJECTS = $(am_libtiff_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) @@ -208,7 +210,6 @@ libtiffxx_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(libtiffxx_la_LDFLAGS) $(LDFLAGS) -o $@ @HAVE_CXX_TRUE@am_libtiffxx_la_rpath = -rpath $(libdir) -PROGRAMS = $(noinst_PROGRAMS) am_mkg3states_OBJECTS = mkg3states.$(OBJEXT) mkg3states_OBJECTS = $(am_mkg3states_OBJECTS) mkg3states_DEPENDENCIES = $(LIBPORT) @@ -226,7 +227,30 @@ am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/config/depcomp -am__depfiles_maybe = depfiles +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = ./$(DEPDIR)/mkg3states.Po \ + ./$(DEPDIR)/tif_aux.Plo ./$(DEPDIR)/tif_close.Plo \ + ./$(DEPDIR)/tif_codec.Plo ./$(DEPDIR)/tif_color.Plo \ + ./$(DEPDIR)/tif_compress.Plo ./$(DEPDIR)/tif_dir.Plo \ + ./$(DEPDIR)/tif_dirinfo.Plo ./$(DEPDIR)/tif_dirread.Plo \ + ./$(DEPDIR)/tif_dirwrite.Plo ./$(DEPDIR)/tif_dumpmode.Plo \ + ./$(DEPDIR)/tif_error.Plo ./$(DEPDIR)/tif_extension.Plo \ + ./$(DEPDIR)/tif_fax3.Plo ./$(DEPDIR)/tif_fax3sm.Plo \ + ./$(DEPDIR)/tif_flush.Plo ./$(DEPDIR)/tif_getimage.Plo \ + ./$(DEPDIR)/tif_jbig.Plo ./$(DEPDIR)/tif_jpeg.Plo \ + ./$(DEPDIR)/tif_jpeg_12.Plo ./$(DEPDIR)/tif_luv.Plo \ + ./$(DEPDIR)/tif_lzma.Plo ./$(DEPDIR)/tif_lzw.Plo \ + ./$(DEPDIR)/tif_next.Plo ./$(DEPDIR)/tif_ojpeg.Plo \ + ./$(DEPDIR)/tif_open.Plo ./$(DEPDIR)/tif_packbits.Plo \ + ./$(DEPDIR)/tif_pixarlog.Plo ./$(DEPDIR)/tif_predict.Plo \ + ./$(DEPDIR)/tif_print.Plo ./$(DEPDIR)/tif_read.Plo \ + ./$(DEPDIR)/tif_stream.Plo ./$(DEPDIR)/tif_strip.Plo \ + ./$(DEPDIR)/tif_swab.Plo ./$(DEPDIR)/tif_thunder.Plo \ + ./$(DEPDIR)/tif_tile.Plo ./$(DEPDIR)/tif_unix.Plo \ + ./$(DEPDIR)/tif_version.Plo ./$(DEPDIR)/tif_warning.Plo \ + ./$(DEPDIR)/tif_webp.Plo ./$(DEPDIR)/tif_win32.Plo \ + ./$(DEPDIR)/tif_write.Plo ./$(DEPDIR)/tif_zip.Plo \ + ./$(DEPDIR)/tif_zstd.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @@ -298,8 +322,7 @@ am__define_uniq_tagged_files = \ ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/tif_config.h.in \ - $(srcdir)/tiffconf.h.in $(top_srcdir)/config/depcomp \ - $(top_srcdir)/config/mkinstalldirs + $(srcdir)/tiffconf.h.in $(top_srcdir)/config/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ @@ -476,8 +499,8 @@ libtiff_la_SOURCES = tif_aux.c tif_close.c tif_codec.c tif_color.c \ tif_next.c tif_ojpeg.c tif_open.c tif_packbits.c \ tif_pixarlog.c tif_predict.c tif_print.c tif_read.c \ tif_strip.c tif_swab.c tif_thunder.c tif_tile.c tif_version.c \ - tif_warning.c tif_write.c tif_zip.c $(am__append_3) \ - $(am__append_5) + tif_warning.c tif_webp.c tif_write.c tif_zip.c tif_zstd.c \ + $(am__append_3) $(am__append_5) libtiffxx_la_SOURCES = \ tif_stream.cxx @@ -513,8 +536,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -549,6 +572,15 @@ stamp-h2: $(srcdir)/tiffconf.h.in $(top_builddir)/config.status distclean-hdr: -rm -f tif_config.h stamp-h1 tiffconf.h stamp-h2 +clean-noinstPROGRAMS: + @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ @@ -590,15 +622,6 @@ libtiff.la: $(libtiff_la_OBJECTS) $(libtiff_la_DEPENDENCIES) $(EXTRA_libtiff_la_ libtiffxx.la: $(libtiffxx_la_OBJECTS) $(libtiffxx_la_DEPENDENCIES) $(EXTRA_libtiffxx_la_DEPENDENCIES) $(AM_V_CXXLD)$(libtiffxx_la_LINK) $(am_libtiffxx_la_rpath) $(libtiffxx_la_OBJECTS) $(libtiffxx_la_LIBADD) $(LIBS) -clean-noinstPROGRAMS: - @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ - echo " rm -f" $$list; \ - rm -f $$list || exit $$?; \ - test -n "$(EXEEXT)" || exit 0; \ - list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f" $$list; \ - rm -f $$list - mkg3states$(EXEEXT): $(mkg3states_OBJECTS) $(mkg3states_DEPENDENCIES) $(EXTRA_mkg3states_DEPENDENCIES) @rm -f mkg3states$(EXEEXT) $(AM_V_CCLD)$(LINK) $(mkg3states_OBJECTS) $(mkg3states_LDADD) $(LIBS) @@ -609,48 +632,56 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mkg3states.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_aux.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_close.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_codec.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_color.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_compress.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_dir.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_dirinfo.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_dirread.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_dirwrite.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_dumpmode.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_error.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_extension.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_fax3.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_fax3sm.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_flush.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_getimage.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_jbig.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_jpeg.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_jpeg_12.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_luv.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_lzma.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_lzw.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_next.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_ojpeg.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_open.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_packbits.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_pixarlog.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_predict.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_print.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_read.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_stream.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_strip.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_swab.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_thunder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_tile.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_unix.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_version.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_warning.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_win32.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_write.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_zip.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mkg3states.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_aux.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_close.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_codec.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_color.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_compress.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_dir.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_dirinfo.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_dirread.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_dirwrite.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_dumpmode.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_error.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_extension.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_fax3.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_fax3sm.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_flush.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_getimage.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_jbig.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_jpeg.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_jpeg_12.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_luv.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_lzma.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_lzw.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_next.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_ojpeg.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_open.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_packbits.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_pixarlog.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_predict.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_print.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_read.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_stream.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_strip.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_swab.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_thunder.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_tile.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_unix.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_version.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_warning.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_webp.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_win32.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_write.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_zip.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tif_zstd.Plo@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @@ -794,7 +825,10 @@ cscopelist-am: $(am__tagged_files) distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -826,7 +860,7 @@ distdir: $(DISTFILES) done check-am: all-am check: check-am -all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(HEADERS) tif_config.h \ +all-am: Makefile $(PROGRAMS) $(LTLIBRARIES) $(HEADERS) tif_config.h \ tiffconf.h installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(libtiffincludedir)" "$(DESTDIR)$(libtiffincludedir)"; do \ @@ -868,7 +902,50 @@ clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ clean-noinstPROGRAMS mostlyclean-am distclean: distclean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/mkg3states.Po + -rm -f ./$(DEPDIR)/tif_aux.Plo + -rm -f ./$(DEPDIR)/tif_close.Plo + -rm -f ./$(DEPDIR)/tif_codec.Plo + -rm -f ./$(DEPDIR)/tif_color.Plo + -rm -f ./$(DEPDIR)/tif_compress.Plo + -rm -f ./$(DEPDIR)/tif_dir.Plo + -rm -f ./$(DEPDIR)/tif_dirinfo.Plo + -rm -f ./$(DEPDIR)/tif_dirread.Plo + -rm -f ./$(DEPDIR)/tif_dirwrite.Plo + -rm -f ./$(DEPDIR)/tif_dumpmode.Plo + -rm -f ./$(DEPDIR)/tif_error.Plo + -rm -f ./$(DEPDIR)/tif_extension.Plo + -rm -f ./$(DEPDIR)/tif_fax3.Plo + -rm -f ./$(DEPDIR)/tif_fax3sm.Plo + -rm -f ./$(DEPDIR)/tif_flush.Plo + -rm -f ./$(DEPDIR)/tif_getimage.Plo + -rm -f ./$(DEPDIR)/tif_jbig.Plo + -rm -f ./$(DEPDIR)/tif_jpeg.Plo + -rm -f ./$(DEPDIR)/tif_jpeg_12.Plo + -rm -f ./$(DEPDIR)/tif_luv.Plo + -rm -f ./$(DEPDIR)/tif_lzma.Plo + -rm -f ./$(DEPDIR)/tif_lzw.Plo + -rm -f ./$(DEPDIR)/tif_next.Plo + -rm -f ./$(DEPDIR)/tif_ojpeg.Plo + -rm -f ./$(DEPDIR)/tif_open.Plo + -rm -f ./$(DEPDIR)/tif_packbits.Plo + -rm -f ./$(DEPDIR)/tif_pixarlog.Plo + -rm -f ./$(DEPDIR)/tif_predict.Plo + -rm -f ./$(DEPDIR)/tif_print.Plo + -rm -f ./$(DEPDIR)/tif_read.Plo + -rm -f ./$(DEPDIR)/tif_stream.Plo + -rm -f ./$(DEPDIR)/tif_strip.Plo + -rm -f ./$(DEPDIR)/tif_swab.Plo + -rm -f ./$(DEPDIR)/tif_thunder.Plo + -rm -f ./$(DEPDIR)/tif_tile.Plo + -rm -f ./$(DEPDIR)/tif_unix.Plo + -rm -f ./$(DEPDIR)/tif_version.Plo + -rm -f ./$(DEPDIR)/tif_warning.Plo + -rm -f ./$(DEPDIR)/tif_webp.Plo + -rm -f ./$(DEPDIR)/tif_win32.Plo + -rm -f ./$(DEPDIR)/tif_write.Plo + -rm -f ./$(DEPDIR)/tif_zip.Plo + -rm -f ./$(DEPDIR)/tif_zstd.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-tags @@ -915,7 +992,50 @@ install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/mkg3states.Po + -rm -f ./$(DEPDIR)/tif_aux.Plo + -rm -f ./$(DEPDIR)/tif_close.Plo + -rm -f ./$(DEPDIR)/tif_codec.Plo + -rm -f ./$(DEPDIR)/tif_color.Plo + -rm -f ./$(DEPDIR)/tif_compress.Plo + -rm -f ./$(DEPDIR)/tif_dir.Plo + -rm -f ./$(DEPDIR)/tif_dirinfo.Plo + -rm -f ./$(DEPDIR)/tif_dirread.Plo + -rm -f ./$(DEPDIR)/tif_dirwrite.Plo + -rm -f ./$(DEPDIR)/tif_dumpmode.Plo + -rm -f ./$(DEPDIR)/tif_error.Plo + -rm -f ./$(DEPDIR)/tif_extension.Plo + -rm -f ./$(DEPDIR)/tif_fax3.Plo + -rm -f ./$(DEPDIR)/tif_fax3sm.Plo + -rm -f ./$(DEPDIR)/tif_flush.Plo + -rm -f ./$(DEPDIR)/tif_getimage.Plo + -rm -f ./$(DEPDIR)/tif_jbig.Plo + -rm -f ./$(DEPDIR)/tif_jpeg.Plo + -rm -f ./$(DEPDIR)/tif_jpeg_12.Plo + -rm -f ./$(DEPDIR)/tif_luv.Plo + -rm -f ./$(DEPDIR)/tif_lzma.Plo + -rm -f ./$(DEPDIR)/tif_lzw.Plo + -rm -f ./$(DEPDIR)/tif_next.Plo + -rm -f ./$(DEPDIR)/tif_ojpeg.Plo + -rm -f ./$(DEPDIR)/tif_open.Plo + -rm -f ./$(DEPDIR)/tif_packbits.Plo + -rm -f ./$(DEPDIR)/tif_pixarlog.Plo + -rm -f ./$(DEPDIR)/tif_predict.Plo + -rm -f ./$(DEPDIR)/tif_print.Plo + -rm -f ./$(DEPDIR)/tif_read.Plo + -rm -f ./$(DEPDIR)/tif_stream.Plo + -rm -f ./$(DEPDIR)/tif_strip.Plo + -rm -f ./$(DEPDIR)/tif_swab.Plo + -rm -f ./$(DEPDIR)/tif_thunder.Plo + -rm -f ./$(DEPDIR)/tif_tile.Plo + -rm -f ./$(DEPDIR)/tif_unix.Plo + -rm -f ./$(DEPDIR)/tif_version.Plo + -rm -f ./$(DEPDIR)/tif_warning.Plo + -rm -f ./$(DEPDIR)/tif_webp.Plo + -rm -f ./$(DEPDIR)/tif_win32.Plo + -rm -f ./$(DEPDIR)/tif_write.Plo + -rm -f ./$(DEPDIR)/tif_zip.Plo + -rm -f ./$(DEPDIR)/tif_zstd.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic @@ -937,16 +1057,17 @@ uninstall-am: uninstall-libLTLIBRARIES uninstall-libtiffincludeHEADERS \ .MAKE: all install-am install-strip -.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ - clean-libLTLIBRARIES clean-libtool clean-noinstPROGRAMS \ - cscopelist-am ctags ctags-am distclean distclean-compile \ - distclean-generic distclean-hdr distclean-libtool \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am \ - install-libLTLIBRARIES install-libtiffincludeHEADERS \ - install-man install-nodist_libtiffincludeHEADERS install-pdf \ +.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ + clean-generic clean-libLTLIBRARIES clean-libtool \ + clean-noinstPROGRAMS cscopelist-am ctags ctags-am distclean \ + distclean-compile distclean-generic distclean-hdr \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-libLTLIBRARIES \ + install-libtiffincludeHEADERS install-man \ + install-nodist_libtiffincludeHEADERS install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ diff --git a/external/tiff-4.0.9/libtiff/Makefile.vc b/external/tiff-4.1.0/libtiff/Makefile.vc similarity index 97% rename from external/tiff-4.0.9/libtiff/Makefile.vc rename to external/tiff-4.1.0/libtiff/Makefile.vc index b7309154..5aac3310 100644 --- a/external/tiff-4.0.9/libtiff/Makefile.vc +++ b/external/tiff-4.1.0/libtiff/Makefile.vc @@ -1,5 +1,3 @@ -# $Id: Makefile.vc,v 1.23 2015-08-19 02:31:04 bfriesen Exp $ -# # Copyright (C) 2004, Andrey Kiselev # # Permission to use, copy, modify, distribute, and sell this software and diff --git a/external/tiff-4.0.9/libtiff/SConstruct b/external/tiff-4.1.0/libtiff/SConstruct similarity index 97% rename from external/tiff-4.0.9/libtiff/SConstruct rename to external/tiff-4.1.0/libtiff/SConstruct index cb6a7cc9..af3daace 100644 --- a/external/tiff-4.0.9/libtiff/SConstruct +++ b/external/tiff-4.1.0/libtiff/SConstruct @@ -1,5 +1,3 @@ -# $Id: SConstruct,v 1.4 2007/02/24 15:03:50 dron Exp $ - # Tag Image File Format (TIFF) Software # # Copyright (C) 2005, Andrey Kiselev diff --git a/external/tiff-4.0.9/libtiff/libtiff.def b/external/tiff-4.1.0/libtiff/libtiff.def similarity index 94% rename from external/tiff-4.0.9/libtiff/libtiff.def rename to external/tiff-4.1.0/libtiff/libtiff.def index 341c719d..e34fac58 100644 --- a/external/tiff-4.0.9/libtiff/libtiff.def +++ b/external/tiff-4.1.0/libtiff/libtiff.def @@ -20,6 +20,7 @@ EXPORTS TIFFAccessTagMethods TIFFDataWidth TIFFDefaultStripSize TIFFDefaultTileSize + TIFFDeferStrileArrayWriting TIFFError TIFFErrorExt TIFFFdOpen @@ -37,6 +38,7 @@ EXPORTS TIFFAccessTagMethods TIFFFindField TIFFFlush TIFFFlushData + TIFFForceStrileArrayWriting TIFFFreeDirectory TIFFGetBitRevTable TIFFGetClientInfo @@ -49,6 +51,10 @@ EXPORTS TIFFAccessTagMethods TIFFGetReadProc TIFFGetSeekProc TIFFGetSizeProc + TIFFGetStrileByteCount + TIFFGetStrileByteCountWithErr + TIFFGetStrileOffset + TIFFGetStrileOffsetWithErr TIFFGetTagListCount TIFFGetTagListEntry TIFFGetUnmapFileProc @@ -82,6 +88,7 @@ EXPORTS TIFFAccessTagMethods TIFFReadEXIFDirectory TIFFReadEncodedStrip TIFFReadEncodedTile + TIFFReadFromUserBuffer TIFFReadRGBAImage TIFFReadRGBAImageOriented TIFFReadRGBAStrip diff --git a/external/tiff-4.0.9/libtiff/libtiff.map b/external/tiff-4.1.0/libtiff/libtiff.map similarity index 100% rename from external/tiff-4.0.9/libtiff/libtiff.map rename to external/tiff-4.1.0/libtiff/libtiff.map diff --git a/external/tiff-4.0.9/libtiff/libtiffxx.map b/external/tiff-4.1.0/libtiff/libtiffxx.map similarity index 100% rename from external/tiff-4.0.9/libtiff/libtiffxx.map rename to external/tiff-4.1.0/libtiff/libtiffxx.map diff --git a/external/tiff-4.0.9/libtiff/mingw/tif_config.h b/external/tiff-4.1.0/libtiff/mingw/tif_config.h similarity index 87% rename from external/tiff-4.0.9/libtiff/mingw/tif_config.h rename to external/tiff-4.1.0/libtiff/mingw/tif_config.h index 8f7f1da8..0382f797 100644 --- a/external/tiff-4.0.9/libtiff/mingw/tif_config.h +++ b/external/tiff-4.1.0/libtiff/mingw/tif_config.h @@ -11,7 +11,7 @@ lacking the tag (default enabled). */ #define CHECK_JPEG_YCBCR_SUBSAMPLING 1 -/* enable partial strip reading for large strips (experimental) */ +/* enable partial strip reading for large strips */ /* #undef CHUNKY_STRIP_READ_SUPPORT */ /* Support C++ stream API (requires C++ compiler) */ @@ -38,9 +38,6 @@ /* Define to 1 if you have the header file. */ #define HAVE_FCNTL_H 1 -/* Define to 1 if you have the `floor' function. */ -#define HAVE_FLOOR 1 - /* Define to 1 if fseeko (and presumably ftello) exists and is declared. */ /* #undef HAVE_FSEEKO */ @@ -63,45 +60,21 @@ machine */ #define HAVE_IEEEFP 1 -/* Define to 1 if the system has the type `int16'. */ -/* #undef HAVE_INT16 */ - -/* Define to 1 if the system has the type `int32'. */ -/* #undef HAVE_INT32 */ - -/* Define to 1 if the system has the type `int8'. */ -/* #undef HAVE_INT8 */ - /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define to 1 if you have the header file. */ #define HAVE_IO_H 1 -/* Define to 1 if you have the `isascii' function. */ -#define HAVE_ISASCII 1 - /* Define to 1 if you have the `jbg_newlen' function. */ /* #undef HAVE_JBG_NEWLEN */ /* Define to 1 if you have the `lfind' function. */ #define HAVE_LFIND 1 -/* Define to 1 if you have the header file. */ -#define HAVE_LIMITS_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_MALLOC_H 1 - -/* Define to 1 if you have the `memmove' function. */ -#define HAVE_MEMMOVE 1 - /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 -/* Define to 1 if you have the `memset' function. */ -#define HAVE_MEMSET 1 - /* Define to 1 if you have the `mmap' function. */ /* #undef HAVE_MMAP */ @@ -111,9 +84,6 @@ /* Define to 1 if you have the header file. */ /* #undef HAVE_OPENGL_GL_H */ -/* Define to 1 if you have the `pow' function. */ -#define HAVE_POW 1 - /* Define if you have POSIX threads libraries and header files. */ /* #undef HAVE_PTHREAD */ @@ -126,9 +96,6 @@ /* Define to 1 if you have the `snprintf' function. */ #define HAVE_SNPRINTF 1 -/* Define to 1 if you have the `sqrt' function. */ -#define HAVE_SQRT 1 - /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 @@ -138,24 +105,18 @@ /* Define to 1 if you have the `strcasecmp' function. */ #define HAVE_STRCASECMP 1 -/* Define to 1 if you have the `strchr' function. */ -#define HAVE_STRCHR 1 - /* Define to 1 if you have the header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 -/* Define to 1 if you have the `strrchr' function. */ -#define HAVE_STRRCHR 1 - -/* Define to 1 if you have the `strstr' function. */ -#define HAVE_STRSTR 1 - /* Define to 1 if you have the `strtol' function. */ #define HAVE_STRTOL 1 +/* Define to 1 if you have the `strtoll' function. */ +#define HAVE_STRTOLL 1 + /* Define to 1 if you have the `strtoul' function. */ #define HAVE_STRTOUL 1 @@ -165,9 +126,6 @@ /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_TIME_H 1 - /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 @@ -230,7 +188,7 @@ #define PACKAGE_NAME "LibTIFF Software" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "LibTIFF Software 4.0.9" +#define PACKAGE_STRING "LibTIFF Software 4.1.0" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "tiff" @@ -239,7 +197,7 @@ #define PACKAGE_URL "" /* Define to the version of this package. */ -#define PACKAGE_VERSION "4.0.9" +#define PACKAGE_VERSION "4.1.0" /* Support Macintosh PackBits algorithm */ #define PACKBITS_SUPPORT 1 @@ -260,9 +218,6 @@ /* The size of `signed long long', as computed by sizeof. */ #define SIZEOF_SIGNED_LONG_LONG 8 -/* The size of `signed short', as computed by sizeof. */ -#define SIZEOF_SIGNED_SHORT 2 - /* The size of `size_t', as computed by sizeof. */ #ifdef _WIN64 #define SIZEOF_SIZE_T 8 @@ -286,9 +241,6 @@ /* The size of `unsigned long long', as computed by sizeof. */ #define SIZEOF_UNSIGNED_LONG_LONG 8 -/* The size of `unsigned short', as computed by sizeof. */ -#define SIZEOF_UNSIGNED_SHORT 2 - /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 @@ -385,7 +337,10 @@ #define USE_WIN32_FILEIO 1 /* Version number of package */ -#define VERSION "4.0.9" +#define VERSION "4.1.0" + +/* Support webp compression */ +/* #undef WEBP_SUPPORT */ /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ @@ -405,6 +360,9 @@ /* Support Deflate compression */ #define ZIP_SUPPORT 1 +/* Support zstd compression */ +/* #undef ZSTD_SUPPORT */ + /* Enable large inode numbers on Mac OS X 10.5. */ #ifndef _DARWIN_USE_64_BIT_INODE # define _DARWIN_USE_64_BIT_INODE 1 diff --git a/external/tiff-4.0.9/libtiff/mingw/tiffconf.h b/external/tiff-4.1.0/libtiff/mingw/tiffconf.h similarity index 93% rename from external/tiff-4.0.9/libtiff/mingw/tiffconf.h rename to external/tiff-4.1.0/libtiff/mingw/tiffconf.h index 05a10894..45041bdb 100644 --- a/external/tiff-4.0.9/libtiff/mingw/tiffconf.h +++ b/external/tiff-4.1.0/libtiff/mingw/tiffconf.h @@ -42,15 +42,6 @@ /* Pointer difference type */ #define TIFF_PTRDIFF_T ptrdiff_t -/* Define to 1 if the system has the type `int16'. */ -/* #undef HAVE_INT16 */ - -/* Define to 1 if the system has the type `int32'. */ -/* #undef HAVE_INT32 */ - -/* Define to 1 if the system has the type `int8'. */ -/* #undef HAVE_INT8 */ - /* Compatibility stuff. */ /* Define as 0 or 1 according to the floating point format suported by the diff --git a/external/tiff-4.0.9/libtiff/mkg3states.c b/external/tiff-4.1.0/libtiff/mkg3states.c similarity index 98% rename from external/tiff-4.0.9/libtiff/mkg3states.c rename to external/tiff-4.1.0/libtiff/mkg3states.c index 16ad3c23..2cb9174c 100644 --- a/external/tiff-4.0.9/libtiff/mkg3states.c +++ b/external/tiff-4.1.0/libtiff/mkg3states.c @@ -1,5 +1,3 @@ -/* "$Id: mkg3states.c,v 1.12 2015-06-21 01:09:09 bfriesen Exp $ */ - /* * Copyright (c) 1991-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. @@ -42,7 +40,7 @@ #include "tif_fax3.h" #ifndef HAVE_GETOPT -extern int getopt(int, char**, char*); +extern int getopt(int argc, char * const argv[], const char *optstring); #endif #define streq(a,b) (strcmp(a,b) == 0) diff --git a/external/tiff-4.0.9/libtiff/t4.h b/external/tiff-4.1.0/libtiff/t4.h similarity index 99% rename from external/tiff-4.0.9/libtiff/t4.h rename to external/tiff-4.1.0/libtiff/t4.h index b908f54f..fb0951a1 100644 --- a/external/tiff-4.0.9/libtiff/t4.h +++ b/external/tiff-4.1.0/libtiff/t4.h @@ -1,5 +1,3 @@ -/* $Id: t4.h,v 1.3 2010-03-10 18:56:48 bfriesen Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/libtiff/tif_aux.c b/external/tiff-4.1.0/libtiff/tif_aux.c similarity index 86% rename from external/tiff-4.0.9/libtiff/tif_aux.c rename to external/tiff-4.1.0/libtiff/tif_aux.c index 10b8d00c..8188db53 100644 --- a/external/tiff-4.0.9/libtiff/tif_aux.c +++ b/external/tiff-4.1.0/libtiff/tif_aux.c @@ -1,5 +1,3 @@ -/* $Id: tif_aux.c,v 1.31 2017-11-17 20:21:00 erouault Exp $ */ - /* * Copyright (c) 1991-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. @@ -32,31 +30,66 @@ #include "tiffiop.h" #include "tif_predict.h" #include +#include uint32 _TIFFMultiply32(TIFF* tif, uint32 first, uint32 second, const char* where) { - uint32 bytes = first * second; - - if (second && bytes / second != first) { + if (second && first > TIFF_UINT32_MAX / second) { TIFFErrorExt(tif->tif_clientdata, where, "Integer overflow in %s", where); - bytes = 0; + return 0; } - return bytes; + return first * second; } uint64 _TIFFMultiply64(TIFF* tif, uint64 first, uint64 second, const char* where) { - uint64 bytes = first * second; - - if (second && bytes / second != first) { + if (second && first > TIFF_UINT64_MAX / second) { TIFFErrorExt(tif->tif_clientdata, where, "Integer overflow in %s", where); - bytes = 0; + return 0; } - return bytes; + return first * second; +} + +tmsize_t +_TIFFMultiplySSize(TIFF* tif, tmsize_t first, tmsize_t second, const char* where) +{ + if( first <= 0 || second <= 0 ) + { + if( tif != NULL && where != NULL ) + { + TIFFErrorExt(tif->tif_clientdata, where, + "Invalid argument to _TIFFMultiplySSize() in %s", where); + } + return 0; + } + + if( first > TIFF_TMSIZE_T_MAX / second ) + { + if( tif != NULL && where != NULL ) + { + TIFFErrorExt(tif->tif_clientdata, where, + "Integer overflow in %s", where); + } + return 0; + } + return first * second; +} + +tmsize_t _TIFFCastUInt64ToSSize(TIFF* tif, uint64 val, const char* module) +{ + if( val > (uint64)TIFF_TMSIZE_T_MAX ) + { + if( tif != NULL && module != NULL ) + { + TIFFErrorExt(tif->tif_clientdata,module,"Integer overflow"); + } + return 0; + } + return (tmsize_t)val; } void* @@ -64,13 +97,14 @@ _TIFFCheckRealloc(TIFF* tif, void* buffer, tmsize_t nmemb, tmsize_t elem_size, const char* what) { void* cp = NULL; - tmsize_t bytes = nmemb * elem_size; - + tmsize_t count = _TIFFMultiplySSize(tif, nmemb, elem_size, NULL); /* - * XXX: Check for integer overflow. + * Check for integer overflow. */ - if (nmemb && elem_size && bytes / elem_size == nmemb) - cp = _TIFFrealloc(buffer, bytes); + if (count != 0) + { + cp = _TIFFrealloc(buffer, count); + } if (cp == NULL) { TIFFErrorExt(tif->tif_clientdata, tif->tif_name, @@ -359,6 +393,15 @@ _TIFFUInt64ToDouble(uint64 ui64) } } +float _TIFFClampDoubleToFloat( double val ) +{ + if( val > FLT_MAX ) + return FLT_MAX; + if( val < -FLT_MAX ) + return -FLT_MAX; + return (float)val; +} + int _TIFFSeekOK(TIFF* tif, toff_t off) { /* Huge offsets, especially -1 / UINT64_MAX, can cause issues */ diff --git a/external/tiff-4.0.9/libtiff/tif_close.c b/external/tiff-4.1.0/libtiff/tif_close.c similarity index 98% rename from external/tiff-4.0.9/libtiff/tif_close.c rename to external/tiff-4.1.0/libtiff/tif_close.c index a0cb6613..e4228df9 100644 --- a/external/tiff-4.0.9/libtiff/tif_close.c +++ b/external/tiff-4.1.0/libtiff/tif_close.c @@ -1,5 +1,3 @@ -/* $Id: tif_close.c,v 1.21 2016-01-23 21:20:34 erouault Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/libtiff/tif_codec.c b/external/tiff-4.1.0/libtiff/tif_codec.c similarity index 95% rename from external/tiff-4.0.9/libtiff/tif_codec.c rename to external/tiff-4.1.0/libtiff/tif_codec.c index 7cb46f63..b6c04f01 100644 --- a/external/tiff-4.0.9/libtiff/tif_codec.c +++ b/external/tiff-4.1.0/libtiff/tif_codec.c @@ -1,5 +1,3 @@ -/* $Id: tif_codec.c,v 1.17 2015-08-19 02:31:04 bfriesen Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. @@ -72,6 +70,12 @@ static int NotConfigured(TIFF*, int); #ifndef LZMA_SUPPORT #define TIFFInitLZMA NotConfigured #endif +#ifndef ZSTD_SUPPORT +#define TIFFInitZSTD NotConfigured +#endif +#ifndef WEBP_SUPPORT +#define TIFFInitWebP NotConfigured +#endif /* * Compression schemes statically built into the library. @@ -99,6 +103,8 @@ TIFFCodec _TIFFBuiltinCODECS[] = { { "SGILog", COMPRESSION_SGILOG, TIFFInitSGILog }, { "SGILog24", COMPRESSION_SGILOG24, TIFFInitSGILog }, { "LZMA", COMPRESSION_LZMA, TIFFInitLZMA }, + { "ZSTD", COMPRESSION_ZSTD, TIFFInitZSTD }, + { "WEBP", COMPRESSION_WEBP, TIFFInitWebP }, { NULL, 0, NULL } }; diff --git a/external/tiff-4.0.9/libtiff/tif_color.c b/external/tiff-4.1.0/libtiff/tif_color.c similarity index 98% rename from external/tiff-4.0.9/libtiff/tif_color.c rename to external/tiff-4.1.0/libtiff/tif_color.c index 71cafcde..8fae40ea 100644 --- a/external/tiff-4.0.9/libtiff/tif_color.c +++ b/external/tiff-4.1.0/libtiff/tif_color.c @@ -1,5 +1,3 @@ -/* $Id: tif_color.c,v 1.24 2017-05-29 10:12:54 erouault Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. @@ -168,7 +166,7 @@ TIFFCIELabToRGBInit(TIFFCIELabToRGB* cielab, } /* - * Convert color value from the YCbCr space to CIE XYZ. + * Convert color value from the YCbCr space to RGB. * The colorspace conversion algorithm comes from the IJG v5a code; * see below for more information on how it works. */ diff --git a/external/tiff-4.0.9/libtiff/tif_compress.c b/external/tiff-4.1.0/libtiff/tif_compress.c similarity index 99% rename from external/tiff-4.0.9/libtiff/tif_compress.c rename to external/tiff-4.1.0/libtiff/tif_compress.c index b571d195..8130ef08 100644 --- a/external/tiff-4.0.9/libtiff/tif_compress.c +++ b/external/tiff-4.1.0/libtiff/tif_compress.c @@ -1,5 +1,3 @@ -/* $Id: tif_compress.c,v 1.25 2016-10-25 20:04:22 erouault Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/libtiff/tif_config.h-vms b/external/tiff-4.1.0/libtiff/tif_config.h-vms similarity index 100% rename from external/tiff-4.0.9/libtiff/tif_config.h-vms rename to external/tiff-4.1.0/libtiff/tif_config.h-vms diff --git a/external/tiff-4.0.9/libtiff/tif_config.h.cmake.in b/external/tiff-4.1.0/libtiff/tif_config.h.cmake.in similarity index 86% rename from external/tiff-4.0.9/libtiff/tif_config.h.cmake.in rename to external/tiff-4.1.0/libtiff/tif_config.h.cmake.in index de0f3a3c..24144603 100644 --- a/external/tiff-4.0.9/libtiff/tif_config.h.cmake.in +++ b/external/tiff-4.1.0/libtiff/tif_config.h.cmake.in @@ -26,9 +26,6 @@ /* Define to 1 if you have the header file. */ #cmakedefine HAVE_FCNTL_H 1 -/* Define to 1 if you have the `floor' function. */ -#cmakedefine HAVE_FLOOR 1 - /* Define to 1 if you have the `getopt' function. */ #cmakedefine HAVE_GETOPT 1 @@ -50,30 +47,12 @@ /* Define to 1 if you have the header file. */ #cmakedefine HAVE_IO_H 1 -/* Define to 1 if you have the `isascii' function. */ -#cmakedefine HAVE_ISASCII 1 - /* Define to 1 if you have the `jbg_newlen' function. */ #cmakedefine HAVE_JBG_NEWLEN 1 /* Define to 1 if you have the `lfind' function. */ #cmakedefine HAVE_LFIND 1 -/* Define to 1 if you have the header file. */ -#cmakedefine HAVE_LIMITS_H 1 - -/* Define to 1 if you have the header file. */ -#cmakedefine HAVE_MALLOC_H 1 - -/* Define to 1 if you have the `memmove' function. */ -#cmakedefine HAVE_MEMMOVE 1 - -/* Define to 1 if you have the header file. */ -#cmakedefine HAVE_MEMORY_H 1 - -/* Define to 1 if you have the `memset' function. */ -#cmakedefine HAVE_MEMSET 1 - /* Define to 1 if you have the `mmap' function. */ #cmakedefine HAVE_MMAP 1 @@ -83,9 +62,6 @@ /* Define to 1 if you have the header file. */ #cmakedefine HAVE_OPENGL_GL_H 1 -/* Define to 1 if you have the `pow' function. */ -#cmakedefine HAVE_POW 1 - /* Define to 1 if you have the header file. */ #cmakedefine HAVE_SEARCH_H 1 @@ -95,33 +71,24 @@ /* Define to 1 if you have the `snprintf' function. */ #cmakedefine HAVE_SNPRINTF 1 -/* Define to 1 if you have the `sqrt' function. */ -#cmakedefine HAVE_SQRT 1 - /* Define to 1 if you have the header file. */ #cmakedefine HAVE_STDINT_H 1 /* Define to 1 if you have the `strcasecmp' function. */ #cmakedefine HAVE_STRCASECMP 1 -/* Define to 1 if you have the `strchr' function. */ -#cmakedefine HAVE_STRCHR 1 - /* Define to 1 if you have the header file. */ #cmakedefine HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #cmakedefine HAVE_STRING_H 1 -/* Define to 1 if you have the `strrchr' function. */ -#cmakedefine HAVE_STRRCHR 1 - -/* Define to 1 if you have the `strstr' function. */ -#cmakedefine HAVE_STRSTR 1 - /* Define to 1 if you have the `strtol' function. */ #cmakedefine HAVE_STRTOL 1 +/* Define to 1 if you have the `strtoll' function. */ +#cmakedefine HAVE_STRTOLL 1 + /* Define to 1 if you have the `strtoul' function. */ #cmakedefine HAVE_STRTOUL 1 @@ -146,6 +113,12 @@ /* Support LZMA2 compression */ #cmakedefine LZMA_SUPPORT 1 +/* Support ZSTD compression */ +#cmakedefine ZSTD_SUPPORT 1 + +/* Support WEBP compression */ +#cmakedefine WEBP_SUPPORT 1 + /* Name of package */ #define PACKAGE "@PACKAGE_NAME@" @@ -176,9 +149,6 @@ /* The size of `signed long long', as computed by sizeof. */ #define SIZEOF_SIGNED_LONG_LONG @SIZEOF_SIGNED_LONG_LONG@ -/* The size of `signed short', as computed by sizeof. */ -#define SIZEOF_SIGNED_SHORT @SIZEOF_SIGNED_SHORT@ - /* The size of `unsigned char *', as computed by sizeof. */ #define SIZEOF_UNSIGNED_CHAR_P @SIZEOF_UNSIGNED_CHAR_P@ diff --git a/external/tiff-4.0.9/libtiff/tif_config.h.in b/external/tiff-4.1.0/libtiff/tif_config.h.in similarity index 87% rename from external/tiff-4.0.9/libtiff/tif_config.h.in rename to external/tiff-4.1.0/libtiff/tif_config.h.in index a4b2e60a..523da3e3 100644 --- a/external/tiff-4.0.9/libtiff/tif_config.h.in +++ b/external/tiff-4.1.0/libtiff/tif_config.h.in @@ -21,7 +21,7 @@ packages produce RGBA files but don't mark the alpha properly. */ #undef DEFAULT_EXTRASAMPLE_AS_ALPHA -/* enable deferred strip/tile offset/size loading (experimental) */ +/* enable deferred strip/tile offset/size loading */ #undef DEFER_STRILE_LOAD /* Define to 1 if you have the header file. */ @@ -37,9 +37,6 @@ /* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H -/* Define to 1 if you have the `floor' function. */ -#undef HAVE_FLOOR - /* Define to 1 if fseeko (and presumably ftello) exists and is declared. */ #undef HAVE_FSEEKO @@ -62,45 +59,21 @@ machine */ #undef HAVE_IEEEFP -/* Define to 1 if the system has the type `int16'. */ -#undef HAVE_INT16 - -/* Define to 1 if the system has the type `int32'. */ -#undef HAVE_INT32 - -/* Define to 1 if the system has the type `int8'. */ -#undef HAVE_INT8 - /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_IO_H -/* Define to 1 if you have the `isascii' function. */ -#undef HAVE_ISASCII - /* Define to 1 if you have the `jbg_newlen' function. */ #undef HAVE_JBG_NEWLEN /* Define to 1 if you have the `lfind' function. */ #undef HAVE_LFIND -/* Define to 1 if you have the header file. */ -#undef HAVE_LIMITS_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_MALLOC_H - -/* Define to 1 if you have the `memmove' function. */ -#undef HAVE_MEMMOVE - /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H -/* Define to 1 if you have the `memset' function. */ -#undef HAVE_MEMSET - /* Define to 1 if you have the `mmap' function. */ #undef HAVE_MMAP @@ -110,9 +83,6 @@ /* Define to 1 if you have the header file. */ #undef HAVE_OPENGL_GL_H -/* Define to 1 if you have the `pow' function. */ -#undef HAVE_POW - /* Define if you have POSIX threads libraries and header files. */ #undef HAVE_PTHREAD @@ -125,9 +95,6 @@ /* Define to 1 if you have the `snprintf' function. */ #undef HAVE_SNPRINTF -/* Define to 1 if you have the `sqrt' function. */ -#undef HAVE_SQRT - /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H @@ -137,24 +104,18 @@ /* Define to 1 if you have the `strcasecmp' function. */ #undef HAVE_STRCASECMP -/* Define to 1 if you have the `strchr' function. */ -#undef HAVE_STRCHR - /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H -/* Define to 1 if you have the `strrchr' function. */ -#undef HAVE_STRRCHR - -/* Define to 1 if you have the `strstr' function. */ -#undef HAVE_STRSTR - /* Define to 1 if you have the `strtol' function. */ #undef HAVE_STRTOL +/* Define to 1 if you have the `strtoll' function. */ +#undef HAVE_STRTOLL + /* Define to 1 if you have the `strtoul' function. */ #undef HAVE_STRTOUL @@ -164,9 +125,6 @@ /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TIME_H - /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H @@ -259,9 +217,6 @@ /* The size of `signed long long', as computed by sizeof. */ #undef SIZEOF_SIGNED_LONG_LONG -/* The size of `signed short', as computed by sizeof. */ -#undef SIZEOF_SIGNED_SHORT - /* The size of `size_t', as computed by sizeof. */ #undef SIZEOF_SIZE_T @@ -277,9 +232,6 @@ /* The size of `unsigned long long', as computed by sizeof. */ #undef SIZEOF_UNSIGNED_LONG_LONG -/* The size of `unsigned short', as computed by sizeof. */ -#undef SIZEOF_UNSIGNED_SHORT - /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS @@ -362,6 +314,9 @@ /* Version number of package */ #undef VERSION +/* Support webp compression */ +#undef WEBP_SUPPORT + /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ #if defined AC_APPLE_UNIVERSAL_BUILD @@ -380,6 +335,9 @@ /* Support Deflate compression */ #undef ZIP_SUPPORT +/* Support zstd compression */ +#undef ZSTD_SUPPORT + /* Enable large inode numbers on Mac OS X 10.5. */ #ifndef _DARWIN_USE_64_BIT_INODE # define _DARWIN_USE_64_BIT_INODE 1 diff --git a/external/tiff-4.0.9/libtiff/tif_config.vc.h b/external/tiff-4.1.0/libtiff/tif_config.vc.h similarity index 100% rename from external/tiff-4.0.9/libtiff/tif_config.vc.h rename to external/tiff-4.1.0/libtiff/tif_config.vc.h diff --git a/external/tiff-4.0.9/libtiff/tif_config.wince.h b/external/tiff-4.1.0/libtiff/tif_config.wince.h similarity index 96% rename from external/tiff-4.0.9/libtiff/tif_config.wince.h rename to external/tiff-4.1.0/libtiff/tif_config.wince.h index 94e92bbf..e85e2e62 100644 --- a/external/tiff-4.0.9/libtiff/tif_config.wince.h +++ b/external/tiff-4.1.0/libtiff/tif_config.wince.h @@ -1,5 +1,3 @@ -/* $Id: tif_config.wince.h,v 1.3 2010-03-10 18:56:48 bfriesen Exp $ */ - /* * TIFF library configuration header for Windows CE platform. */ diff --git a/external/tiff-4.0.9/libtiff/tif_dir.c b/external/tiff-4.1.0/libtiff/tif_dir.c similarity index 95% rename from external/tiff-4.0.9/libtiff/tif_dir.c rename to external/tiff-4.1.0/libtiff/tif_dir.c index c36a5f3f..1e0a76c3 100644 --- a/external/tiff-4.0.9/libtiff/tif_dir.c +++ b/external/tiff-4.1.0/libtiff/tif_dir.c @@ -1,5 +1,3 @@ -/* $Id: tif_dir.c,v 1.131 2017-07-11 21:38:04 erouault Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. @@ -31,7 +29,6 @@ * (and also some miscellaneous stuff) */ #include "tiffiop.h" -#include /* * These are used in the backwards compatibility code... @@ -49,8 +46,8 @@ setByteArray(void** vpp, void* vp, size_t nmemb, size_t elem_size) *vpp = 0; } if (vp) { - tmsize_t bytes = (tmsize_t)(nmemb * elem_size); - if (elem_size && bytes / elem_size == nmemb) + tmsize_t bytes = _TIFFMultiplySSize(NULL, nmemb, elem_size, NULL); + if (bytes) *vpp = (void*) _TIFFmalloc(bytes); if (*vpp) _TIFFmemcpy(*vpp, vp, bytes); @@ -90,13 +87,15 @@ setDoubleArrayOneValue(double** vpp, double value, size_t nmemb) * Install extra samples information. */ static int -setExtraSamples(TIFFDirectory* td, va_list ap, uint32* v) +setExtraSamples(TIFF* tif, va_list ap, uint32* v) { /* XXX: Unassociated alpha data == 999 is a known Corel Draw bug, see below */ #define EXTRASAMPLE_COREL_UNASSALPHA 999 uint16* va; uint32 i; + TIFFDirectory* td = &tif->tif_dir; + static const char module[] = "setExtraSamples"; *v = (uint16) va_arg(ap, uint16_vap); if ((uint16) *v > td->td_samplesperpixel) @@ -118,6 +117,18 @@ setExtraSamples(TIFFDirectory* td, va_list ap, uint32* v) return 0; } } + + if ( td->td_transferfunction[0] != NULL && (td->td_samplesperpixel - *v > 1) && + !(td->td_samplesperpixel - td->td_extrasamples > 1)) + { + TIFFWarningExt(tif->tif_clientdata,module, + "ExtraSamples tag value is changing, " + "but TransferFunction was read with a different value. Cancelling it"); + TIFFClrFieldBit(tif,FIELD_TRANSFERFUNCTION); + _TIFFfree(td->td_transferfunction[0]); + td->td_transferfunction[0] = NULL; + } + td->td_extrasamples = (uint16) *v; _TIFFsetShortArray(&td->td_sampleinfo, va, td->td_extrasamples); return 1; @@ -155,15 +166,6 @@ checkInkNamesString(TIFF* tif, uint32 slen, const char* s) return (0); } -static float TIFFClampDoubleToFloat( double val ) -{ - if( val > FLT_MAX ) - return FLT_MAX; - if( val < -FLT_MAX ) - return -FLT_MAX; - return (float)val; -} - static int _TIFFVSetField(TIFF* tif, uint32 tag, va_list ap) { @@ -287,6 +289,18 @@ _TIFFVSetField(TIFF* tif, uint32 tag, va_list ap) _TIFFfree(td->td_smaxsamplevalue); td->td_smaxsamplevalue = NULL; } + /* Test if 3 transfer functions instead of just one are now needed + See http://bugzilla.maptools.org/show_bug.cgi?id=2820 */ + if( td->td_transferfunction[0] != NULL && (v - td->td_extrasamples > 1) && + !(td->td_samplesperpixel - td->td_extrasamples > 1)) + { + TIFFWarningExt(tif->tif_clientdata,module, + "SamplesPerPixel tag value is changing, " + "but TransferFunction was read with a different value. Cancelling it"); + TIFFClrFieldBit(tif,FIELD_TRANSFERFUNCTION); + _TIFFfree(td->td_transferfunction[0]); + td->td_transferfunction[0] = NULL; + } } td->td_samplesperpixel = (uint16) v; break; @@ -322,13 +336,13 @@ _TIFFVSetField(TIFF* tif, uint32 tag, va_list ap) dblval = va_arg(ap, double); if( dblval < 0 ) goto badvaluedouble; - td->td_xresolution = TIFFClampDoubleToFloat( dblval ); + td->td_xresolution = _TIFFClampDoubleToFloat( dblval ); break; case TIFFTAG_YRESOLUTION: dblval = va_arg(ap, double); if( dblval < 0 ) goto badvaluedouble; - td->td_yresolution = TIFFClampDoubleToFloat( dblval ); + td->td_yresolution = _TIFFClampDoubleToFloat( dblval ); break; case TIFFTAG_PLANARCONFIG: v = (uint16) va_arg(ap, uint16_vap); @@ -337,10 +351,10 @@ _TIFFVSetField(TIFF* tif, uint32 tag, va_list ap) td->td_planarconfig = (uint16) v; break; case TIFFTAG_XPOSITION: - td->td_xposition = TIFFClampDoubleToFloat( va_arg(ap, double) ); + td->td_xposition = _TIFFClampDoubleToFloat( va_arg(ap, double) ); break; case TIFFTAG_YPOSITION: - td->td_yposition = TIFFClampDoubleToFloat( va_arg(ap, double) ); + td->td_yposition = _TIFFClampDoubleToFloat( va_arg(ap, double) ); break; case TIFFTAG_RESOLUTIONUNIT: v = (uint16) va_arg(ap, uint16_vap); @@ -363,7 +377,7 @@ _TIFFVSetField(TIFF* tif, uint32 tag, va_list ap) _TIFFsetShortArray(&td->td_colormap[2], va_arg(ap, uint16*), v32); break; case TIFFTAG_EXTRASAMPLES: - if (!setExtraSamples(td, ap, &v)) + if (!setExtraSamples(tif, ap, &v)) goto badvalue; break; case TIFFTAG_MATTEING: @@ -686,7 +700,7 @@ _TIFFVSetField(TIFF* tif, uint32 tag, va_list ap) case TIFF_SRATIONAL: case TIFF_FLOAT: { - float v2 = TIFFClampDoubleToFloat(va_arg(ap, double)); + float v2 = _TIFFClampDoubleToFloat(va_arg(ap, double)); _TIFFmemcpy(val, &v2, tv_size); } break; @@ -863,14 +877,24 @@ _TIFFVGetField(TIFF* tif, uint32 tag, va_list ap) const TIFFField* fip = TIFFFindField(tif, tag, TIFF_ANY); if( fip == NULL ) /* cannot happen since TIFFGetField() already checks it */ return 0; + + /* + * We want to force the custom code to be used for custom + * fields even if the tag happens to match a well known + * one - important for reinterpreted handling of standard + * tag values in custom directories (i.e. EXIF) + */ + if (fip->field_bit == FIELD_CUSTOM) { + standard_tag = 0; + } - if( tag == TIFFTAG_NUMBEROFINKS ) + if( standard_tag == TIFFTAG_NUMBEROFINKS ) { int i; for (i = 0; i < td->td_customValueCount; i++) { uint16 val; TIFFTagValue *tv = td->td_customValues + i; - if (tv->info->field_tag != tag) + if (tv->info->field_tag != standard_tag) continue; if( tv->value == NULL ) return 0; @@ -892,16 +916,6 @@ _TIFFVGetField(TIFF* tif, uint32 tag, va_list ap) return 0; } - /* - * We want to force the custom code to be used for custom - * fields even if the tag happens to match a well known - * one - important for reinterpreted handling of standard - * tag values in custom directories (i.e. EXIF) - */ - if (fip->field_bit == FIELD_CUSTOM) { - standard_tag = 0; - } - switch (standard_tag) { case TIFFTAG_SUBFILETYPE: *va_arg(ap, uint32*) = td->td_subfiletype; @@ -1004,12 +1018,12 @@ _TIFFVGetField(TIFF* tif, uint32 tag, va_list ap) case TIFFTAG_STRIPOFFSETS: case TIFFTAG_TILEOFFSETS: _TIFFFillStriles( tif ); - *va_arg(ap, uint64**) = td->td_stripoffset; + *va_arg(ap, uint64**) = td->td_stripoffset_p; break; case TIFFTAG_STRIPBYTECOUNTS: case TIFFTAG_TILEBYTECOUNTS: _TIFFFillStriles( tif ); - *va_arg(ap, uint64**) = td->td_stripbytecount; + *va_arg(ap, uint64**) = td->td_stripbytecount_p; break; case TIFFTAG_MATTEING: *va_arg(ap, uint16*) = @@ -1268,8 +1282,9 @@ TIFFFreeDirectory(TIFF* tif) CleanupField(td_transferfunction[0]); CleanupField(td_transferfunction[1]); CleanupField(td_transferfunction[2]); - CleanupField(td_stripoffset); - CleanupField(td_stripbytecount); + CleanupField(td_stripoffset_p); + CleanupField(td_stripbytecount_p); + td->td_stripoffsetbyteallocsize = 0; TIFFClrFieldBit(tif, FIELD_YCBCRSUBSAMPLING); TIFFClrFieldBit(tif, FIELD_YCBCRPOSITIONING); @@ -1282,10 +1297,8 @@ TIFFFreeDirectory(TIFF* tif) td->td_customValueCount = 0; CleanupField(td_customValues); -#if defined(DEFER_STRILE_LOAD) _TIFFmemset( &(td->td_stripoffset_entry), 0, sizeof(TIFFDirEntry)); _TIFFmemset( &(td->td_stripbytecount_entry), 0, sizeof(TIFFDirEntry)); -#endif } #undef CleanupField @@ -1373,7 +1386,9 @@ TIFFDefaultDirectory(TIFF* tif) td->td_tilewidth = 0; td->td_tilelength = 0; td->td_tiledepth = 1; +#ifdef STRIPBYTECOUNTSORTED_UNUSED td->td_stripbytecountsorted = 1; /* Our own arrays always sorted. */ +#endif td->td_resolutionunit = RESUNIT_INCH; td->td_sampleformat = SAMPLEFORMAT_UINT; td->td_imagedepth = 1; diff --git a/external/tiff-4.0.9/libtiff/tif_dir.h b/external/tiff-4.1.0/libtiff/tif_dir.h similarity index 94% rename from external/tiff-4.0.9/libtiff/tif_dir.h rename to external/tiff-4.1.0/libtiff/tif_dir.h index 5a380767..e7f06673 100644 --- a/external/tiff-4.0.9/libtiff/tif_dir.h +++ b/external/tiff-4.1.0/libtiff/tif_dir.h @@ -1,5 +1,3 @@ -/* $Id: tif_dir.h,v 1.55 2017-06-01 12:44:04 erouault Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. @@ -26,6 +24,10 @@ #ifndef _TIFFDIR_ #define _TIFFDIR_ + +#include "tiff.h" +#include "tiffio.h" + /* * ``Library-private'' Directory-related Definitions. */ @@ -56,6 +58,7 @@ typedef struct { uint32 toff_long; uint64 toff_long8; } tdir_offset; /* either offset or the data itself if fits */ + uint8 tdir_ignore; /* flag status to ignore tag when parsing tags in tif_dirread.c */ } TIFFDirEntry; /* @@ -95,13 +98,14 @@ typedef struct { * number of striles */ uint32 td_stripsperimage; uint32 td_nstrips; /* size of offset & bytecount arrays */ - uint64* td_stripoffset; - uint64* td_stripbytecount; + uint64* td_stripoffset_p; /* should be accessed with TIFFGetStrileOffset */ + uint64* td_stripbytecount_p; /* should be accessed with TIFFGetStrileByteCount */ + uint32 td_stripoffsetbyteallocsize; /* number of elements currently allocated for td_stripoffset/td_stripbytecount. Only used if TIFF_LAZYSTRILELOAD is set */ +#ifdef STRIPBYTECOUNTSORTED_UNUSED int td_stripbytecountsorted; /* is the bytecount array sorted ascending? */ -#if defined(DEFER_STRILE_LOAD) +#endif TIFFDirEntry td_stripoffset_entry; /* for deferred loading */ TIFFDirEntry td_stripbytecount_entry; /* for deferred loading */ -#endif uint16 td_nsubifd; uint64* td_subifd; /* YCbCr parameters */ @@ -116,6 +120,8 @@ typedef struct { int td_customValueCount; TIFFTagValue *td_customValues; + + unsigned char td_deferstrilearraywriting; /* see TIFFDeferStrileArrayWriting() */ } TIFFDirectory; /* diff --git a/external/tiff-4.0.9/libtiff/tif_dirinfo.c b/external/tiff-4.1.0/libtiff/tif_dirinfo.c similarity index 99% rename from external/tiff-4.0.9/libtiff/tif_dirinfo.c rename to external/tiff-4.1.0/libtiff/tif_dirinfo.c index 4904f540..e1f6b23e 100644 --- a/external/tiff-4.0.9/libtiff/tif_dirinfo.c +++ b/external/tiff-4.1.0/libtiff/tif_dirinfo.c @@ -1,5 +1,3 @@ -/* $Id: tif_dirinfo.c,v 1.127 2017-06-01 12:44:04 erouault Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. @@ -979,6 +977,8 @@ _TIFFCheckFieldIsValidForCodec(TIFF *tif, ttag_t tag) case TIFFTAG_CONSECUTIVEBADFAXLINES: case TIFFTAG_GROUP3OPTIONS: case TIFFTAG_GROUP4OPTIONS: + /* LERC */ + case TIFFTAG_LERC_PARAMETERS: break; default: return 1; @@ -1054,7 +1054,18 @@ _TIFFCheckFieldIsValidForCodec(TIFF *tif, ttag_t tag) if (tag == TIFFTAG_PREDICTOR) return 1; break; - + case COMPRESSION_ZSTD: + if (tag == TIFFTAG_PREDICTOR) + return 1; + break; + case COMPRESSION_LERC: + if (tag == TIFFTAG_LERC_PARAMETERS) + return 1; + break; + case COMPRESSION_WEBP: + if (tag == TIFFTAG_PREDICTOR) + return 1; + break; } return 0; } diff --git a/external/tiff-4.0.9/libtiff/tif_dirread.c b/external/tiff-4.1.0/libtiff/tif_dirread.c similarity index 81% rename from external/tiff-4.0.9/libtiff/tif_dirread.c rename to external/tiff-4.1.0/libtiff/tif_dirread.c index 5896a78e..6f909413 100644 --- a/external/tiff-4.0.9/libtiff/tif_dirread.c +++ b/external/tiff-4.1.0/libtiff/tif_dirread.c @@ -1,5 +1,3 @@ -/* $Id: tif_dirread.c,v 1.218 2017-09-09 21:44:42 erouault Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. @@ -31,9 +29,6 @@ */ /* Suggested pending improvements: - * - add a field 'ignore' to the TIFFDirEntry structure, to flag status, - * eliminating current use of the IGNORE value, and therefore eliminating - * current irrational behaviour on tags with tag id code 0 * - add a field 'field_info' to the TIFFDirEntry structure, and set that with * the pointer to the appropriate TIFFField structure early on in * TIFFReadDirectory, so as to eliminate current possibly repetitive lookup. @@ -43,9 +38,13 @@ #include #include -#define IGNORE 0 /* tag placeholder used below */ #define FAILED_FII ((uint32) -1) +/* + * Largest 64-bit signed integer value. + */ +#define TIFF_INT64_MAX ((int64)(TIFF_UINT64_MAX >> 1)) + #ifdef HAVE_IEEEFP # define TIFFCvtIEEEFloatToNative(tif, n, fp) # define TIFFCvtIEEEDoubleToNative(tif, n, dp) @@ -166,6 +165,7 @@ static int TIFFFetchNormalTag(TIFF*, TIFFDirEntry*, int recover); static int TIFFFetchStripThing(TIFF* tif, TIFFDirEntry* dir, uint32 nstrips, uint64** lpp); static int TIFFFetchSubjectDistance(TIFF*, TIFFDirEntry*); static void ChopUpSingleUncompressedStrip(TIFF*); +static void TryChopUpUncompressedBigTiff(TIFF*); static uint64 TIFFReadUInt64(const uint8 *value); static int _TIFFGetMaxColorChannels(uint16 photometric); @@ -207,6 +207,7 @@ static enum TIFFReadDirEntryErr TIFFReadDirEntryByte(TIFF* tif, TIFFDirEntry* di switch (direntry->tdir_type) { case TIFF_BYTE: + case TIFF_UNDEFINED: /* Support to read TIFF_UNDEFINED with field_readcount==1 */ TIFFReadDirEntryCheckedByte(tif,direntry,value); return(TIFFReadDirEntryErrOk); case TIFF_SBYTE: @@ -777,7 +778,7 @@ static enum TIFFReadDirEntryErr TIFFReadDirEntryIfd8(TIFF* tif, TIFFDirEntry* di static enum TIFFReadDirEntryErr TIFFReadDirEntryDataAndRealloc( TIFF* tif, uint64 offset, tmsize_t size, void** pdest) { -#if SIZEOF_VOIDP == 8 || SIZEOF_SIZE_T == 8 +#if SIZEOF_SIZE_T == 8 tmsize_t threshold = INITIAL_THRESHOLD; #endif tmsize_t already_read = 0; @@ -798,7 +799,7 @@ static enum TIFFReadDirEntryErr TIFFReadDirEntryDataAndRealloc( void* new_dest; tmsize_t bytes_read; tmsize_t to_read = size - already_read; -#if SIZEOF_VOIDP == 8 || SIZEOF_SIZE_T == 8 +#if SIZEOF_SIZE_T == 8 if( to_read >= threshold && threshold < MAX_THRESHOLD ) { to_read = threshold; @@ -3289,11 +3290,6 @@ static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeLongSlong(int32 value) return(TIFFReadDirEntryErrOk); } -/* - * Largest 32-bit unsigned integer value. - */ -#define TIFF_UINT32_MAX 0xFFFFFFFFU - static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeLongLong8(uint64 value) { @@ -3312,8 +3308,6 @@ TIFFReadDirEntryCheckRangeLongSlong8(int64 value) return(TIFFReadDirEntryErrOk); } -#undef TIFF_UINT32_MAX - static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeSlongLong(uint32 value) { @@ -3379,11 +3373,6 @@ TIFFReadDirEntryCheckRangeLong8Slong8(int64 value) return(TIFFReadDirEntryErrOk); } -/* - * Largest 64-bit signed integer value. - */ -#define TIFF_INT64_MAX ((int64)(((uint64) ~0) >> 1)) - static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeSlong8Long8(uint64 value) { @@ -3393,8 +3382,6 @@ TIFFReadDirEntryCheckRangeSlong8Long8(uint64 value) return(TIFFReadDirEntryErrOk); } -#undef TIFF_INT64_MAX - static enum TIFFReadDirEntryErr TIFFReadDirEntryData(TIFF* tif, uint64 offset, tmsize_t size, void* dest) { @@ -3407,13 +3394,13 @@ TIFFReadDirEntryData(TIFF* tif, uint64 offset, tmsize_t size, void* dest) } else { size_t ma,mb; ma=(size_t)offset; + if( (uint64)ma!=offset || + ma > (~(size_t)0) - (size_t)size ) + { + return TIFFReadDirEntryErrIo; + } mb=ma+size; - if (((uint64)ma!=offset) - || (mb < ma) - || (mb - ma != (size_t) size) - || (mb < (size_t)size) - || (mb > (size_t)tif->tif_size) - ) + if (mb > (size_t)tif->tif_size) return(TIFFReadDirEntryErrIo); _TIFFmemcpy(dest,tif->tif_base+ma,size); } @@ -3522,20 +3509,63 @@ static int _TIFFGetMaxColorChannels( uint16 photometric ) case PHOTOMETRIC_YCBCR: case PHOTOMETRIC_RGB: case PHOTOMETRIC_CIELAB: + case PHOTOMETRIC_LOGLUV: + case PHOTOMETRIC_ITULAB: + case PHOTOMETRIC_ICCLAB: return 3; case PHOTOMETRIC_SEPARATED: case PHOTOMETRIC_MASK: return 4; case PHOTOMETRIC_LOGL: - case PHOTOMETRIC_LOGLUV: case PHOTOMETRIC_CFA: - case PHOTOMETRIC_ITULAB: - case PHOTOMETRIC_ICCLAB: default: return 0; } } +static int ByteCountLooksBad(TIFF* tif) +{ + /* + * Assume we have wrong StripByteCount value (in case + * of single strip) in following cases: + * - it is equal to zero along with StripOffset; + * - it is larger than file itself (in case of uncompressed + * image); + * - it is smaller than the size of the bytes per row + * multiplied on the number of rows. The last case should + * not be checked in the case of writing new image, + * because we may do not know the exact strip size + * until the whole image will be written and directory + * dumped out. + */ + uint64 bytecount = TIFFGetStrileByteCount(tif, 0); + uint64 offset = TIFFGetStrileOffset(tif, 0); + uint64 filesize; + + if( offset == 0 ) + return 0; + if (bytecount == 0) + return 1; + if ( tif->tif_dir.td_compression != COMPRESSION_NONE ) + return 0; + filesize = TIFFGetFileSize(tif); + if( offset <= filesize && bytecount > filesize - offset ) + return 1; + if( tif->tif_mode == O_RDONLY ) + { + uint64 scanlinesize = TIFFScanlineSize64(tif); + if( tif->tif_dir.td_imagelength > 0 && + scanlinesize > TIFF_UINT64_MAX / tif->tif_dir.td_imagelength ) + { + return 1; + } + if( bytecount < scanlinesize * tif->tif_dir.td_imagelength) + return 1; + } + return 0; +} + + /* * Read the next TIFF directory from a file and convert it to the internal * format. We read directories sequentially. @@ -3582,14 +3612,17 @@ TIFFReadDirectory(TIFF* tif) uint16 nb; for (na=ma+1, nb=mb+1; nbtdir_tag==na->tdir_tag) - na->tdir_tag=IGNORE; + if (ma->tdir_tag == na->tdir_tag) { + na->tdir_ignore = TRUE; + } } } } tif->tif_flags &= ~TIFF_BEENWRITING; /* reset before new dir */ tif->tif_flags &= ~TIFF_BUF4WRITE; /* reset before new dir */ + tif->tif_flags &= ~TIFF_CHOPPEDUPARRAYS; + /* free any old stuff and reinit */ TIFFFreeDirectory(tif); TIFFDefaultDirectory(tif); @@ -3622,7 +3655,7 @@ TIFFReadDirectory(TIFF* tif) { if (!TIFFFetchNormalTag(tif,dp,0)) goto bad; - dp->tdir_tag=IGNORE; + dp->tdir_ignore = TRUE; } dp=TIFFReadDirectoryFindEntry(tif,dir,dircount,TIFFTAG_COMPRESSION); if (dp) @@ -3645,7 +3678,7 @@ TIFFReadDirectory(TIFF* tif) } if (!TIFFSetField(tif,TIFFTAG_COMPRESSION,value)) goto bad; - dp->tdir_tag=IGNORE; + dp->tdir_ignore = TRUE; } else { @@ -3657,7 +3690,7 @@ TIFFReadDirectory(TIFF* tif) */ for (di=0, dp=dir; ditdir_tag!=IGNORE) + if (!dp->tdir_ignore) { TIFFReadDirectoryFindFieldInfo(tif,dp->tdir_tag,&fii); if (fii == FAILED_FII) @@ -3665,8 +3698,8 @@ TIFFReadDirectory(TIFF* tif) TIFFWarningExt(tif->tif_clientdata, module, "Unknown field with tag %d (0x%x) encountered", dp->tdir_tag,dp->tdir_tag); - /* the following knowingly leaks the - anonymous field structure */ + /* the following knowingly leaks the + anonymous field structure */ if (!_TIFFMergeFields(tif, _TIFFCreateAnonField(tif, dp->tdir_tag, @@ -3677,18 +3710,18 @@ TIFFReadDirectory(TIFF* tif) "Registering anonymous field with tag %d (0x%x) failed", dp->tdir_tag, dp->tdir_tag); - dp->tdir_tag=IGNORE; + dp->tdir_ignore = TRUE; } else { TIFFReadDirectoryFindFieldInfo(tif,dp->tdir_tag,&fii); assert(fii != FAILED_FII); } } } - if (dp->tdir_tag!=IGNORE) + if (!dp->tdir_ignore) { fip=tif->tif_fields[fii]; if (fip->field_bit==FIELD_IGNORE) - dp->tdir_tag=IGNORE; + dp->tdir_ignore = TRUE; else { switch (dp->tdir_tag) @@ -3710,12 +3743,12 @@ TIFFReadDirectory(TIFF* tif) case TIFFTAG_EXTRASAMPLES: if (!TIFFFetchNormalTag(tif,dp,0)) goto bad; - dp->tdir_tag=IGNORE; + dp->tdir_ignore = TRUE; + break; + default: + if( !_TIFFCheckFieldIsValidForCodec(tif, dp->tdir_tag) ) + dp->tdir_ignore = TRUE; break; - default: - if( !_TIFFCheckFieldIsValidForCodec(tif, dp->tdir_tag) ) - dp->tdir_tag=IGNORE; - break; } } } @@ -3731,8 +3764,8 @@ TIFFReadDirectory(TIFF* tif) if ((tif->tif_dir.td_compression==COMPRESSION_OJPEG)&& (tif->tif_dir.td_planarconfig==PLANARCONFIG_SEPARATE)) { - if (!_TIFFFillStriles(tif)) - goto bad; + if (!_TIFFFillStriles(tif)) + goto bad; dp=TIFFReadDirectoryFindEntry(tif,dir,dircount,TIFFTAG_STRIPOFFSETS); if ((dp!=0)&&(dp->tdir_count==1)) { @@ -3804,190 +3837,200 @@ TIFFReadDirectory(TIFF* tif) */ for (di=0, dp=dir; ditdir_tag) - { - case IGNORE: - break; - case TIFFTAG_MINSAMPLEVALUE: - case TIFFTAG_MAXSAMPLEVALUE: - case TIFFTAG_BITSPERSAMPLE: - case TIFFTAG_DATATYPE: - case TIFFTAG_SAMPLEFORMAT: - /* - * The MinSampleValue, MaxSampleValue, BitsPerSample - * DataType and SampleFormat tags are supposed to be - * written as one value/sample, but some vendors - * incorrectly write one value only -- so we accept - * that as well (yuck). Other vendors write correct - * value for NumberOfSamples, but incorrect one for - * BitsPerSample and friends, and we will read this - * too. - */ - { - uint16 value; - enum TIFFReadDirEntryErr err; - err=TIFFReadDirEntryShort(tif,dp,&value); - if (err==TIFFReadDirEntryErrCount) - err=TIFFReadDirEntryPersampleShort(tif,dp,&value); - if (err!=TIFFReadDirEntryErrOk) - { - fip = TIFFFieldWithTag(tif,dp->tdir_tag); - TIFFReadDirEntryOutputErr(tif,err,module,fip ? fip->field_name : "unknown tagname",0); - goto bad; - } - if (!TIFFSetField(tif,dp->tdir_tag,value)) - goto bad; - if( dp->tdir_tag == TIFFTAG_BITSPERSAMPLE ) - bitspersample_read = TRUE; - } - break; - case TIFFTAG_SMINSAMPLEVALUE: - case TIFFTAG_SMAXSAMPLEVALUE: - { - - double *data = NULL; - enum TIFFReadDirEntryErr err; - uint32 saved_flags; - int m; - if (dp->tdir_count != (uint64)tif->tif_dir.td_samplesperpixel) - err = TIFFReadDirEntryErrCount; - else - err = TIFFReadDirEntryDoubleArray(tif, dp, &data); - if (err!=TIFFReadDirEntryErrOk) - { - fip = TIFFFieldWithTag(tif,dp->tdir_tag); - TIFFReadDirEntryOutputErr(tif,err,module,fip ? fip->field_name : "unknown tagname",0); - goto bad; - } - saved_flags = tif->tif_flags; - tif->tif_flags |= TIFF_PERSAMPLE; - m = TIFFSetField(tif,dp->tdir_tag,data); - tif->tif_flags = saved_flags; - _TIFFfree(data); - if (!m) - goto bad; - } - break; - case TIFFTAG_STRIPOFFSETS: - case TIFFTAG_TILEOFFSETS: -#if defined(DEFER_STRILE_LOAD) - _TIFFmemcpy( &(tif->tif_dir.td_stripoffset_entry), - dp, sizeof(TIFFDirEntry) ); -#else - if( tif->tif_dir.td_stripoffset != NULL ) - { - TIFFErrorExt(tif->tif_clientdata, module, - "tif->tif_dir.td_stripoffset is " - "already allocated. Likely duplicated " - "StripOffsets/TileOffsets tag"); - goto bad; - } - if (!TIFFFetchStripThing(tif,dp,tif->tif_dir.td_nstrips,&tif->tif_dir.td_stripoffset)) - goto bad; -#endif - break; - case TIFFTAG_STRIPBYTECOUNTS: - case TIFFTAG_TILEBYTECOUNTS: -#if defined(DEFER_STRILE_LOAD) - _TIFFmemcpy( &(tif->tif_dir.td_stripbytecount_entry), - dp, sizeof(TIFFDirEntry) ); -#else - if( tif->tif_dir.td_stripbytecount != NULL ) - { - TIFFErrorExt(tif->tif_clientdata, module, - "tif->tif_dir.td_stripbytecount is " - "already allocated. Likely duplicated " - "StripByteCounts/TileByteCounts tag"); - goto bad; - } - if (!TIFFFetchStripThing(tif,dp,tif->tif_dir.td_nstrips,&tif->tif_dir.td_stripbytecount)) - goto bad; -#endif - break; - case TIFFTAG_COLORMAP: - case TIFFTAG_TRANSFERFUNCTION: - { - enum TIFFReadDirEntryErr err; - uint32 countpersample; - uint32 countrequired; - uint32 incrementpersample; - uint16* value=NULL; - /* It would be dangerous to instantiate those tag values */ - /* since if td_bitspersample has not yet been read (due to */ - /* unordered tags), it could be read afterwards with a */ - /* values greater than the default one (1), which may cause */ - /* crashes in user code */ - if( !bitspersample_read ) - { - fip = TIFFFieldWithTag(tif,dp->tdir_tag); - TIFFWarningExt(tif->tif_clientdata,module, - "Ignoring %s since BitsPerSample tag not found", - fip ? fip->field_name : "unknown tagname"); - continue; - } - /* ColorMap or TransferFunction for high bit */ - /* depths do not make much sense and could be */ - /* used as a denial of service vector */ - if (tif->tif_dir.td_bitspersample > 24) - { - fip = TIFFFieldWithTag(tif,dp->tdir_tag); - TIFFWarningExt(tif->tif_clientdata,module, - "Ignoring %s because BitsPerSample=%d>24", - fip ? fip->field_name : "unknown tagname", - tif->tif_dir.td_bitspersample); - continue; - } - countpersample=(1U<tif_dir.td_bitspersample); - if ((dp->tdir_tag==TIFFTAG_TRANSFERFUNCTION)&&(dp->tdir_count==(uint64)countpersample)) + if (!dp->tdir_ignore) { + switch (dp->tdir_tag) + { + case TIFFTAG_MINSAMPLEVALUE: + case TIFFTAG_MAXSAMPLEVALUE: + case TIFFTAG_BITSPERSAMPLE: + case TIFFTAG_DATATYPE: + case TIFFTAG_SAMPLEFORMAT: + /* + * The MinSampleValue, MaxSampleValue, BitsPerSample + * DataType and SampleFormat tags are supposed to be + * written as one value/sample, but some vendors + * incorrectly write one value only -- so we accept + * that as well (yuck). Other vendors write correct + * value for NumberOfSamples, but incorrect one for + * BitsPerSample and friends, and we will read this + * too. + */ { - countrequired=countpersample; - incrementpersample=0; + uint16 value; + enum TIFFReadDirEntryErr err; + err=TIFFReadDirEntryShort(tif,dp,&value); + if (err==TIFFReadDirEntryErrCount) + err=TIFFReadDirEntryPersampleShort(tif,dp,&value); + if (err!=TIFFReadDirEntryErrOk) + { + fip = TIFFFieldWithTag(tif,dp->tdir_tag); + TIFFReadDirEntryOutputErr(tif,err,module,fip ? fip->field_name : "unknown tagname",0); + goto bad; + } + if (!TIFFSetField(tif,dp->tdir_tag,value)) + goto bad; + if( dp->tdir_tag == TIFFTAG_BITSPERSAMPLE ) + bitspersample_read = TRUE; } - else + break; + case TIFFTAG_SMINSAMPLEVALUE: + case TIFFTAG_SMAXSAMPLEVALUE: { - countrequired=3*countpersample; - incrementpersample=countpersample; + + double *data = NULL; + enum TIFFReadDirEntryErr err; + uint32 saved_flags; + int m; + if (dp->tdir_count != (uint64)tif->tif_dir.td_samplesperpixel) + err = TIFFReadDirEntryErrCount; + else + err = TIFFReadDirEntryDoubleArray(tif, dp, &data); + if (err!=TIFFReadDirEntryErrOk) + { + fip = TIFFFieldWithTag(tif,dp->tdir_tag); + TIFFReadDirEntryOutputErr(tif,err,module,fip ? fip->field_name : "unknown tagname",0); + goto bad; + } + saved_flags = tif->tif_flags; + tif->tif_flags |= TIFF_PERSAMPLE; + m = TIFFSetField(tif,dp->tdir_tag,data); + tif->tif_flags = saved_flags; + _TIFFfree(data); + if (!m) + goto bad; } - if (dp->tdir_count!=(uint64)countrequired) - err=TIFFReadDirEntryErrCount; - else - err=TIFFReadDirEntryShortArray(tif,dp,&value); - if (err!=TIFFReadDirEntryErrOk) - { - fip = TIFFFieldWithTag(tif,dp->tdir_tag); - TIFFReadDirEntryOutputErr(tif,err,module,fip ? fip->field_name : "unknown tagname",1); - } - else + break; + case TIFFTAG_STRIPOFFSETS: + case TIFFTAG_TILEOFFSETS: + _TIFFmemcpy( &(tif->tif_dir.td_stripoffset_entry), + dp, sizeof(TIFFDirEntry) ); + break; + case TIFFTAG_STRIPBYTECOUNTS: + case TIFFTAG_TILEBYTECOUNTS: + _TIFFmemcpy( &(tif->tif_dir.td_stripbytecount_entry), + dp, sizeof(TIFFDirEntry) ); + break; + case TIFFTAG_COLORMAP: + case TIFFTAG_TRANSFERFUNCTION: { - TIFFSetField(tif,dp->tdir_tag,value,value+incrementpersample,value+2*incrementpersample); - _TIFFfree(value); + enum TIFFReadDirEntryErr err; + uint32 countpersample; + uint32 countrequired; + uint32 incrementpersample; + uint16* value=NULL; + /* It would be dangerous to instantiate those tag values */ + /* since if td_bitspersample has not yet been read (due to */ + /* unordered tags), it could be read afterwards with a */ + /* values greater than the default one (1), which may cause */ + /* crashes in user code */ + if( !bitspersample_read ) + { + fip = TIFFFieldWithTag(tif,dp->tdir_tag); + TIFFWarningExt(tif->tif_clientdata,module, + "Ignoring %s since BitsPerSample tag not found", + fip ? fip->field_name : "unknown tagname"); + continue; + } + /* ColorMap or TransferFunction for high bit */ + /* depths do not make much sense and could be */ + /* used as a denial of service vector */ + if (tif->tif_dir.td_bitspersample > 24) + { + fip = TIFFFieldWithTag(tif,dp->tdir_tag); + TIFFWarningExt(tif->tif_clientdata,module, + "Ignoring %s because BitsPerSample=%d>24", + fip ? fip->field_name : "unknown tagname", + tif->tif_dir.td_bitspersample); + continue; + } + countpersample=(1U<tif_dir.td_bitspersample); + if ((dp->tdir_tag==TIFFTAG_TRANSFERFUNCTION)&&(dp->tdir_count==(uint64)countpersample)) + { + countrequired=countpersample; + incrementpersample=0; + } + else + { + countrequired=3*countpersample; + incrementpersample=countpersample; + } + if (dp->tdir_count!=(uint64)countrequired) + err=TIFFReadDirEntryErrCount; + else + err=TIFFReadDirEntryShortArray(tif,dp,&value); + if (err!=TIFFReadDirEntryErrOk) + { + fip = TIFFFieldWithTag(tif,dp->tdir_tag); + TIFFReadDirEntryOutputErr(tif,err,module,fip ? fip->field_name : "unknown tagname",1); + } + else + { + TIFFSetField(tif,dp->tdir_tag,value,value+incrementpersample,value+2*incrementpersample); + _TIFFfree(value); + } } - } - break; + break; /* BEGIN REV 4.0 COMPATIBILITY */ - case TIFFTAG_OSUBFILETYPE: - { - uint16 valueo; - uint32 value; - if (TIFFReadDirEntryShort(tif,dp,&valueo)==TIFFReadDirEntryErrOk) + case TIFFTAG_OSUBFILETYPE: { - switch (valueo) + uint16 valueo; + uint32 value; + if (TIFFReadDirEntryShort(tif,dp,&valueo)==TIFFReadDirEntryErrOk) { - case OFILETYPE_REDUCEDIMAGE: value=FILETYPE_REDUCEDIMAGE; break; - case OFILETYPE_PAGE: value=FILETYPE_PAGE; break; - default: value=0; break; + switch (valueo) + { + case OFILETYPE_REDUCEDIMAGE: value=FILETYPE_REDUCEDIMAGE; break; + case OFILETYPE_PAGE: value=FILETYPE_PAGE; break; + default: value=0; break; + } + if (value!=0) + TIFFSetField(tif,TIFFTAG_SUBFILETYPE,value); } - if (value!=0) - TIFFSetField(tif,TIFFTAG_SUBFILETYPE,value); } - } - break; + break; /* END REV 4.0 COMPATIBILITY */ - default: - (void) TIFFFetchNormalTag(tif, dp, TRUE); - break; - } - } + default: + (void) TIFFFetchNormalTag(tif, dp, TRUE); + break; + } + } /* -- if (!dp->tdir_ignore) */ + } /* -- for-loop -- */ + + if( tif->tif_mode == O_RDWR && + tif->tif_dir.td_stripoffset_entry.tdir_tag != 0 && + tif->tif_dir.td_stripoffset_entry.tdir_count == 0 && + tif->tif_dir.td_stripoffset_entry.tdir_type == 0 && + tif->tif_dir.td_stripoffset_entry.tdir_offset.toff_long8 == 0 && + tif->tif_dir.td_stripbytecount_entry.tdir_tag != 0 && + tif->tif_dir.td_stripbytecount_entry.tdir_count == 0 && + tif->tif_dir.td_stripbytecount_entry.tdir_type == 0 && + tif->tif_dir.td_stripbytecount_entry.tdir_offset.toff_long8 == 0 ) + { + /* Directory typically created with TIFFDeferStrileArrayWriting() */ + TIFFSetupStrips(tif); + } + else if( !(tif->tif_flags&TIFF_DEFERSTRILELOAD) ) + { + if( tif->tif_dir.td_stripoffset_entry.tdir_tag != 0 ) + { + if (!TIFFFetchStripThing(tif,&(tif->tif_dir.td_stripoffset_entry), + tif->tif_dir.td_nstrips, + &tif->tif_dir.td_stripoffset_p)) + { + goto bad; + } + } + if( tif->tif_dir.td_stripbytecount_entry.tdir_tag != 0 ) + { + if (!TIFFFetchStripThing(tif,&(tif->tif_dir.td_stripbytecount_entry), + tif->tif_dir.td_nstrips, + &tif->tif_dir.td_stripbytecount_p)) + { + goto bad; + } + } + } + /* * OJPEG hack: * - If a) compression is OJPEG, and b) photometric tag is missing, @@ -4072,7 +4115,7 @@ TIFFReadDirectory(TIFF* tif) "Defining non-color channels as ExtraSamples."); old_extrasamples = tif->tif_dir.td_extrasamples; - tif->tif_dir.td_extrasamples = (tif->tif_dir.td_samplesperpixel - color_channels); + tif->tif_dir.td_extrasamples = (uint16) (tif->tif_dir.td_samplesperpixel - color_channels); // sampleinfo should contain information relative to these new extra samples new_sampleinfo = (uint16*) _TIFFcalloc(tif->tif_dir.td_extrasamples, sizeof(uint16)); @@ -4130,33 +4173,10 @@ TIFFReadDirectory(TIFF* tif) "\"StripByteCounts\" field, calculating from imagelength"); if (EstimateStripByteCounts(tif, dir, dircount) < 0) goto bad; - /* - * Assume we have wrong StripByteCount value (in case - * of single strip) in following cases: - * - it is equal to zero along with StripOffset; - * - it is larger than file itself (in case of uncompressed - * image); - * - it is smaller than the size of the bytes per row - * multiplied on the number of rows. The last case should - * not be checked in the case of writing new image, - * because we may do not know the exact strip size - * until the whole image will be written and directory - * dumped out. - */ - #define BYTECOUNTLOOKSBAD \ - ( (tif->tif_dir.td_stripbytecount[0] == 0 && tif->tif_dir.td_stripoffset[0] != 0) || \ - (tif->tif_dir.td_compression == COMPRESSION_NONE && \ - (tif->tif_dir.td_stripoffset[0] <= TIFFGetFileSize(tif) && \ - tif->tif_dir.td_stripbytecount[0] > TIFFGetFileSize(tif) - tif->tif_dir.td_stripoffset[0])) || \ - (tif->tif_mode == O_RDONLY && \ - tif->tif_dir.td_compression == COMPRESSION_NONE && \ - tif->tif_dir.td_stripbytecount[0] < TIFFScanlineSize64(tif) * tif->tif_dir.td_imagelength) ) } else if (tif->tif_dir.td_nstrips == 1 && !(tif->tif_flags&TIFF_ISTILED) - && _TIFFFillStriles(tif) - && tif->tif_dir.td_stripoffset[0] != 0 - && BYTECOUNTLOOKSBAD) { + && ByteCountLooksBad(tif)) { /* * XXX: Plexus (and others) sometimes give a value of * zero for a tag when they don't know what the @@ -4168,13 +4188,13 @@ TIFFReadDirectory(TIFF* tif) if(EstimateStripByteCounts(tif, dir, dircount) < 0) goto bad; -#if !defined(DEFER_STRILE_LOAD) - } else if (tif->tif_dir.td_planarconfig == PLANARCONFIG_CONTIG + } else if (!(tif->tif_flags&TIFF_DEFERSTRILELOAD) + && tif->tif_dir.td_planarconfig == PLANARCONFIG_CONTIG && tif->tif_dir.td_nstrips > 2 && tif->tif_dir.td_compression == COMPRESSION_NONE - && tif->tif_dir.td_stripbytecount[0] != tif->tif_dir.td_stripbytecount[1] - && tif->tif_dir.td_stripbytecount[0] != 0 - && tif->tif_dir.td_stripbytecount[1] != 0 ) { + && TIFFGetStrileByteCount(tif, 0) != TIFFGetStrileByteCount(tif, 1) + && TIFFGetStrileByteCount(tif, 0) != 0 + && TIFFGetStrileByteCount(tif, 1) != 0 ) { /* * XXX: Some vendors fill StripByteCount array with * absolutely wrong values (it can be equal to @@ -4189,7 +4209,6 @@ TIFFReadDirectory(TIFF* tif) "Wrong \"StripByteCounts\" field, ignoring and calculating from imagelength"); if (EstimateStripByteCounts(tif, dir, dircount) < 0) goto bad; -#endif /* !defined(DEFER_STRILE_LOAD) */ } } if (dir) @@ -4204,26 +4223,27 @@ TIFFReadDirectory(TIFF* tif) else tif->tif_dir.td_maxsamplevalue = (uint16)((1L<tif_dir.td_bitspersample)-1); } + +#ifdef STRIPBYTECOUNTSORTED_UNUSED /* * XXX: We can optimize checking for the strip bounds using the sorted * bytecounts array. See also comments for TIFFAppendToStrip() * function in tif_write.c. */ -#if !defined(DEFER_STRILE_LOAD) - if (tif->tif_dir.td_nstrips > 1) { + if (!(tif->tif_flags&TIFF_DEFERSTRILELOAD) && tif->tif_dir.td_nstrips > 1) { uint32 strip; tif->tif_dir.td_stripbytecountsorted = 1; for (strip = 1; strip < tif->tif_dir.td_nstrips; strip++) { - if (tif->tif_dir.td_stripoffset[strip - 1] > - tif->tif_dir.td_stripoffset[strip]) { + if (TIFFGetStrileOffset(tif, strip - 1) > + TIFFGetStrileOffset(tif, strip)) { tif->tif_dir.td_stripbytecountsorted = 0; break; } } } -#endif /* !defined(DEFER_STRILE_LOAD) */ - +#endif + /* * An opportunity for compression mode dependent tag fixup */ @@ -4242,11 +4262,20 @@ TIFFReadDirectory(TIFF* tif) (tif->tif_dir.td_nstrips==1)&& (tif->tif_dir.td_compression==COMPRESSION_NONE)&& ((tif->tif_flags&(TIFF_STRIPCHOP|TIFF_ISTILED))==TIFF_STRIPCHOP)) - { - if ( !_TIFFFillStriles(tif) || !tif->tif_dir.td_stripbytecount ) - return 0; - ChopUpSingleUncompressedStrip(tif); - } + { + ChopUpSingleUncompressedStrip(tif); + } + + /* There are also uncompressed striped files with strips larger than */ + /* 2 GB, which make them unfriendly with a lot of code. If possible, */ + /* try to expose smaller "virtual" strips. */ + if( tif->tif_dir.td_planarconfig == PLANARCONFIG_CONTIG && + tif->tif_dir.td_compression == COMPRESSION_NONE && + (tif->tif_flags&(TIFF_STRIPCHOP|TIFF_ISTILED)) == TIFF_STRIPCHOP && + TIFFStripSize64(tif) > 0x7FFFFFFFUL ) + { + TryChopUpUncompressedBigTiff(tif); + } /* * Clear the dirty directory flag. @@ -4398,17 +4427,17 @@ TIFFReadCustomDirectory(TIFF* tif, toff_t diroff, TIFFWarningExt(tif->tif_clientdata, module, "Registering anonymous field with tag %d (0x%x) failed", dp->tdir_tag, dp->tdir_tag); - dp->tdir_tag=IGNORE; + dp->tdir_ignore = TRUE; } else { TIFFReadDirectoryFindFieldInfo(tif,dp->tdir_tag,&fii); assert( fii != FAILED_FII ); } } - if (dp->tdir_tag!=IGNORE) + if (!dp->tdir_ignore) { fip=tif->tif_fields[fii]; if (fip->field_bit==FIELD_IGNORE) - dp->tdir_tag=IGNORE; + dp->tdir_ignore = TRUE; else { /* check data type */ @@ -4428,7 +4457,7 @@ TIFFReadCustomDirectory(TIFF* tif, toff_t diroff, TIFFWarningExt(tif->tif_clientdata, module, "Wrong data type %d for \"%s\"; tag ignored", dp->tdir_type,fip->field_name); - dp->tdir_tag=IGNORE; + dp->tdir_ignore = TRUE; } else { @@ -4442,21 +4471,21 @@ TIFFReadCustomDirectory(TIFF* tif, toff_t diroff, else expected=(uint32)fip->field_readcount; if (!CheckDirCount(tif,dp,expected)) - dp->tdir_tag=IGNORE; + dp->tdir_ignore = TRUE; } } } - switch (dp->tdir_tag) - { - case IGNORE: - break; - case EXIFTAG_SUBJECTDISTANCE: - (void) TIFFFetchSubjectDistance(tif,dp); - break; - default: - (void) TIFFFetchNormalTag(tif, dp, TRUE); - break; - } + if (!dp->tdir_ignore) { + switch (dp->tdir_tag) + { + case EXIFTAG_SUBJECTDISTANCE: + (void)TIFFFetchSubjectDistance(tif, dp); + break; + default: + (void)TIFFFetchNormalTag(tif, dp, TRUE); + break; + } + } /*-- if (!dp->tdir_ignore) */ } } if (dir) @@ -4489,12 +4518,12 @@ EstimateStripByteCounts(TIFF* tif, TIFFDirEntry* dir, uint16 dircount) if( !_TIFFFillStrilesInternal( tif, 0 ) ) return -1; - if (td->td_stripbytecount) - _TIFFfree(td->td_stripbytecount); - td->td_stripbytecount = (uint64*) + if (td->td_stripbytecount_p) + _TIFFfree(td->td_stripbytecount_p); + td->td_stripbytecount_p = (uint64*) _TIFFCheckMalloc(tif, td->td_nstrips, sizeof (uint64), "for \"StripByteCounts\" array"); - if( td->td_stripbytecount == NULL ) + if( td->td_stripbytecount_p == NULL ) return -1; if (td->td_compression != COMPRESSION_NONE) { @@ -4518,6 +4547,8 @@ EstimateStripByteCounts(TIFF* tif, TIFFDirEntry* dir, uint16 dircount) dp->tdir_type); return -1; } + if( dp->tdir_count > TIFF_UINT64_MAX / typewidth ) + return -1; datasize=(uint64)typewidth*dp->tdir_count; if (!(tif->tif_flags&TIFF_BIGTIFF)) { @@ -4529,6 +4560,8 @@ EstimateStripByteCounts(TIFF* tif, TIFFDirEntry* dir, uint16 dircount) if (datasize<=8) datasize=0; } + if( space > TIFF_UINT64_MAX - datasize ) + return -1; space+=datasize; } if( filesize < space ) @@ -4539,7 +4572,7 @@ EstimateStripByteCounts(TIFF* tif, TIFFDirEntry* dir, uint16 dircount) if (td->td_planarconfig == PLANARCONFIG_SEPARATE) space /= td->td_samplesperpixel; for (strip = 0; strip < td->td_nstrips; strip++) - td->td_stripbytecount[strip] = space; + td->td_stripbytecount_p[strip] = space; /* * This gross hack handles the case were the offset to * the last strip is past the place where we think the strip @@ -4548,18 +4581,30 @@ EstimateStripByteCounts(TIFF* tif, TIFFDirEntry* dir, uint16 dircount) * of data in the strip and trim this number back accordingly. */ strip--; - if (td->td_stripoffset[strip]+td->td_stripbytecount[strip] > filesize) - td->td_stripbytecount[strip] = filesize - td->td_stripoffset[strip]; + if (td->td_stripoffset_p[strip] > TIFF_UINT64_MAX - td->td_stripbytecount_p[strip]) + return -1; + if (td->td_stripoffset_p[strip]+td->td_stripbytecount_p[strip] > filesize) { + if( td->td_stripoffset_p[strip] >= filesize ) { + /* Not sure what we should in that case... */ + td->td_stripbytecount_p[strip] = 0; + } else { + td->td_stripbytecount_p[strip] = filesize - td->td_stripoffset_p[strip]; + } + } } else if (isTiled(tif)) { uint64 bytespertile = TIFFTileSize64(tif); for (strip = 0; strip < td->td_nstrips; strip++) - td->td_stripbytecount[strip] = bytespertile; + td->td_stripbytecount_p[strip] = bytespertile; } else { uint64 rowbytes = TIFFScanlineSize64(tif); uint32 rowsperstrip = td->td_imagelength/td->td_stripsperimage; for (strip = 0; strip < td->td_nstrips; strip++) - td->td_stripbytecount[strip] = rowbytes * rowsperstrip; + { + if( rowbytes > 0 && rowsperstrip > TIFF_UINT64_MAX / rowbytes ) + return -1; + td->td_stripbytecount_p[strip] = rowbytes * rowsperstrip; + } } TIFFSetFieldBit(tif, FIELD_STRIPBYTECOUNTS); if (!TIFFFieldSet(tif, FIELD_ROWSPERSTRIP)) @@ -4753,12 +4798,13 @@ TIFFFetchDirectory(TIFF* tif, uint64 diroff, TIFFDirEntry** pdir, } } else { tmsize_t m; - tmsize_t off = (tmsize_t) tif->tif_diroff; - if ((uint64)off!=tif->tif_diroff) + tmsize_t off; + if (tif->tif_diroff > (uint64)TIFF_INT64_MAX) { TIFFErrorExt(tif->tif_clientdata,module,"Can not read TIFF directory count"); return(0); } + off = (tmsize_t) tif->tif_diroff; /* * Check for integer overflow when validating the dir_off, @@ -4876,6 +4922,7 @@ TIFFFetchDirectory(TIFF* tif, uint64 diroff, TIFFDirEntry** pdir, mb=dir; for (n=0; ntdir_ignore = FALSE; if (tif->tif_flags&TIFF_SWAB) TIFFSwabShort((uint16*)ma); mb->tdir_tag=*(uint16*)ma; @@ -4890,6 +4937,7 @@ TIFFFetchDirectory(TIFF* tif, uint64 diroff, TIFFDirEntry** pdir, TIFFSwabLong((uint32*)ma); mb->tdir_count=(uint64)(*(uint32*)ma); ma+=sizeof(uint32); + mb->tdir_offset.toff_long8=0; *(uint32*)(&mb->tdir_offset)=*(uint32*)ma; ma+=sizeof(uint32); } @@ -4943,17 +4991,18 @@ TIFFFetchNormalTag(TIFF* tif, TIFFDirEntry* dp, int recover) err=TIFFReadDirEntryByteArray(tif,dp,&data); if (err==TIFFReadDirEntryErrOk) { - uint8* ma; - uint32 mb; + uint32 mb = 0; int n; - ma=data; - mb=0; - while (mb<(uint32)dp->tdir_count) + if (data != NULL) { - if (*ma==0) - break; - ma++; - mb++; + uint8* ma = data; + while (mb<(uint32)dp->tdir_count) + { + if (*ma==0) + break; + ma++; + mb++; + } } if (mb+1<(uint32)dp->tdir_count) TIFFWarningExt(tif->tif_clientdata,module,"ASCII value for tag \"%s\" contains null byte in value; value incorrectly truncated during reading due to implementation limitations",fip->field_name); @@ -5203,11 +5252,11 @@ TIFFFetchNormalTag(TIFF* tif, TIFFDirEntry* dp, int recover) if (err==TIFFReadDirEntryErrOk) { int m; - if( dp->tdir_count > 0 && data[dp->tdir_count-1] != '\0' ) - { - TIFFWarningExt(tif->tif_clientdata,module,"ASCII value for tag \"%s\" does not end in null byte. Forcing it to be null",fip->field_name); - data[dp->tdir_count-1] = '\0'; - } + if( data != 0 && dp->tdir_count > 0 && data[dp->tdir_count-1] != '\0' ) + { + TIFFWarningExt(tif->tif_clientdata,module,"ASCII value for tag \"%s\" does not end in null byte. Forcing it to be null",fip->field_name); + data[dp->tdir_count-1] = '\0'; + } m=TIFFSetField(tif,dp->tdir_tag,(uint16)(dp->tdir_count),data); if (data!=0) _TIFFfree(data); @@ -5380,11 +5429,11 @@ TIFFFetchNormalTag(TIFF* tif, TIFFDirEntry* dp, int recover) if (err==TIFFReadDirEntryErrOk) { int m; - if( dp->tdir_count > 0 && data[dp->tdir_count-1] != '\0' ) - { - TIFFWarningExt(tif->tif_clientdata,module,"ASCII value for tag \"%s\" does not end in null byte. Forcing it to be null",fip->field_name); - data[dp->tdir_count-1] = '\0'; - } + if( data != 0 && dp->tdir_count > 0 && data[dp->tdir_count-1] != '\0' ) + { + TIFFWarningExt(tif->tif_clientdata,module,"ASCII value for tag \"%s\" does not end in null byte. Forcing it to be null",fip->field_name); + data[dp->tdir_count-1] = '\0'; + } m=TIFFSetField(tif,dp->tdir_tag,(uint32)(dp->tdir_count),data); if (data!=0) _TIFFfree(data); @@ -5682,7 +5731,7 @@ TIFFFetchSubjectDistance(TIFF* tif, TIFFDirEntry* dir) TIFFSwabArrayOfLong(m.i,2); if (m.i[0]==0) n=0.0; - else if (m.i[0]==0xFFFFFFFF) + else if (m.i[0]==0xFFFFFFFF || m.i[1]==0) /* * XXX: Numerator 0xFFFFFFFF means that we have infinite * distance. Indicate that with a negative floating point @@ -5700,6 +5749,75 @@ TIFFFetchSubjectDistance(TIFF* tif, TIFFDirEntry* dir) } } +static void allocChoppedUpStripArrays(TIFF* tif, uint32 nstrips, + uint64 stripbytes, uint32 rowsperstrip) +{ + TIFFDirectory *td = &tif->tif_dir; + uint64 bytecount; + uint64 offset; + uint64 last_offset; + uint64 last_bytecount; + uint32 i; + uint64 *newcounts; + uint64 *newoffsets; + + offset = TIFFGetStrileOffset(tif, 0); + last_offset = TIFFGetStrileOffset(tif, td->td_nstrips-1); + last_bytecount = TIFFGetStrileByteCount(tif, td->td_nstrips-1); + if( last_offset > TIFF_UINT64_MAX - last_bytecount || + last_offset + last_bytecount < offset ) + { + return; + } + bytecount = last_offset + last_bytecount - offset; + + newcounts = (uint64*) _TIFFCheckMalloc(tif, nstrips, sizeof (uint64), + "for chopped \"StripByteCounts\" array"); + newoffsets = (uint64*) _TIFFCheckMalloc(tif, nstrips, sizeof (uint64), + "for chopped \"StripOffsets\" array"); + if (newcounts == NULL || newoffsets == NULL) { + /* + * Unable to allocate new strip information, give up and use + * the original one strip information. + */ + if (newcounts != NULL) + _TIFFfree(newcounts); + if (newoffsets != NULL) + _TIFFfree(newoffsets); + return; + } + + /* + * Fill the strip information arrays with new bytecounts and offsets + * that reflect the broken-up format. + */ + for (i = 0; i < nstrips; i++) + { + if (stripbytes > bytecount) + stripbytes = bytecount; + newcounts[i] = stripbytes; + newoffsets[i] = stripbytes ? offset : 0; + offset += stripbytes; + bytecount -= stripbytes; + } + + /* + * Replace old single strip info with multi-strip info. + */ + td->td_stripsperimage = td->td_nstrips = nstrips; + TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, rowsperstrip); + + _TIFFfree(td->td_stripbytecount_p); + _TIFFfree(td->td_stripoffset_p); + td->td_stripbytecount_p = newcounts; + td->td_stripoffset_p = newoffsets; +#ifdef STRIPBYTECOUNTSORTED_UNUSED + td->td_stripbytecountsorted = 1; +#endif + tif->tif_flags |= TIFF_CHOPPEDUPARRAYS; +} + + /* * Replace a single strip (tile) of uncompressed data by multiple strips * (tiles), each approximately STRIP_SIZE_DEFAULT bytes. This is useful for @@ -5715,19 +5833,16 @@ ChopUpSingleUncompressedStrip(TIFF* tif) uint32 rowblock; uint64 rowblockbytes; uint64 stripbytes; - uint32 strip; uint32 nstrips; uint32 rowsperstrip; - uint64* newcounts; - uint64* newoffsets; - bytecount = td->td_stripbytecount[0]; + bytecount = TIFFGetStrileByteCount(tif, 0); /* On a newly created file, just re-opened to be filled, we */ /* don't want strip chop to trigger as it is going to cause issues */ /* later ( StripOffsets and StripByteCounts improperly filled) . */ if( bytecount == 0 && tif->tif_mode != O_RDONLY ) return; - offset = td->td_stripoffset[0]; + offset = TIFFGetStrileByteCount(tif, 0); assert(td->td_planarconfig == PLANARCONFIG_CONTIG); if ((td->td_photometric == PHOTOMETRIC_YCBCR)&& (!isUpSampled(tif))) @@ -5770,98 +5885,503 @@ ChopUpSingleUncompressedStrip(TIFF* tif) return; } - newcounts = (uint64*) _TIFFCheckMalloc(tif, nstrips, sizeof (uint64), - "for chopped \"StripByteCounts\" array"); - newoffsets = (uint64*) _TIFFCheckMalloc(tif, nstrips, sizeof (uint64), - "for chopped \"StripOffsets\" array"); - if (newcounts == NULL || newoffsets == NULL) { - /* - * Unable to allocate new strip information, give up and use - * the original one strip information. - */ - if (newcounts != NULL) - _TIFFfree(newcounts); - if (newoffsets != NULL) - _TIFFfree(newoffsets); - return; - } - /* - * Fill the strip information arrays with new bytecounts and offsets - * that reflect the broken-up format. - */ - for (strip = 0; strip < nstrips; strip++) { - if (stripbytes > bytecount) - stripbytes = bytecount; - newcounts[strip] = stripbytes; - newoffsets[strip] = stripbytes ? offset : 0; - offset += stripbytes; - bytecount -= stripbytes; - } - /* - * Replace old single strip info with multi-strip info. - */ - td->td_stripsperimage = td->td_nstrips = nstrips; - TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, rowsperstrip); - - _TIFFfree(td->td_stripbytecount); - _TIFFfree(td->td_stripoffset); - td->td_stripbytecount = newcounts; - td->td_stripoffset = newoffsets; - td->td_stripbytecountsorted = 1; + allocChoppedUpStripArrays(tif, nstrips, stripbytes, rowsperstrip); } -int _TIFFFillStriles( TIFF *tif ) + +/* + * Replace a file with contiguous strips > 2 GB of uncompressed data by + * multiple smaller strips. This is useful for + * dealing with large images or for dealing with machines with a limited + * amount memory. + */ +static void TryChopUpUncompressedBigTiff( TIFF* tif ) { - return _TIFFFillStrilesInternal( tif, 1 ); + TIFFDirectory *td = &tif->tif_dir; + uint32 rowblock; + uint64 rowblockbytes; + uint32 i; + uint64 stripsize; + uint32 rowblocksperstrip; + uint32 rowsperstrip; + uint64 stripbytes; + uint32 nstrips; + + stripsize = TIFFStripSize64(tif); + + assert( tif->tif_dir.td_planarconfig == PLANARCONFIG_CONTIG ); + assert( tif->tif_dir.td_compression == COMPRESSION_NONE ); + assert( (tif->tif_flags&(TIFF_STRIPCHOP|TIFF_ISTILED)) == TIFF_STRIPCHOP ); + assert( stripsize > 0x7FFFFFFFUL ); + + /* On a newly created file, just re-opened to be filled, we */ + /* don't want strip chop to trigger as it is going to cause issues */ + /* later ( StripOffsets and StripByteCounts improperly filled) . */ + if( TIFFGetStrileByteCount(tif, 0) == 0 && tif->tif_mode != O_RDONLY ) + return; + + if ((td->td_photometric == PHOTOMETRIC_YCBCR)&& + (!isUpSampled(tif))) + rowblock = td->td_ycbcrsubsampling[1]; + else + rowblock = 1; + rowblockbytes = TIFFVStripSize64(tif, rowblock); + if( rowblockbytes == 0 || rowblockbytes > 0x7FFFFFFFUL ) + { + /* In case of file with gigantic width */ + return; + } + + /* Check that the strips are contiguous and of the expected size */ + for( i = 0; i < td->td_nstrips; i++ ) + { + if( i == td->td_nstrips - 1 ) + { + if( TIFFGetStrileByteCount(tif, i) < TIFFVStripSize64( + tif, td->td_imagelength - i * td->td_rowsperstrip ) ) + { + return; + } + } + else + { + if( TIFFGetStrileByteCount(tif, i) != stripsize ) + { + return; + } + if( i > 0 && TIFFGetStrileOffset(tif, i) != + TIFFGetStrileOffset(tif, i-1) + TIFFGetStrileByteCount(tif, i-1) ) + { + return; + } + } + } + + /* Aim for 512 MB strips (that will still be manageable by 32 bit builds */ + rowblocksperstrip = (uint32) (512 * 1024 * 1024 / rowblockbytes); + if( rowblocksperstrip == 0 ) + rowblocksperstrip = 1; + rowsperstrip = rowblocksperstrip * rowblock; + stripbytes = rowblocksperstrip * rowblockbytes; + assert( stripbytes <= 0x7FFFFFFFUL ); + + nstrips = TIFFhowmany_32(td->td_imagelength, rowsperstrip); + if( nstrips == 0 ) + return; + + /* If we are going to allocate a lot of memory, make sure that the */ + /* file is as big as needed */ + if( tif->tif_mode == O_RDONLY && + nstrips > 1000000 ) + { + uint64 last_offset = TIFFGetStrileOffset(tif, td->td_nstrips-1); + uint64 filesize = TIFFGetFileSize(tif); + uint64 last_bytecount = TIFFGetStrileByteCount(tif, td->td_nstrips-1); + if( last_offset > filesize || + last_bytecount > filesize - last_offset ) + { + return; + } + } + + allocChoppedUpStripArrays(tif, nstrips, stripbytes, rowsperstrip); } -static int _TIFFFillStrilesInternal( TIFF *tif, int loadStripByteCount ) + +TIFF_NOSANITIZE_UNSIGNED_INT_OVERFLOW +static uint64 _TIFFUnsanitizedAddUInt64AndInt(uint64 a, int b) { -#if defined(DEFER_STRILE_LOAD) - register TIFFDirectory *td = &tif->tif_dir; - int return_value = 1; + return a + b; +} - if( td->td_stripoffset != NULL ) - return 1; +/* Read the value of [Strip|Tile]Offset or [Strip|Tile]ByteCount around + * strip/tile of number strile. Also fetch the neighbouring values using a + * 4096 byte page size. + */ +static +int _TIFFPartialReadStripArray( TIFF* tif, TIFFDirEntry* dirent, + int strile, uint64* panVals ) +{ + static const char module[] = "_TIFFPartialReadStripArray"; +#define IO_CACHE_PAGE_SIZE 4096 + + size_t sizeofval; + const int bSwab = (tif->tif_flags & TIFF_SWAB) != 0; + int sizeofvalint; + uint64 nBaseOffset; + uint64 nOffset; + uint64 nOffsetStartPage; + uint64 nOffsetEndPage; + tmsize_t nToRead; + tmsize_t nRead; + uint64 nLastStripOffset; + int iStartBefore; + int i; + const uint32 arraySize = tif->tif_dir.td_stripoffsetbyteallocsize; + unsigned char buffer[2 * IO_CACHE_PAGE_SIZE]; + + assert( dirent->tdir_count > 4 ); + + if( dirent->tdir_type == TIFF_SHORT ) + { + sizeofval = sizeof(uint16); + } + else if( dirent->tdir_type == TIFF_LONG ) + { + sizeofval = sizeof(uint32); + } + else if( dirent->tdir_type == TIFF_LONG8 ) + { + sizeofval = sizeof(uint64); + } + else + { + TIFFErrorExt(tif->tif_clientdata, module, + "Invalid type for [Strip|Tile][Offset/ByteCount] tag"); + panVals[strile] = 0; + return 0; + } + sizeofvalint = (int)(sizeofval); - if( td->td_stripoffset_entry.tdir_count == 0 ) + if( tif->tif_flags&TIFF_BIGTIFF ) + { + uint64 offset = dirent->tdir_offset.toff_long8; + if( bSwab ) + TIFFSwabLong8(&offset); + nBaseOffset = offset; + } + else + { + uint32 offset = dirent->tdir_offset.toff_long; + if( bSwab ) + TIFFSwabLong(&offset); + nBaseOffset = offset; + } + /* To avoid later unsigned integer overflows */ + if( nBaseOffset > (uint64)TIFF_INT64_MAX ) + { + TIFFErrorExt(tif->tif_clientdata, module, + "Cannot read offset/size for strile %d", strile); + panVals[strile] = 0; + return 0; + } + nOffset = nBaseOffset + sizeofval * strile; + nOffsetStartPage = + (nOffset / IO_CACHE_PAGE_SIZE) * IO_CACHE_PAGE_SIZE; + nOffsetEndPage = nOffsetStartPage + IO_CACHE_PAGE_SIZE; + + if( nOffset + sizeofval > nOffsetEndPage ) + nOffsetEndPage += IO_CACHE_PAGE_SIZE; +#undef IO_CACHE_PAGE_SIZE + + nLastStripOffset = nBaseOffset + arraySize * sizeofval; + if( nLastStripOffset < nOffsetEndPage ) + nOffsetEndPage = nLastStripOffset; + if( nOffsetStartPage >= nOffsetEndPage ) + { + TIFFErrorExt(tif->tif_clientdata, module, + "Cannot read offset/size for strile %d", strile); + panVals[strile] = 0; + return 0; + } + if (!SeekOK(tif,nOffsetStartPage)) + { + panVals[strile] = 0; + return 0; + } + + nToRead = (tmsize_t)(nOffsetEndPage - nOffsetStartPage); + nRead = TIFFReadFile(tif, buffer, nToRead); + if( nRead < nToRead ) + { + TIFFErrorExt(tif->tif_clientdata, module, + "Cannot read offset/size for strile around ~%d", strile); + return 0; + } + iStartBefore = -(int)((nOffset - nOffsetStartPage) / sizeofval); + if( strile + iStartBefore < 0 ) + iStartBefore = -strile; + for( i = iStartBefore; + (uint32)(strile + i) < arraySize && + _TIFFUnsanitizedAddUInt64AndInt(nOffset, (i + 1) * sizeofvalint) <= nOffsetEndPage; + ++i ) + { + if( sizeofval == sizeof(uint16) ) + { + uint16 val; + memcpy(&val, + buffer + (nOffset - nOffsetStartPage) + i * sizeofvalint, + sizeof(val)); + if( bSwab ) + TIFFSwabShort(&val); + panVals[strile + i] = val; + } + else if( sizeofval == sizeof(uint32) ) + { + uint32 val; + memcpy(&val, + buffer + (nOffset - nOffsetStartPage) + i * sizeofvalint, + sizeof(val)); + if( bSwab ) + TIFFSwabLong(&val); + panVals[strile + i] = val; + } + else + { + uint64 val; + memcpy(&val, + buffer + (nOffset - nOffsetStartPage) + i * sizeofvalint, + sizeof(val)); + if( bSwab ) + TIFFSwabLong8(&val); + panVals[strile + i] = val; + } + } + return 1; +} + +static int _TIFFFetchStrileValue(TIFF* tif, + uint32 strile, + TIFFDirEntry* dirent, + uint64** parray) +{ + static const char module[] = "_TIFFFetchStrileValue"; + TIFFDirectory *td = &tif->tif_dir; + if( strile >= dirent->tdir_count ) + { + return 0; + } + if( strile >= td->td_stripoffsetbyteallocsize ) + { + uint32 nStripArrayAllocBefore = td->td_stripoffsetbyteallocsize; + uint32 nStripArrayAllocNew; + uint64 nArraySize64; + size_t nArraySize; + uint64* offsetArray; + uint64* bytecountArray; + + if( strile > 1000000 ) + { + uint64 filesize = TIFFGetFileSize(tif); + /* Avoid excessive memory allocation attempt */ + /* For such a big blockid we need at least a TIFF_LONG per strile */ + /* for the offset array. */ + if( strile > filesize / sizeof(uint32) ) + { + TIFFErrorExt(tif->tif_clientdata, module, "File too short"); return 0; + } + } - if (!TIFFFetchStripThing(tif,&(td->td_stripoffset_entry), - td->td_nstrips,&td->td_stripoffset)) + if( td->td_stripoffsetbyteallocsize == 0 && + td->td_nstrips < 1024 * 1024 ) + { + nStripArrayAllocNew = td->td_nstrips; + } + else { - return_value = 0; +#define TIFF_MAX(a,b) (((a)>(b)) ? (a) : (b)) +#define TIFF_MIN(a,b) (((a)<(b)) ? (a) : (b)) + nStripArrayAllocNew = TIFF_MAX(strile + 1, 1024U * 512U ); + if( nStripArrayAllocNew < 0xFFFFFFFFU / 2 ) + nStripArrayAllocNew *= 2; + nStripArrayAllocNew = TIFF_MIN(nStripArrayAllocNew, td->td_nstrips); } + assert( strile < nStripArrayAllocNew ); + nArraySize64 = (uint64)sizeof(uint64) * nStripArrayAllocNew; + nArraySize = (size_t)(nArraySize64); +#if SIZEOF_SIZE_T == 4 + if( nArraySize != nArraySize64 ) + { + TIFFErrorExt(tif->tif_clientdata, module, + "Cannot allocate strip offset and bytecount arrays"); + return 0; + } +#endif + offsetArray = (uint64*)( + _TIFFrealloc( td->td_stripoffset_p, nArraySize ) ); + bytecountArray = (uint64*)( + _TIFFrealloc( td->td_stripbytecount_p, nArraySize ) ); + if( offsetArray ) + td->td_stripoffset_p = offsetArray; + if( bytecountArray ) + td->td_stripbytecount_p = bytecountArray; + if( offsetArray && bytecountArray ) + { + td->td_stripoffsetbyteallocsize = nStripArrayAllocNew; + /* Initialize new entries to ~0 / -1 */ + memset(td->td_stripoffset_p + nStripArrayAllocBefore, + 0xFF, + (td->td_stripoffsetbyteallocsize - nStripArrayAllocBefore) * sizeof(uint64) ); + memset(td->td_stripbytecount_p + nStripArrayAllocBefore, + 0xFF, + (td->td_stripoffsetbyteallocsize - nStripArrayAllocBefore) * sizeof(uint64) ); + } + else + { + TIFFErrorExt(tif->tif_clientdata, module, + "Cannot allocate strip offset and bytecount arrays"); + _TIFFfree(td->td_stripoffset_p); + td->td_stripoffset_p = NULL; + _TIFFfree(td->td_stripbytecount_p); + td->td_stripbytecount_p = NULL; + td->td_stripoffsetbyteallocsize = 0; + } + } + if( *parray == NULL || strile >= td->td_stripoffsetbyteallocsize ) + return 0; - if (loadStripByteCount && - !TIFFFetchStripThing(tif,&(td->td_stripbytecount_entry), - td->td_nstrips,&td->td_stripbytecount)) + if( ~((*parray)[strile]) == 0 ) + { + if( !_TIFFPartialReadStripArray( tif, dirent, strile, *parray ) ) { - return_value = 0; + (*parray)[strile] = 0; + return 0; } + } - _TIFFmemset( &(td->td_stripoffset_entry), 0, sizeof(TIFFDirEntry)); - _TIFFmemset( &(td->td_stripbytecount_entry), 0, sizeof(TIFFDirEntry)); + return 1; +} - if (tif->tif_dir.td_nstrips > 1 && return_value == 1 ) { - uint32 strip; +static uint64 _TIFFGetStrileOffsetOrByteCountValue(TIFF *tif, uint32 strile, + TIFFDirEntry* dirent, + uint64** parray, + int *pbErr) +{ + TIFFDirectory *td = &tif->tif_dir; + if( pbErr ) + *pbErr = 0; + if( (tif->tif_flags&TIFF_DEFERSTRILELOAD) && !(tif->tif_flags&TIFF_CHOPPEDUPARRAYS) ) + { + if( !(tif->tif_flags&TIFF_LAZYSTRILELOAD) || + /* If the values may fit in the toff_long/toff_long8 member */ + /* then use _TIFFFillStriles to simplify _TIFFFetchStrileValue */ + dirent->tdir_count <= 4 ) + { + if( !_TIFFFillStriles(tif) ) + { + if( pbErr ) + *pbErr = 1; + /* Do not return, as we want this function to always */ + /* return the same value if called several times with */ + /* the same arguments */ + } + } + else + { + if( !_TIFFFetchStrileValue(tif, strile, dirent, parray) ) + { + if( pbErr ) + *pbErr = 1; + return 0; + } + } + } + if( *parray == NULL || strile >= td->td_nstrips ) + { + if( pbErr ) + *pbErr = 1; + return 0; + } + return (*parray)[strile]; +} - tif->tif_dir.td_stripbytecountsorted = 1; - for (strip = 1; strip < tif->tif_dir.td_nstrips; strip++) { - if (tif->tif_dir.td_stripoffset[strip - 1] > - tif->tif_dir.td_stripoffset[strip]) { - tif->tif_dir.td_stripbytecountsorted = 0; - break; - } - } - } +/* Return the value of the TileOffsets/StripOffsets array for the specified tile/strile */ +uint64 TIFFGetStrileOffset(TIFF *tif, uint32 strile) +{ + return TIFFGetStrileOffsetWithErr(tif, strile, NULL); +} + +/* Return the value of the TileOffsets/StripOffsets array for the specified tile/strile */ +uint64 TIFFGetStrileOffsetWithErr(TIFF *tif, uint32 strile, int *pbErr) +{ + TIFFDirectory *td = &tif->tif_dir; + return _TIFFGetStrileOffsetOrByteCountValue(tif, strile, + &(td->td_stripoffset_entry), + &(td->td_stripoffset_p), pbErr); +} + +/* Return the value of the TileByteCounts/StripByteCounts array for the specified tile/strile */ +uint64 TIFFGetStrileByteCount(TIFF *tif, uint32 strile) +{ + return TIFFGetStrileByteCountWithErr(tif, strile, NULL); +} + +/* Return the value of the TileByteCounts/StripByteCounts array for the specified tile/strile */ +uint64 TIFFGetStrileByteCountWithErr(TIFF *tif, uint32 strile, int *pbErr) +{ + TIFFDirectory *td = &tif->tif_dir; + return _TIFFGetStrileOffsetOrByteCountValue(tif, strile, + &(td->td_stripbytecount_entry), + &(td->td_stripbytecount_p), pbErr); +} + + +int _TIFFFillStriles( TIFF *tif ) +{ + return _TIFFFillStrilesInternal( tif, 1 ); +} + +static int _TIFFFillStrilesInternal( TIFF *tif, int loadStripByteCount ) +{ + register TIFFDirectory *td = &tif->tif_dir; + int return_value = 1; - return return_value; -#else /* !defined(DEFER_STRILE_LOAD) */ - (void) tif; - (void) loadStripByteCount; + /* Do not do anything if TIFF_DEFERSTRILELOAD is not set */ + if( !(tif->tif_flags&TIFF_DEFERSTRILELOAD) || (tif->tif_flags&TIFF_CHOPPEDUPARRAYS) != 0 ) return 1; -#endif + + if( tif->tif_flags&TIFF_LAZYSTRILELOAD ) + { + /* In case of lazy loading, reload completely the arrays */ + _TIFFfree(td->td_stripoffset_p); + _TIFFfree(td->td_stripbytecount_p); + td->td_stripoffset_p = NULL; + td->td_stripbytecount_p = NULL; + td->td_stripoffsetbyteallocsize = 0; + tif->tif_flags &= ~TIFF_LAZYSTRILELOAD; + } + + /* If stripoffset array is already loaded, exit with success */ + if( td->td_stripoffset_p != NULL ) + return 1; + + /* If tdir_count was cancelled, then we already got there, but in error */ + if( td->td_stripoffset_entry.tdir_count == 0 ) + return 0; + + if (!TIFFFetchStripThing(tif,&(td->td_stripoffset_entry), + td->td_nstrips,&td->td_stripoffset_p)) + { + return_value = 0; + } + + if (loadStripByteCount && + !TIFFFetchStripThing(tif,&(td->td_stripbytecount_entry), + td->td_nstrips,&td->td_stripbytecount_p)) + { + return_value = 0; + } + + _TIFFmemset( &(td->td_stripoffset_entry), 0, sizeof(TIFFDirEntry)); + _TIFFmemset( &(td->td_stripbytecount_entry), 0, sizeof(TIFFDirEntry)); + +#ifdef STRIPBYTECOUNTSORTED_UNUSED + if (tif->tif_dir.td_nstrips > 1 && return_value == 1 ) { + uint32 strip; + + tif->tif_dir.td_stripbytecountsorted = 1; + for (strip = 1; strip < tif->tif_dir.td_nstrips; strip++) { + if (tif->tif_dir.td_stripoffset_p[strip - 1] > + tif->tif_dir.td_stripoffset_p[strip]) { + tif->tif_dir.td_stripbytecountsorted = 0; + break; + } + } + } +#endif + + return return_value; } diff --git a/external/tiff-4.0.9/libtiff/tif_dirwrite.c b/external/tiff-4.1.0/libtiff/tif_dirwrite.c similarity index 89% rename from external/tiff-4.0.9/libtiff/tif_dirwrite.c rename to external/tiff-4.1.0/libtiff/tif_dirwrite.c index 5d0a6699..9e4d3060 100644 --- a/external/tiff-4.0.9/libtiff/tif_dirwrite.c +++ b/external/tiff-4.1.0/libtiff/tif_dirwrite.c @@ -1,5 +1,3 @@ -/* $Id: tif_dirwrite.c,v 1.89 2017-08-23 13:33:42 erouault Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. @@ -30,7 +28,6 @@ * Directory Write Support Routines. */ #include "tiffiop.h" -#include #ifdef HAVE_IEEEFP #define TIFFCvtNativeToIEEEFloat(tif, n, fp) @@ -184,6 +181,51 @@ TIFFWriteDirectory(TIFF* tif) return TIFFWriteDirectorySec(tif,TRUE,TRUE,NULL); } +/* + * This is an advanced writing function that must be used in a particular + * sequence, and generally together with TIFFForceStrileArrayWriting(), + * to make its intended effect. Its aim is to modify the location + * where the [Strip/Tile][Offsets/ByteCounts] arrays are located in the file. + * More precisely, when TIFFWriteCheck() will be called, the tag entries for + * those arrays will be written with type = count = offset = 0 as a temporary + * value. + * + * Its effect is only valid for the current directory, and before + * TIFFWriteDirectory() is first called, and will be reset when + * changing directory. + * + * The typical sequence of calls is: + * TIFFOpen() + * [ TIFFCreateDirectory(tif) ] + * Set fields with calls to TIFFSetField(tif, ...) + * TIFFDeferStrileArrayWriting(tif) + * TIFFWriteCheck(tif, ...) + * TIFFWriteDirectory(tif) + * ... potentially create other directories and come back to the above directory + * TIFFForceStrileArrayWriting(tif): emit the arrays at the end of file + * + * Returns 1 in case of success, 0 otherwise. + */ +int TIFFDeferStrileArrayWriting(TIFF* tif) +{ + static const char module[] = "TIFFDeferStrileArrayWriting"; + if (tif->tif_mode == O_RDONLY) + { + TIFFErrorExt(tif->tif_clientdata, tif->tif_name, + "File opened in read-only mode"); + return 0; + } + if( tif->tif_diroff != 0 ) + { + TIFFErrorExt(tif->tif_clientdata, module, + "Directory has already been written"); + return 0; + } + + tif->tif_dir.td_deferstrilearraywriting = TRUE; + return 1; +} + /* * Similar to TIFFWriteDirectory(), writes the directory out * but leaves all data structures in memory so that it can be @@ -195,7 +237,7 @@ TIFFCheckpointDirectory(TIFF* tif) { int rc; /* Setup the strips arrays, if they haven't already been. */ - if (tif->tif_dir.td_stripoffset == NULL) + if (tif->tif_dir.td_stripoffset_p == NULL) (void) TIFFSetupStrips(tif); rc = TIFFWriteDirectorySec(tif,TRUE,FALSE,NULL); (void) TIFFSetWriteOffset(tif, TIFFSeekFile(tif, 0, SEEK_END)); @@ -530,12 +572,12 @@ TIFFWriteDirectorySec(TIFF* tif, int isimage, int imagedone, uint64* pdiroff) { if (!isTiled(tif)) { - if (!TIFFWriteDirectoryTagLongLong8Array(tif,&ndir,dir,TIFFTAG_STRIPBYTECOUNTS,tif->tif_dir.td_nstrips,tif->tif_dir.td_stripbytecount)) + if (!TIFFWriteDirectoryTagLongLong8Array(tif,&ndir,dir,TIFFTAG_STRIPBYTECOUNTS,tif->tif_dir.td_nstrips,tif->tif_dir.td_stripbytecount_p)) goto bad; } else { - if (!TIFFWriteDirectoryTagLongLong8Array(tif,&ndir,dir,TIFFTAG_TILEBYTECOUNTS,tif->tif_dir.td_nstrips,tif->tif_dir.td_stripbytecount)) + if (!TIFFWriteDirectoryTagLongLong8Array(tif,&ndir,dir,TIFFTAG_TILEBYTECOUNTS,tif->tif_dir.td_nstrips,tif->tif_dir.td_stripbytecount_p)) goto bad; } } @@ -543,7 +585,7 @@ TIFFWriteDirectorySec(TIFF* tif, int isimage, int imagedone, uint64* pdiroff) { if (!isTiled(tif)) { - /* td_stripoffset might be NULL in an odd OJPEG case. See + /* td_stripoffset_p might be NULL in an odd OJPEG case. See * tif_dirread.c around line 3634. * XXX: OJPEG hack. * If a) compression is OJPEG, b) it's not a tiled TIFF, @@ -554,13 +596,13 @@ TIFFWriteDirectorySec(TIFF* tif, int isimage, int imagedone, uint64* pdiroff) * We can get here when using tiffset on such a file. * See http://bugzilla.maptools.org/show_bug.cgi?id=2500 */ - if (tif->tif_dir.td_stripoffset != NULL && - !TIFFWriteDirectoryTagLongLong8Array(tif,&ndir,dir,TIFFTAG_STRIPOFFSETS,tif->tif_dir.td_nstrips,tif->tif_dir.td_stripoffset)) + if (tif->tif_dir.td_stripoffset_p != NULL && + !TIFFWriteDirectoryTagLongLong8Array(tif,&ndir,dir,TIFFTAG_STRIPOFFSETS,tif->tif_dir.td_nstrips,tif->tif_dir.td_stripoffset_p)) goto bad; } else { - if (!TIFFWriteDirectoryTagLongLong8Array(tif,&ndir,dir,TIFFTAG_TILEOFFSETS,tif->tif_dir.td_nstrips,tif->tif_dir.td_stripoffset)) + if (!TIFFWriteDirectoryTagLongLong8Array(tif,&ndir,dir,TIFFTAG_TILEOFFSETS,tif->tif_dir.td_nstrips,tif->tif_dir.td_stripoffset_p)) goto bad; } } @@ -948,15 +990,6 @@ TIFFWriteDirectorySec(TIFF* tif, int isimage, int imagedone, uint64* pdiroff) return(0); } -static float TIFFClampDoubleToFloat( double val ) -{ - if( val > FLT_MAX ) - return FLT_MAX; - if( val < -FLT_MAX ) - return -FLT_MAX; - return (float)val; -} - static int8 TIFFClampDoubleToInt8( double val ) { if( val > 127 ) @@ -1031,7 +1064,7 @@ TIFFWriteDirectoryTagSampleformatArray(TIFF* tif, uint32* ndir, TIFFDirEntry* di if (tif->tif_dir.td_bitspersample<=32) { for (i = 0; i < count; ++i) - ((float*)conv)[i] = TIFFClampDoubleToFloat(value[i]); + ((float*)conv)[i] = _TIFFClampDoubleToFloat(value[i]); ok = TIFFWriteDirectoryTagFloatArray(tif,ndir,dir,tag,count,(float*)conv); } else @@ -1663,22 +1696,52 @@ TIFFWriteDirectoryTagShortLong(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint1 return(TIFFWriteDirectoryTagCheckedLong(tif,ndir,dir,tag,value)); } +static int _WriteAsType(TIFF* tif, uint64 strile_size, uint64 uncompressed_threshold) +{ + const uint16 compression = tif->tif_dir.td_compression; + if ( compression == COMPRESSION_NONE ) + { + return strile_size > uncompressed_threshold; + } + else if ( compression == COMPRESSION_JPEG || + compression == COMPRESSION_LZW || + compression == COMPRESSION_ADOBE_DEFLATE || + compression == COMPRESSION_LZMA || + compression == COMPRESSION_LERC || + compression == COMPRESSION_ZSTD || + compression == COMPRESSION_WEBP ) + { + /* For a few select compression types, we assume that in the worst */ + /* case the compressed size will be 10 times the uncompressed size */ + /* This is overly pessismistic ! */ + return strile_size >= uncompressed_threshold / 10; + } + return 1; +} + +static int WriteAsLong8(TIFF* tif, uint64 strile_size) +{ + return _WriteAsType(tif, strile_size, 0xFFFFFFFFU); +} + +static int WriteAsLong4(TIFF* tif, uint64 strile_size) +{ + return _WriteAsType(tif, strile_size, 0xFFFFU); +} + /************************************************************************/ /* TIFFWriteDirectoryTagLongLong8Array() */ /* */ -/* Write out LONG8 array as LONG8 for BigTIFF or LONG for */ -/* Classic TIFF with some checking. */ +/* Write out LONG8 array and write a SHORT/LONG/LONG8 depending */ +/* on strile size and Classic/BigTIFF mode. */ /************************************************************************/ static int TIFFWriteDirectoryTagLongLong8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint64* value) { static const char module[] = "TIFFWriteDirectoryTagLongLong8Array"; - uint64* ma; - uint32 mb; - uint32* p; - uint32* q; int o; + int write_aslong4; /* is this just a counting pass? */ if (dir==NULL) @@ -1687,37 +1750,105 @@ TIFFWriteDirectoryTagLongLong8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, return(1); } - /* We always write LONG8 for BigTIFF, no checking needed. */ - if( tif->tif_flags&TIFF_BIGTIFF ) - return TIFFWriteDirectoryTagCheckedLong8Array(tif,ndir,dir, - tag,count,value); - - /* - ** For classic tiff we want to verify everything is in range for LONG - ** and convert to long format. - */ + if( tif->tif_dir.td_deferstrilearraywriting ) + { + return TIFFWriteDirectoryTagData(tif, ndir, dir, tag, TIFF_NOTYPE, 0, 0, NULL); + } - p = _TIFFmalloc(count*sizeof(uint32)); - if (p==NULL) + if( tif->tif_flags&TIFF_BIGTIFF ) { - TIFFErrorExt(tif->tif_clientdata,module,"Out of memory"); - return(0); + int write_aslong8 = 1; + /* In the case of ByteCounts array, we may be able to write them on */ + /* LONG if the strip/tilesize is not too big. */ + /* Also do that for count > 1 in the case someone would want to create */ + /* a single-strip file with a growing height, in which case using */ + /* LONG8 will be safer. */ + if( count > 1 && tag == TIFFTAG_STRIPBYTECOUNTS ) + { + write_aslong8 = WriteAsLong8(tif, TIFFStripSize64(tif)); + } + else if( count > 1 && tag == TIFFTAG_TILEBYTECOUNTS ) + { + write_aslong8 = WriteAsLong8(tif, TIFFTileSize64(tif)); + } + if( write_aslong8 ) + { + return TIFFWriteDirectoryTagCheckedLong8Array(tif,ndir,dir, + tag,count,value); + } } - for (q=p, ma=value, mb=0; mb 1 && tag == TIFFTAG_STRIPBYTECOUNTS ) { - if (*ma>0xFFFFFFFF) + write_aslong4 = WriteAsLong4(tif, TIFFStripSize64(tif)); + } + else if( count > 1 && tag == TIFFTAG_TILEBYTECOUNTS ) + { + write_aslong4 = WriteAsLong4(tif, TIFFTileSize64(tif)); + } + if( write_aslong4 ) + { + /* + ** For classic tiff we want to verify everything is in range for LONG + ** and convert to long format. + */ + + uint32* p = _TIFFmalloc(count*sizeof(uint32)); + uint32* q; + uint64* ma; + uint32 mb; + + if (p==NULL) { - TIFFErrorExt(tif->tif_clientdata,module, - "Attempt to write value larger than 0xFFFFFFFF in Classic TIFF file."); - _TIFFfree(p); + TIFFErrorExt(tif->tif_clientdata,module,"Out of memory"); return(0); } - *q= (uint32)(*ma); + + for (q=p, ma=value, mb=0; mb0xFFFFFFFF) + { + TIFFErrorExt(tif->tif_clientdata,module, + "Attempt to write value larger than 0xFFFFFFFF in LONG array."); + _TIFFfree(p); + return(0); + } + *q= (uint32)(*ma); + } + + o=TIFFWriteDirectoryTagCheckedLongArray(tif,ndir,dir,tag,count,p); + _TIFFfree(p); } + else + { + uint16* p = _TIFFmalloc(count*sizeof(uint16)); + uint16* q; + uint64* ma; + uint32 mb; - o=TIFFWriteDirectoryTagCheckedLongArray(tif,ndir,dir,tag,count,p); - _TIFFfree(p); + if (p==NULL) + { + TIFFErrorExt(tif->tif_clientdata,module,"Out of memory"); + return(0); + } + + for (q=p, ma=value, mb=0; mb0xFFFF) + { + /* Should not happen normally given the check we did before */ + TIFFErrorExt(tif->tif_clientdata,module, + "Attempt to write value larger than 0xFFFF in SHORT array."); + _TIFFfree(p); + return(0); + } + *q= (uint16)(*ma); + } + + o=TIFFWriteDirectoryTagCheckedShortArray(tif,ndir,dir,tag,count,p); + _TIFFfree(p); + } return(o); } @@ -1895,12 +2026,14 @@ TIFFWriteDirectoryTagTransferfunction(TIFF* tif, uint32* ndir, TIFFDirEntry* dir n=3; if (n==3) { - if (!_TIFFmemcmp(tif->tif_dir.td_transferfunction[0],tif->tif_dir.td_transferfunction[2],m*sizeof(uint16))) + if (tif->tif_dir.td_transferfunction[2] == NULL || + !_TIFFmemcmp(tif->tif_dir.td_transferfunction[0],tif->tif_dir.td_transferfunction[2],m*sizeof(uint16))) n=2; } if (n==2) { - if (!_TIFFmemcmp(tif->tif_dir.td_transferfunction[0],tif->tif_dir.td_transferfunction[1],m*sizeof(uint16))) + if (tif->tif_dir.td_transferfunction[1] == NULL || + !_TIFFmemcmp(tif->tif_dir.td_transferfunction[0],tif->tif_dir.td_transferfunction[1],m*sizeof(uint16))) n=1; } if (n==0) @@ -2430,7 +2563,12 @@ TIFFWriteDirectoryTagData(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag dir[m].tdir_count=count; dir[m].tdir_offset.toff_long8 = 0; if (datalength<=((tif->tif_flags&TIFF_BIGTIFF)?0x8U:0x4U)) - _TIFFmemcpy(&dir[m].tdir_offset,data,datalength); + { + if( data && datalength ) + { + _TIFFmemcpy(&dir[m].tdir_offset,data,datalength); + } + } else { uint64 na,nb; @@ -2822,13 +2960,60 @@ _TIFFRewriteField(TIFF* tif, uint16 tag, TIFFDataType in_datatype, TIFFSwabLong8( &entry_offset ); } +/* -------------------------------------------------------------------- */ +/* When a dummy tag was written due to TIFFDeferStrileArrayWriting() */ +/* -------------------------------------------------------------------- */ + if( entry_offset == 0 && entry_count == 0 && entry_type == 0 ) + { + if( tag == TIFFTAG_TILEOFFSETS || tag == TIFFTAG_STRIPOFFSETS ) + { + entry_type = (tif->tif_flags&TIFF_BIGTIFF) ? TIFF_LONG8 : TIFF_LONG; + } + else + { + int write_aslong8 = 1; + if( count > 1 && tag == TIFFTAG_STRIPBYTECOUNTS ) + { + write_aslong8 = WriteAsLong8(tif, TIFFStripSize64(tif)); + } + else if( count > 1 && tag == TIFFTAG_TILEBYTECOUNTS ) + { + write_aslong8 = WriteAsLong8(tif, TIFFTileSize64(tif)); + } + if( write_aslong8 ) + { + entry_type = TIFF_LONG8; + } + else + { + int write_aslong4 = 1; + if( count > 1 && tag == TIFFTAG_STRIPBYTECOUNTS ) + { + write_aslong4 = WriteAsLong4(tif, TIFFStripSize64(tif)); + } + else if( count > 1 && tag == TIFFTAG_TILEBYTECOUNTS ) + { + write_aslong4 = WriteAsLong4(tif, TIFFTileSize64(tif)); + } + if( write_aslong4 ) + { + entry_type = TIFF_LONG; + } + else + { + entry_type = TIFF_SHORT; + } + } + } + } + /* -------------------------------------------------------------------- */ /* What data type do we want to write this as? */ /* -------------------------------------------------------------------- */ if( TIFFDataWidth(in_datatype) == 8 && !(tif->tif_flags&TIFF_BIGTIFF) ) { if( in_datatype == TIFF_LONG8 ) - datatype = TIFF_LONG; + datatype = entry_type == TIFF_SHORT ? TIFF_SHORT : TIFF_LONG; else if( in_datatype == TIFF_SLONG8 ) datatype = TIFF_SLONG; else if( in_datatype == TIFF_IFD8 ) @@ -2836,8 +3021,21 @@ _TIFFRewriteField(TIFF* tif, uint16 tag, TIFFDataType in_datatype, else datatype = in_datatype; } - else - datatype = in_datatype; + else + { + if( in_datatype == TIFF_LONG8 && + (entry_type == TIFF_SHORT || entry_type == TIFF_LONG || + entry_type == TIFF_LONG8 ) ) + datatype = entry_type; + else if( in_datatype == TIFF_SLONG8 && + (entry_type == TIFF_SLONG || entry_type == TIFF_SLONG8 ) ) + datatype = entry_type; + else if( in_datatype == TIFF_IFD8 && + (entry_type == TIFF_IFD || entry_type == TIFF_IFD8 ) ) + datatype = entry_type; + else + datatype = in_datatype; + } /* -------------------------------------------------------------------- */ /* Prepare buffer of actual data to write. This includes */ @@ -2886,6 +3084,29 @@ _TIFFRewriteField(TIFF* tif, uint16 tag, TIFFDataType in_datatype, } } } + else if( datatype == TIFF_SHORT && in_datatype == TIFF_LONG8 ) + { + tmsize_t i; + + for( i = 0; i < count; i++ ) + { + ((uint16 *) buf_to_write)[i] = + (uint16) ((uint64 *) data)[i]; + if( (uint64) ((uint16 *) buf_to_write)[i] != ((uint64 *) data)[i] ) + { + _TIFFfree( buf_to_write ); + TIFFErrorExt( tif->tif_clientdata, module, + "Value exceeds 16bit range of output type." ); + return 0; + } + } + } + else + { + TIFFErrorExt( tif->tif_clientdata, module, + "Unhandled type conversion." ); + return 0; + } if( TIFFDataWidth(datatype) > 1 && (tif->tif_flags&TIFF_SWAB) ) { @@ -2917,6 +3138,23 @@ _TIFFRewriteField(TIFF* tif, uint16 tag, TIFFDataType in_datatype, } } + if( (tag == TIFFTAG_TILEOFFSETS || tag == TIFFTAG_STRIPOFFSETS) && + tif->tif_dir.td_stripoffset_entry.tdir_count == 0 && + tif->tif_dir.td_stripoffset_entry.tdir_type == 0 && + tif->tif_dir.td_stripoffset_entry.tdir_offset.toff_long8 == 0 ) + { + tif->tif_dir.td_stripoffset_entry.tdir_type = datatype; + tif->tif_dir.td_stripoffset_entry.tdir_count = count; + } + else if( (tag == TIFFTAG_TILEBYTECOUNTS || tag == TIFFTAG_STRIPBYTECOUNTS) && + tif->tif_dir.td_stripbytecount_entry.tdir_count == 0 && + tif->tif_dir.td_stripbytecount_entry.tdir_type == 0 && + tif->tif_dir.td_stripbytecount_entry.tdir_offset.toff_long8 == 0 ) + { + tif->tif_dir.td_stripbytecount_entry.tdir_type = datatype; + tif->tif_dir.td_stripbytecount_entry.tdir_count = count; + } + /* -------------------------------------------------------------------- */ /* If the tag type, and count match, then we just write it out */ /* over the old values without altering the directory entry at */ @@ -2968,6 +3206,7 @@ _TIFFRewriteField(TIFF* tif, uint16 tag, TIFFDataType in_datatype, /* Adjust the directory entry. */ /* -------------------------------------------------------------------- */ entry_type = datatype; + entry_count = (uint64)count; memcpy( direntry_raw + 2, &entry_type, sizeof(uint16) ); if (tif->tif_flags&TIFF_SWAB) TIFFSwabShort( (uint16 *) (direntry_raw + 2) ); diff --git a/external/tiff-4.0.9/libtiff/tif_dumpmode.c b/external/tiff-4.1.0/libtiff/tif_dumpmode.c similarity index 97% rename from external/tiff-4.0.9/libtiff/tif_dumpmode.c rename to external/tiff-4.1.0/libtiff/tif_dumpmode.c index a6a94c04..4a0b07f5 100644 --- a/external/tiff-4.0.9/libtiff/tif_dumpmode.c +++ b/external/tiff-4.1.0/libtiff/tif_dumpmode.c @@ -1,5 +1,3 @@ -/* $Header: /cvs/maptools/cvsroot/libtiff/libtiff/tif_dumpmode.c,v 1.15 2015-12-12 18:04:26 erouault Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/libtiff/tif_error.c b/external/tiff-4.1.0/libtiff/tif_error.c similarity index 95% rename from external/tiff-4.0.9/libtiff/tif_error.c rename to external/tiff-4.1.0/libtiff/tif_error.c index 47516b4f..651168f7 100644 --- a/external/tiff-4.0.9/libtiff/tif_error.c +++ b/external/tiff-4.1.0/libtiff/tif_error.c @@ -1,5 +1,3 @@ -/* $Header: /cvs/maptools/cvsroot/libtiff/libtiff/tif_error.c,v 1.6 2017-07-04 12:54:42 erouault Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/libtiff/tif_extension.c b/external/tiff-4.1.0/libtiff/tif_extension.c similarity index 96% rename from external/tiff-4.0.9/libtiff/tif_extension.c rename to external/tiff-4.1.0/libtiff/tif_extension.c index 39fab4c7..87d3cfcb 100644 --- a/external/tiff-4.0.9/libtiff/tif_extension.c +++ b/external/tiff-4.1.0/libtiff/tif_extension.c @@ -1,5 +1,3 @@ -/* $Header: /cvs/maptools/cvsroot/libtiff/libtiff/tif_extension.c,v 1.8 2015-12-06 11:13:43 erouault Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/libtiff/tif_fax3.c b/external/tiff-4.1.0/libtiff/tif_fax3.c similarity index 99% rename from external/tiff-4.0.9/libtiff/tif_fax3.c rename to external/tiff-4.1.0/libtiff/tif_fax3.c index 5fd51411..d11c9684 100644 --- a/external/tiff-4.0.9/libtiff/tif_fax3.c +++ b/external/tiff-4.1.0/libtiff/tif_fax3.c @@ -1,5 +1,3 @@ -/* $Id: tif_fax3.c,v 1.81 2017-06-18 10:31:50 erouault Exp $ */ - /* * Copyright (c) 1990-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/libtiff/tif_fax3.h b/external/tiff-4.1.0/libtiff/tif_fax3.h similarity index 99% rename from external/tiff-4.0.9/libtiff/tif_fax3.h rename to external/tiff-4.1.0/libtiff/tif_fax3.h index 8a435059..abadcd97 100644 --- a/external/tiff-4.0.9/libtiff/tif_fax3.h +++ b/external/tiff-4.1.0/libtiff/tif_fax3.h @@ -1,5 +1,3 @@ -/* $Id: tif_fax3.h,v 1.13 2016-12-14 18:36:27 faxguy Exp $ */ - /* * Copyright (c) 1990-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/libtiff/tif_fax3sm.c b/external/tiff-4.1.0/libtiff/tif_fax3sm.c similarity index 100% rename from external/tiff-4.0.9/libtiff/tif_fax3sm.c rename to external/tiff-4.1.0/libtiff/tif_fax3sm.c diff --git a/external/tiff-4.1.0/libtiff/tif_flush.c b/external/tiff-4.1.0/libtiff/tif_flush.c new file mode 100644 index 00000000..f7fa2072 --- /dev/null +++ b/external/tiff-4.1.0/libtiff/tif_flush.c @@ -0,0 +1,174 @@ +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the names of + * Sam Leffler and Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Sam Leffler and Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +/* + * TIFF Library. + */ +#include "tiffiop.h" + +int +TIFFFlush(TIFF* tif) +{ + if( tif->tif_mode == O_RDONLY ) + return 1; + + if (!TIFFFlushData(tif)) + return (0); + + /* In update (r+) mode we try to detect the case where + only the strip/tile map has been altered, and we try to + rewrite only that portion of the directory without + making any other changes */ + + if( (tif->tif_flags & TIFF_DIRTYSTRIP) + && !(tif->tif_flags & TIFF_DIRTYDIRECT) + && tif->tif_mode == O_RDWR ) + { + if( TIFFForceStrileArrayWriting(tif) ) + return 1; + } + + if ((tif->tif_flags & (TIFF_DIRTYDIRECT|TIFF_DIRTYSTRIP)) + && !TIFFRewriteDirectory(tif)) + return (0); + + return (1); +} + +/* + * This is an advanced writing function that must be used in a particular + * sequence, and together with TIFFDeferStrileArrayWriting(), + * to make its intended effect. Its aim is to force the writing of + * the [Strip/Tile][Offsets/ByteCounts] arrays at the end of the file, when + * they have not yet been rewritten. + * + * The typical sequence of calls is: + * TIFFOpen() + * [ TIFFCreateDirectory(tif) ] + * Set fields with calls to TIFFSetField(tif, ...) + * TIFFDeferStrileArrayWriting(tif) + * TIFFWriteCheck(tif, ...) + * TIFFWriteDirectory(tif) + * ... potentially create other directories and come back to the above directory + * TIFFForceStrileArrayWriting(tif) + * + * Returns 1 in case of success, 0 otherwise. + */ +int TIFFForceStrileArrayWriting(TIFF* tif) +{ + static const char module[] = "TIFFForceStrileArrayWriting"; + const int isTiled = TIFFIsTiled(tif); + + if (tif->tif_mode == O_RDONLY) + { + TIFFErrorExt(tif->tif_clientdata, tif->tif_name, + "File opened in read-only mode"); + return 0; + } + if( tif->tif_diroff == 0 ) + { + TIFFErrorExt(tif->tif_clientdata, module, + "Directory has not yet been written"); + return 0; + } + if( (tif->tif_flags & TIFF_DIRTYDIRECT) != 0 ) + { + TIFFErrorExt(tif->tif_clientdata, module, + "Directory has changes other than the strile arrays. " + "TIFFRewriteDirectory() should be called instead"); + return 0; + } + + if( !(tif->tif_flags & TIFF_DIRTYSTRIP) ) + { + if( !(tif->tif_dir.td_stripoffset_entry.tdir_tag != 0 && + tif->tif_dir.td_stripoffset_entry.tdir_count == 0 && + tif->tif_dir.td_stripoffset_entry.tdir_type == 0 && + tif->tif_dir.td_stripoffset_entry.tdir_offset.toff_long8 == 0 && + tif->tif_dir.td_stripbytecount_entry.tdir_tag != 0 && + tif->tif_dir.td_stripbytecount_entry.tdir_count == 0 && + tif->tif_dir.td_stripbytecount_entry.tdir_type == 0 && + tif->tif_dir.td_stripbytecount_entry.tdir_offset.toff_long8 == 0) ) + { + TIFFErrorExt(tif->tif_clientdata, module, + "Function not called together with " + "TIFFDeferStrileArrayWriting()"); + return 0; + } + + if (tif->tif_dir.td_stripoffset_p == NULL && !TIFFSetupStrips(tif)) + return 0; + } + + if( _TIFFRewriteField( tif, + isTiled ? TIFFTAG_TILEOFFSETS : + TIFFTAG_STRIPOFFSETS, + TIFF_LONG8, + tif->tif_dir.td_nstrips, + tif->tif_dir.td_stripoffset_p ) + && _TIFFRewriteField( tif, + isTiled ? TIFFTAG_TILEBYTECOUNTS : + TIFFTAG_STRIPBYTECOUNTS, + TIFF_LONG8, + tif->tif_dir.td_nstrips, + tif->tif_dir.td_stripbytecount_p ) ) + { + tif->tif_flags &= ~TIFF_DIRTYSTRIP; + tif->tif_flags &= ~TIFF_BEENWRITING; + return 1; + } + + return 0; +} + +/* + * Flush buffered data to the file. + * + * Frank Warmerdam'2000: I modified this to return 1 if TIFF_BEENWRITING + * is not set, so that TIFFFlush() will proceed to write out the directory. + * The documentation says returning 1 is an error indicator, but not having + * been writing isn't exactly a an error. Hopefully this doesn't cause + * problems for other people. + */ +int +TIFFFlushData(TIFF* tif) +{ + if ((tif->tif_flags & TIFF_BEENWRITING) == 0) + return (1); + if (tif->tif_flags & TIFF_POSTENCODE) { + tif->tif_flags &= ~TIFF_POSTENCODE; + if (!(*tif->tif_postencode)(tif)) + return (0); + } + return (TIFFFlushData1(tif)); +} + +/* vim: set ts=8 sts=8 sw=8 noet: */ +/* + * Local Variables: + * mode: c + * c-basic-offset: 8 + * fill-column: 78 + * End: + */ diff --git a/external/tiff-4.0.9/libtiff/tif_getimage.c b/external/tiff-4.1.0/libtiff/tif_getimage.c similarity index 98% rename from external/tiff-4.0.9/libtiff/tif_getimage.c rename to external/tiff-4.1.0/libtiff/tif_getimage.c index fc554cca..4da785d3 100644 --- a/external/tiff-4.0.9/libtiff/tif_getimage.c +++ b/external/tiff-4.1.0/libtiff/tif_getimage.c @@ -1,5 +1,3 @@ -/* $Id: tif_getimage.c,v 1.114 2017-11-17 20:21:00 erouault Exp $ */ - /* * Copyright (c) 1991-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. @@ -757,9 +755,8 @@ gtTileSeparate(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h) uint32 leftmost_tw; tilesize = TIFFTileSize(tif); - bufsize = TIFFSafeMultiply(tmsize_t,alpha?4:3,tilesize); + bufsize = _TIFFMultiplySSize(tif, alpha?4:3,tilesize, "gtTileSeparate"); if (bufsize == 0) { - TIFFErrorExt(tif->tif_clientdata, TIFFFileName(tif), "Integer overflow in %s", "gtTileSeparate"); return (0); } @@ -952,16 +949,23 @@ gtStripContig(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h) fromskew = (w < imagewidth ? imagewidth - w : 0); for (row = 0; row < h; row += nrow) { + uint32 temp; rowstoread = rowsperstrip - (row + img->row_offset) % rowsperstrip; nrow = (row + rowstoread > h ? h - row : rowstoread); nrowsub = nrow; if ((nrowsub%subsamplingver)!=0) nrowsub+=subsamplingver-nrowsub%subsamplingver; + temp = (row + img->row_offset)%rowsperstrip + nrowsub; + if( scanline > 0 && temp > (size_t)(TIFF_TMSIZE_T_MAX / scanline) ) + { + TIFFErrorExt(tif->tif_clientdata, TIFFFileName(tif), "Integer overflow in gtStripContig"); + return 0; + } if (_TIFFReadEncodedStripAndAllocBuffer(tif, TIFFComputeStrip(tif,row+img->row_offset, 0), (void**)(&buf), maxstripsize, - ((row + img->row_offset)%rowsperstrip + nrowsub) * scanline)==(tmsize_t)(-1) + temp * scanline)==(tmsize_t)(-1) && (buf == NULL || img->stoponerr)) { ret = 0; @@ -1021,9 +1025,8 @@ gtStripSeparate(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h) uint16 colorchannels; stripsize = TIFFStripSize(tif); - bufsize = TIFFSafeMultiply(tmsize_t,alpha?4:3,stripsize); + bufsize = _TIFFMultiplySSize(tif,alpha?4:3,stripsize, "gtStripSeparate"); if (bufsize == 0) { - TIFFErrorExt(tif->tif_clientdata, TIFFFileName(tif), "Integer overflow in %s", "gtStripSeparate"); return (0); } @@ -1055,15 +1058,22 @@ gtStripSeparate(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h) fromskew = (w < imagewidth ? imagewidth - w : 0); for (row = 0; row < h; row += nrow) { + uint32 temp; rowstoread = rowsperstrip - (row + img->row_offset) % rowsperstrip; nrow = (row + rowstoread > h ? h - row : rowstoread); offset_row = row + img->row_offset; + temp = (row + img->row_offset)%rowsperstrip + nrow; + if( scanline > 0 && temp > (size_t)(TIFF_TMSIZE_T_MAX / scanline) ) + { + TIFFErrorExt(tif->tif_clientdata, TIFFFileName(tif), "Integer overflow in gtStripSeparate"); + return 0; + } if( buf == NULL ) { if (_TIFFReadEncodedStripAndAllocBuffer( tif, TIFFComputeStrip(tif, offset_row, 0), (void**) &buf, bufsize, - ((row + img->row_offset)%rowsperstrip + nrow) * scanline)==(tmsize_t)(-1) + temp * scanline)==(tmsize_t)(-1) && (buf == NULL || img->stoponerr)) { ret = 0; @@ -1083,7 +1093,7 @@ gtStripSeparate(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h) } } else if (TIFFReadEncodedStrip(tif, TIFFComputeStrip(tif, offset_row, 0), - p0, ((row + img->row_offset)%rowsperstrip + nrow) * scanline)==(tmsize_t)(-1) + p0, temp * scanline)==(tmsize_t)(-1) && img->stoponerr) { ret = 0; @@ -1091,7 +1101,7 @@ gtStripSeparate(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h) } if (colorchannels > 1 && TIFFReadEncodedStrip(tif, TIFFComputeStrip(tif, offset_row, 1), - p1, ((row + img->row_offset)%rowsperstrip + nrow) * scanline) == (tmsize_t)(-1) + p1, temp * scanline) == (tmsize_t)(-1) && img->stoponerr) { ret = 0; @@ -1099,7 +1109,7 @@ gtStripSeparate(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h) } if (colorchannels > 1 && TIFFReadEncodedStrip(tif, TIFFComputeStrip(tif, offset_row, 2), - p2, ((row + img->row_offset)%rowsperstrip + nrow) * scanline) == (tmsize_t)(-1) + p2, temp * scanline) == (tmsize_t)(-1) && img->stoponerr) { ret = 0; @@ -1108,7 +1118,7 @@ gtStripSeparate(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h) if (alpha) { if (TIFFReadEncodedStrip(tif, TIFFComputeStrip(tif, offset_row, colorchannels), - pa, ((row + img->row_offset)%rowsperstrip + nrow) * scanline)==(tmsize_t)(-1) + pa, temp * scanline)==(tmsize_t)(-1) && img->stoponerr) { ret = 0; @@ -2959,7 +2969,7 @@ TIFFReadRGBATileExt(TIFF* tif, uint32 col, uint32 row, uint32 * raster, int stop if( !TIFFIsTiled( tif ) ) { TIFFErrorExt(tif->tif_clientdata, TIFFFileName(tif), - "Can't use TIFFReadRGBATile() with stripped file."); + "Can't use TIFFReadRGBATile() with striped file."); return (0); } diff --git a/external/tiff-4.0.9/libtiff/tif_jbig.c b/external/tiff-4.1.0/libtiff/tif_jbig.c similarity index 86% rename from external/tiff-4.0.9/libtiff/tif_jbig.c rename to external/tiff-4.1.0/libtiff/tif_jbig.c index 7a14dd9a..7ffe8851 100644 --- a/external/tiff-4.0.9/libtiff/tif_jbig.c +++ b/external/tiff-4.1.0/libtiff/tif_jbig.c @@ -1,5 +1,3 @@ -/* $Id: tif_jbig.c,v 1.16 2017-06-26 15:20:00 erouault Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. @@ -53,17 +51,18 @@ static int JBIGDecode(TIFF* tif, uint8* buffer, tmsize_t size, uint16 s) struct jbg_dec_state decoder; int decodeStatus = 0; unsigned char* pImage = NULL; - (void) size, (void) s; + unsigned long decodedSize; + (void) s; if (isFillOrder(tif, tif->tif_dir.td_fillorder)) { - TIFFReverseBits(tif->tif_rawdata, tif->tif_rawdatasize); + TIFFReverseBits(tif->tif_rawcp, tif->tif_rawcc); } jbg_dec_init(&decoder); #if defined(HAVE_JBG_NEWLEN) - jbg_newlen(tif->tif_rawdata, (size_t)tif->tif_rawdatasize); + jbg_newlen(tif->tif_rawcp, (size_t)tif->tif_rawcc); /* * I do not check the return status of jbg_newlen because even if this * function fails it does not necessarily mean that decoding the image @@ -76,8 +75,8 @@ static int JBIGDecode(TIFF* tif, uint8* buffer, tmsize_t size, uint16 s) */ #endif /* HAVE_JBG_NEWLEN */ - decodeStatus = jbg_dec_in(&decoder, (unsigned char*)tif->tif_rawdata, - (size_t)tif->tif_rawdatasize, NULL); + decodeStatus = jbg_dec_in(&decoder, (unsigned char*)tif->tif_rawcp, + (size_t)tif->tif_rawcc, NULL); if (JBG_EOK != decodeStatus) { /* @@ -98,9 +97,28 @@ static int JBIGDecode(TIFF* tif, uint8* buffer, tmsize_t size, uint16 s) return 0; } + decodedSize = jbg_dec_getsize(&decoder); + if( (tmsize_t)decodedSize < size ) + { + TIFFWarningExt(tif->tif_clientdata, "JBIG", + "Only decoded %lu bytes, whereas %lu requested", + decodedSize, (unsigned long)size); + } + else if( (tmsize_t)decodedSize > size ) + { + TIFFErrorExt(tif->tif_clientdata, "JBIG", + "Decoded %lu bytes, whereas %lu were requested", + decodedSize, (unsigned long)size); + jbg_dec_free(&decoder); + return 0; + } pImage = jbg_dec_getimage(&decoder, 0); - _TIFFmemcpy(buffer, pImage, jbg_dec_getsize(&decoder)); + _TIFFmemcpy(buffer, pImage, decodedSize); jbg_dec_free(&decoder); + + tif->tif_rawcp += tif->tif_rawcc; + tif->tif_rawcc = 0; + return 1; } diff --git a/external/tiff-4.0.9/libtiff/tif_jpeg.c b/external/tiff-4.1.0/libtiff/tif_jpeg.c similarity index 99% rename from external/tiff-4.0.9/libtiff/tif_jpeg.c rename to external/tiff-4.1.0/libtiff/tif_jpeg.c index 0fbdb354..93ae2ead 100644 --- a/external/tiff-4.0.9/libtiff/tif_jpeg.c +++ b/external/tiff-4.1.0/libtiff/tif_jpeg.c @@ -1,5 +1,3 @@ -/* $Id: tif_jpeg.c,v 1.134 2017-10-17 19:04:47 erouault Exp $ */ - /* * Copyright (c) 1994-1997 Sam Leffler * Copyright (c) 1994-1997 Silicon Graphics, Inc. @@ -27,9 +25,9 @@ #define WIN32_LEAN_AND_MEAN #define VC_EXTRALEAN +#include "tiffiop.h" #include -#include "tiffiop.h" #ifdef JPEG_SUPPORT /* @@ -76,7 +74,7 @@ int TIFFJPEGIsFullStripRequired_12(TIFF* tif); "JPEGLib: JPEG parameter struct mismatch: library thinks size is 432, caller expects 464" - For such users we wil fix the problem here. See install.doc file from + For such users we will fix the problem here. See install.doc file from the JPEG library distribution for details. */ @@ -782,12 +780,9 @@ JPEGFixupTagsSubsampling(TIFF* tif) */ static const char module[] = "JPEGFixupTagsSubsampling"; struct JPEGFixupTagsSubsamplingData m; + uint64 fileoffset = TIFFGetStrileOffset(tif, 0); - _TIFFFillStriles( tif ); - - if( tif->tif_dir.td_stripbytecount == NULL - || tif->tif_dir.td_stripoffset == NULL - || tif->tif_dir.td_stripbytecount[0] == 0 ) + if( fileoffset == 0 ) { /* Do not even try to check if the first strip/tile does not yet exist, as occurs when GDAL has created a new NULL file @@ -806,9 +801,9 @@ JPEGFixupTagsSubsampling(TIFF* tif) } m.buffercurrentbyte=NULL; m.bufferbytesleft=0; - m.fileoffset=tif->tif_dir.td_stripoffset[0]; + m.fileoffset=fileoffset; m.filepositioned=0; - m.filebytesleft=tif->tif_dir.td_stripbytecount[0]; + m.filebytesleft=TIFFGetStrileByteCount(tif, 0); if (!JPEGFixupTagsSubsamplingSec(&m)) TIFFWarningExt(tif->tif_clientdata,module, "Unable to auto-correct subsampling values, likely corrupt JPEG compressed data in first strip/tile; auto-correcting skipped"); @@ -1568,7 +1563,7 @@ JPEGDecodeRaw(TIFF* tif, uint8* buf, tmsize_t cc, uint16 s) JSAMPLE *outptr = (JSAMPLE*)tmpbuf + clumpoffset; #else JSAMPLE *outptr = (JSAMPLE*)buf + clumpoffset; - if (cc < (tmsize_t) (clumpoffset + samples_per_clump*(clumps_per_line-1) + hsamp)) { + if (cc < (tmsize_t)(clumpoffset + (tmsize_t)samples_per_clump*(clumps_per_line-1) + hsamp)) { TIFFErrorExt(tif->tif_clientdata, "JPEGDecodeRaw", "application buffer not large enough for all data, possible subsampling issue"); return 0; @@ -2128,8 +2123,8 @@ JPEGEncodeRaw(TIFF* tif, uint8* buf, tmsize_t cc, uint16 s) /* data is expected to be supplied in multiples of a clumpline */ /* a clumpline is equivalent to v_sampling desubsampled scanlines */ /* TODO: the following calculation of bytesperclumpline, should substitute calculation of sp->bytesperline, except that it is per v_sampling lines */ - bytesperclumpline = (((sp->cinfo.c.image_width+sp->h_sampling-1)/sp->h_sampling) - *(sp->h_sampling*sp->v_sampling+2)*sp->cinfo.c.data_precision+7) + bytesperclumpline = ((((tmsize_t)sp->cinfo.c.image_width+sp->h_sampling-1)/sp->h_sampling) + *((tmsize_t)sp->h_sampling*sp->v_sampling+2)*sp->cinfo.c.data_precision+7) /8; nrows = ( cc / bytesperclumpline ) * sp->v_sampling; diff --git a/external/tiff-4.0.9/libtiff/tif_jpeg_12.c b/external/tiff-4.1.0/libtiff/tif_jpeg_12.c similarity index 100% rename from external/tiff-4.0.9/libtiff/tif_jpeg_12.c rename to external/tiff-4.1.0/libtiff/tif_jpeg_12.c diff --git a/external/tiff-4.0.9/libtiff/tif_luv.c b/external/tiff-4.1.0/libtiff/tif_luv.c similarity index 98% rename from external/tiff-4.0.9/libtiff/tif_luv.c rename to external/tiff-4.1.0/libtiff/tif_luv.c index 4b25244b..6fe48588 100644 --- a/external/tiff-4.0.9/libtiff/tif_luv.c +++ b/external/tiff-4.1.0/libtiff/tif_luv.c @@ -1,5 +1,3 @@ -/* $Id: tif_luv.c,v 1.49 2017-07-24 12:47:30 erouault Exp $ */ - /* * Copyright (c) 1997 Greg Ward Larson * Copyright (c) 1997 Silicon Graphics, Inc. @@ -215,7 +213,7 @@ LogL16Decode(TIFF* tif, uint8* op, tmsize_t occ, uint16 s) bp = (unsigned char*) tif->tif_rawcp; cc = tif->tif_rawcc; /* get each byte string */ - for (shft = 2*8; (shft -= 8) >= 0; ) { + for (shft = 8; shft >= 0; shft -=8) { for (i = 0; i < npixels && cc > 0; ) { if (*bp >= 128) { /* run */ if( cc < 2 ) @@ -349,7 +347,7 @@ LogLuvDecode32(TIFF* tif, uint8* op, tmsize_t occ, uint16 s) bp = (unsigned char*) tif->tif_rawcp; cc = tif->tif_rawcc; /* get each byte string */ - for (shft = 4*8; (shft -= 8) >= 0; ) { + for (shft = 24; shft >= 0; shft -=8) { for (i = 0; i < npixels && cc > 0; ) { if (*bp >= 128) { /* run */ if( cc < 2 ) @@ -467,7 +465,7 @@ LogL16Encode(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s) /* compress each byte string */ op = tif->tif_rawcp; occ = tif->tif_rawdatasize - tif->tif_rawcc; - for (shft = 2*8; (shft -= 8) >= 0; ) + for (shft = 8; shft >= 0; shft -=8) { for (i = 0; i < npixels; i += rc) { if (occ < 4) { tif->tif_rawcp = op; @@ -522,6 +520,7 @@ LogL16Encode(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s) } else rc = 0; } + } tif->tif_rawcp = op; tif->tif_rawcc = tif->tif_rawdatasize - occ; @@ -618,7 +617,7 @@ LogLuvEncode32(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s) /* compress each byte string */ op = tif->tif_rawcp; occ = tif->tif_rawdatasize - tif->tif_rawcc; - for (shft = 4*8; (shft -= 8) >= 0; ) + for (shft = 24; shft >= 0; shft -=8) { for (i = 0; i < npixels; i += rc) { if (occ < 4) { tif->tif_rawcp = op; @@ -673,6 +672,7 @@ LogLuvEncode32(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s) } else rc = 0; } + } tif->tif_rawcp = op; tif->tif_rawcc = tif->tif_rawdatasize - occ; @@ -742,9 +742,14 @@ LogLuvEncodeTile(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s) #undef exp2 /* Conflict with C'99 function */ #define exp2(x) exp(M_LN2*(x)) -#define itrunc(x,m) ((m)==SGILOGENCODE_NODITHER ? \ - (int)(x) : \ - (int)((x) + rand()*(1./RAND_MAX) - .5)) +static int itrunc(double x, int m) +{ + if( m == SGILOGENCODE_NODITHER ) + return (int)x; + /* Silence CoverityScan warning about bad crypto function */ + /* coverity[dont_call] */ + return (int)(x + rand()*(1./RAND_MAX) - .5); +} #if !LOGLUV_PUBLIC static @@ -1264,16 +1269,10 @@ LogL16GuessDataFmt(TIFFDirectory *td) return (SGILOGDATAFMT_UNKNOWN); } - -#define TIFF_SIZE_T_MAX ((size_t) ~ ((size_t)0)) -#define TIFF_TMSIZE_T_MAX (tmsize_t)(TIFF_SIZE_T_MAX >> 1) - static tmsize_t multiply_ms(tmsize_t m1, tmsize_t m2) { - if( m1 == 0 || m2 > TIFF_TMSIZE_T_MAX / m1 ) - return 0; - return m1 * m2; + return _TIFFMultiplySSize(NULL, m1, m2, NULL); } static int @@ -1507,7 +1506,7 @@ LogLuvSetupEncode(TIFF* tif) switch (td->td_photometric) { case PHOTOMETRIC_LOGLUV: if (!LogLuvInitState(tif)) - break; + return (0); if (td->td_compression == COMPRESSION_SGILOG24) { tif->tif_encoderow = LogLuvEncode24; switch (sp->user_datafmt) { @@ -1540,7 +1539,7 @@ LogLuvSetupEncode(TIFF* tif) break; case PHOTOMETRIC_LOGL: if (!LogL16InitState(tif)) - break; + return (0); tif->tif_encoderow = LogL16Encode; switch (sp->user_datafmt) { case SGILOGDATAFMT_FLOAT: @@ -1556,7 +1555,7 @@ LogLuvSetupEncode(TIFF* tif) TIFFErrorExt(tif->tif_clientdata, module, "Inappropriate photometric interpretation %d for SGILog compression; %s", td->td_photometric, "must be either LogLUV or LogL"); - break; + return (0); } sp->encoder_state = 1; return (1); diff --git a/external/tiff-4.0.9/libtiff/tif_lzma.c b/external/tiff-4.1.0/libtiff/tif_lzma.c similarity index 98% rename from external/tiff-4.0.9/libtiff/tif_lzma.c rename to external/tiff-4.1.0/libtiff/tif_lzma.c index 80fc3942..3f6096b6 100644 --- a/external/tiff-4.0.9/libtiff/tif_lzma.c +++ b/external/tiff-4.1.0/libtiff/tif_lzma.c @@ -1,5 +1,3 @@ -/* $Id: tif_lzma.c,v 1.6 2016-09-17 09:18:59 erouault Exp $ */ - /* * Copyright (c) 2010, Andrey Kiselev * @@ -249,6 +247,7 @@ LZMAPreEncode(TIFF* tif, uint16 s) { static const char module[] = "LZMAPreEncode"; LZMAState *sp = EncoderState(tif); + lzma_ret ret; (void) s; assert(sp != NULL); @@ -262,7 +261,13 @@ LZMAPreEncode(TIFF* tif, uint16 s) "Liblzma cannot deal with buffers this size"); return 0; } - return (lzma_stream_encoder(&sp->stream, sp->filters, sp->check) == LZMA_OK); + ret = lzma_stream_encoder(&sp->stream, sp->filters, sp->check); + if (ret != LZMA_OK) { + TIFFErrorExt(tif->tif_clientdata, module, + "Error in lzma_stream_encoder(): %s", LZMAStrerror(ret)); + return 0; + } + return 1; } /* diff --git a/external/tiff-4.0.9/libtiff/tif_lzw.c b/external/tiff-4.1.0/libtiff/tif_lzw.c similarity index 98% rename from external/tiff-4.0.9/libtiff/tif_lzw.c rename to external/tiff-4.1.0/libtiff/tif_lzw.c index 186ea3ca..21064f29 100644 --- a/external/tiff-4.0.9/libtiff/tif_lzw.c +++ b/external/tiff-4.1.0/libtiff/tif_lzw.c @@ -1,5 +1,3 @@ -/* $Id: tif_lzw.c,v 1.57 2017-07-11 10:54:29 erouault Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. @@ -135,6 +133,7 @@ typedef struct { long dec_restart; /* restart count */ #ifdef LZW_CHECKEOS uint64 dec_bitsleft; /* available bits in raw data */ + tmsize_t old_tif_rawcc; /* value of tif_rawcc at the end of the previous TIFLZWDecode() call */ #endif decodeFunc dec_decode; /* regular or backwards compatible */ code_t* dec_codep; /* current recognized code */ @@ -248,6 +247,8 @@ LZWSetupDecode(TIFF* tif) /* * Zero-out the unused entries */ + /* Silence false positive */ + /* coverity[overrun-buffer-arg] */ _TIFFmemset(&sp->dec_codetab[CODE_CLEAR], 0, (CODE_FIRST - CODE_CLEAR) * sizeof (code_t)); } @@ -320,6 +321,7 @@ LZWPreDecode(TIFF* tif, uint16 s) sp->dec_nbitsmask = MAXCODE(BITS_MIN); #ifdef LZW_CHECKEOS sp->dec_bitsleft = 0; + sp->old_tif_rawcc = 0; #endif sp->dec_free_entp = sp->dec_codetab + CODE_FIRST; /* @@ -427,7 +429,7 @@ LZWDecode(TIFF* tif, uint8* op0, tmsize_t occ0, uint16 s) bp = (unsigned char *)tif->tif_rawcp; #ifdef LZW_CHECKEOS - sp->dec_bitsleft = (((uint64)tif->tif_rawcc) << 3); + sp->dec_bitsleft += (((uint64)tif->tif_rawcc - sp->old_tif_rawcc) << 3); #endif nbits = sp->lzw_nbits; nextdata = sp->lzw_nextdata; @@ -555,6 +557,9 @@ LZWDecode(TIFF* tif, uint8* op0, tmsize_t occ0, uint16 s) tif->tif_rawcc -= (tmsize_t)( (uint8*) bp - tif->tif_rawcp ); tif->tif_rawcp = (uint8*) bp; +#ifdef LZW_CHECKEOS + sp->old_tif_rawcc = tif->tif_rawcc; +#endif sp->lzw_nbits = (unsigned short) nbits; sp->lzw_nextdata = nextdata; sp->lzw_nextbits = nextbits; @@ -658,7 +663,7 @@ LZWDecodeCompat(TIFF* tif, uint8* op0, tmsize_t occ0, uint16 s) bp = (unsigned char *)tif->tif_rawcp; #ifdef LZW_CHECKEOS - sp->dec_bitsleft = (((uint64)tif->tif_rawcc) << 3); + sp->dec_bitsleft += (((uint64)tif->tif_rawcc - sp->old_tif_rawcc) << 3); #endif nbits = sp->lzw_nbits; nextdata = sp->lzw_nextdata; @@ -776,6 +781,9 @@ LZWDecodeCompat(TIFF* tif, uint8* op0, tmsize_t occ0, uint16 s) tif->tif_rawcc -= (tmsize_t)( (uint8*) bp - tif->tif_rawcp ); tif->tif_rawcp = (uint8*) bp; +#ifdef LZW_CHECKEOS + sp->old_tif_rawcc = tif->tif_rawcc; +#endif sp->lzw_nbits = (unsigned short)nbits; sp->lzw_nextdata = nextdata; sp->lzw_nextbits = nextbits; diff --git a/external/tiff-4.0.9/libtiff/tif_next.c b/external/tiff-4.1.0/libtiff/tif_next.c similarity index 98% rename from external/tiff-4.0.9/libtiff/tif_next.c rename to external/tiff-4.1.0/libtiff/tif_next.c index 08211788..0ba61aed 100644 --- a/external/tiff-4.0.9/libtiff/tif_next.c +++ b/external/tiff-4.1.0/libtiff/tif_next.c @@ -1,5 +1,3 @@ -/* $Id: tif_next.c,v 1.19 2016-09-04 21:32:56 erouault Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/libtiff/tif_ojpeg.c b/external/tiff-4.1.0/libtiff/tif_ojpeg.c similarity index 95% rename from external/tiff-4.0.9/libtiff/tif_ojpeg.c rename to external/tiff-4.1.0/libtiff/tif_ojpeg.c index 92ed1fa1..bf0d1a2a 100644 --- a/external/tiff-4.0.9/libtiff/tif_ojpeg.c +++ b/external/tiff-4.1.0/libtiff/tif_ojpeg.c @@ -1,5 +1,3 @@ -/* $Id: tif_ojpeg.c,v 1.69 2017-04-27 17:29:26 erouault Exp $ */ - /* WARNING: The type of JPEG encapsulation defined by the TIFF Version 6.0 specification is now totally obsolete and deprecated for new applications and images. This file was was created solely in order to read unconverted images @@ -245,6 +243,7 @@ typedef enum { typedef struct { TIFF* tif; int decoder_ok; + int error_in_raw_data_decoding; #ifndef LIBJPEG_ENCAP_EXTERNAL JMP_BUF exit_jmpbuf; #endif @@ -680,7 +679,7 @@ OJPEGPreDecode(TIFF* tif, uint16 s) if (OJPEGReadSecondarySos(tif,s)==0) return(0); } - if isTiled(tif) + if (isTiled(tif)) m=tif->tif_curtile; else m=tif->tif_curstrip; @@ -744,6 +743,7 @@ OJPEGPreDecodeSkipRaw(TIFF* tif) } m-=sp->subsampling_convert_clines-sp->subsampling_convert_state; sp->subsampling_convert_state=0; + sp->error_in_raw_data_decoding=0; } while (m>=sp->subsampling_convert_clines) { @@ -794,6 +794,10 @@ OJPEGDecode(TIFF* tif, uint8* buf, tmsize_t cc, uint16 s) TIFFErrorExt(tif->tif_clientdata,module,"Cannot decode: decoder not correctly initialized"); return 0; } + if( sp->error_in_raw_data_decoding ) + { + return 0; + } if (sp->libjpeg_jpeg_query_style==0) { if (OJPEGDecodeRaw(tif,buf,cc)==0) @@ -833,8 +837,41 @@ OJPEGDecodeRaw(TIFF* tif, uint8* buf, tmsize_t cc) { if (sp->subsampling_convert_state==0) { + const jpeg_decompress_struct* cinfo = &sp->libjpeg_jpeg_decompress_struct; + int width = 0; + int last_col_width = 0; + int jpeg_bytes; + int expected_bytes; + int i; + if (cinfo->MCUs_per_row == 0) + { + sp->error_in_raw_data_decoding = 1; + return 0; + } + for (i = 0; i < cinfo->comps_in_scan; ++i) + { + const jpeg_component_info* info = cinfo->cur_comp_info[i]; +#if JPEG_LIB_VERSION >= 70 + width += info->MCU_width * info->DCT_h_scaled_size; + last_col_width += info->last_col_width * info->DCT_h_scaled_size; +#else + width += info->MCU_width * info->DCT_scaled_size; + last_col_width += info->last_col_width * info->DCT_scaled_size; +#endif + } + jpeg_bytes = (cinfo->MCUs_per_row - 1) * width + last_col_width; + expected_bytes = sp->subsampling_convert_clinelenout * sp->subsampling_ver * sp->subsampling_hor; + if (jpeg_bytes != expected_bytes) + { + TIFFErrorExt(tif->tif_clientdata,module,"Inconsistent number of MCU in codestream"); + sp->error_in_raw_data_decoding = 1; + return(0); + } if (jpeg_read_raw_data_encap(sp,&(sp->libjpeg_jpeg_decompress_struct),sp->subsampling_convert_ycbcrimage,sp->subsampling_ver*8)==0) + { + sp->error_in_raw_data_decoding = 1; return(0); + } } oy=sp->subsampling_convert_ybuf+sp->subsampling_convert_state*sp->subsampling_ver*sp->subsampling_convert_ylinelen; ocb=sp->subsampling_convert_cbbuf+sp->subsampling_convert_state*sp->subsampling_convert_clinelen; @@ -992,7 +1029,6 @@ OJPEGSubsamplingCorrect(TIFF* tif) OJPEGState* sp=(OJPEGState*)tif->tif_data; uint8 mh; uint8 mv; - _TIFFFillStriles( tif ); assert(sp->subsamplingcorrect_done==0); if ((tif->tif_dir.td_samplesperpixel!=3) || ((tif->tif_dir.td_photometric!=PHOTOMETRIC_YCBCR) && @@ -1048,7 +1084,7 @@ OJPEGReadHeaderInfo(TIFF* tif) assert(sp->readheader_done==0); sp->image_width=tif->tif_dir.td_imagewidth; sp->image_length=tif->tif_dir.td_imagelength; - if isTiled(tif) + if (isTiled(tif)) { sp->strile_width=tif->tif_dir.td_tilewidth; sp->strile_length=tif->tif_dir.td_tilelength; @@ -1084,6 +1120,12 @@ OJPEGReadHeaderInfo(TIFF* tif) } if (sp->strile_lengthimage_length) { + if (((sp->subsampling_hor!=1) && (sp->subsampling_hor!=2) && (sp->subsampling_hor!=4)) || + ((sp->subsampling_ver!=1) && (sp->subsampling_ver!=2) && (sp->subsampling_ver!=4))) + { + TIFFErrorExt(tif->tif_clientdata,module,"Invalid subsampling values"); + return(0); + } if (sp->strile_length%(sp->subsampling_ver*8)!=0) { TIFFErrorExt(tif->tif_clientdata,module,"Incompatible vertical subsampling and image strip/tile length"); @@ -1199,7 +1241,13 @@ OJPEGWriteHeaderInfo(TIFF* tif) sp->subsampling_convert_ybuflen=sp->subsampling_convert_ylinelen*sp->subsampling_convert_ylines; sp->subsampling_convert_cbuflen=sp->subsampling_convert_clinelen*sp->subsampling_convert_clines; sp->subsampling_convert_ycbcrbuflen=sp->subsampling_convert_ybuflen+2*sp->subsampling_convert_cbuflen; - sp->subsampling_convert_ycbcrbuf=_TIFFmalloc(sp->subsampling_convert_ycbcrbuflen); + /* The calloc is not normally necessary, except in some edge/broken cases */ + /* for example for a tiled image of height 1 with a tile height of 1 and subsampling_hor=subsampling_ver=2 */ + /* In that case, libjpeg will only fill the 8 first lines of the 16 lines */ + /* See https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=16844 */ + /* Even if this case is allowed (?), its handling is broken because OJPEGPreDecode() should also likely */ + /* reset subsampling_convert_state to 0 when changing tile. */ + sp->subsampling_convert_ycbcrbuf=_TIFFcalloc(1, sp->subsampling_convert_ycbcrbuflen); if (sp->subsampling_convert_ycbcrbuf==0) { TIFFErrorExt(tif->tif_clientdata,module,"Out of memory"); @@ -1225,10 +1273,11 @@ OJPEGWriteHeaderInfo(TIFF* tif) *m++=sp->subsampling_convert_cbbuf+n*sp->subsampling_convert_clinelen; for (n=0; nsubsampling_convert_clines; n++) *m++=sp->subsampling_convert_crbuf+n*sp->subsampling_convert_clinelen; - sp->subsampling_convert_clinelenout=((sp->strile_width+sp->subsampling_hor-1)/sp->subsampling_hor); + sp->subsampling_convert_clinelenout=sp->strile_width/sp->subsampling_hor + ((sp->strile_width % sp->subsampling_hor) != 0 ? 1 : 0); sp->subsampling_convert_state=0; + sp->error_in_raw_data_decoding=0; sp->bytes_per_line=sp->subsampling_convert_clinelenout*(sp->subsampling_ver*sp->subsampling_hor+2); - sp->lines_per_strile=((sp->strile_length+sp->subsampling_ver-1)/sp->subsampling_ver); + sp->lines_per_strile=sp->strile_length/sp->subsampling_ver + ((sp->strile_length % sp->subsampling_ver) != 0 ? 1 : 0); sp->subsampling_convert_log=1; } } @@ -1274,7 +1323,9 @@ OJPEGReadHeaderInfoSec(TIFF* tif) } else { - if ((sp->jpeg_interchange_format_length==0) || (sp->jpeg_interchange_format+sp->jpeg_interchange_format_length>sp->file_size)) + if ((sp->jpeg_interchange_format_length==0) || + (sp->jpeg_interchange_format > TIFF_UINT64_MAX - sp->jpeg_interchange_format_length) || + (sp->jpeg_interchange_format+sp->jpeg_interchange_format_length>sp->file_size)) sp->jpeg_interchange_format_length=sp->file_size-sp->jpeg_interchange_format; } } @@ -1991,32 +2042,30 @@ OJPEGReadBufferFill(OJPEGState* sp) sp->in_buffer_source=osibsStrile; break; case osibsStrile: - if (!_TIFFFillStriles( sp->tif ) - || sp->tif->tif_dir.td_stripoffset == NULL - || sp->tif->tif_dir.td_stripbytecount == NULL) - return 0; - if (sp->in_buffer_next_strile==sp->in_buffer_strile_count) sp->in_buffer_source=osibsEof; else { - sp->in_buffer_file_pos=sp->tif->tif_dir.td_stripoffset[sp->in_buffer_next_strile]; + int err = 0; + sp->in_buffer_file_pos=TIFFGetStrileOffsetWithErr(sp->tif, sp->in_buffer_next_strile, &err); + if( err ) + return 0; if (sp->in_buffer_file_pos!=0) { + uint64 bytecount = TIFFGetStrileByteCountWithErr(sp->tif, sp->in_buffer_next_strile, &err); + if( err ) + return 0; if (sp->in_buffer_file_pos>=sp->file_size) sp->in_buffer_file_pos=0; - else if (sp->tif->tif_dir.td_stripbytecount==NULL) + else if (bytecount==0) sp->in_buffer_file_togo=sp->file_size-sp->in_buffer_file_pos; else { - if (sp->tif->tif_dir.td_stripbytecount == 0) { - TIFFErrorExt(sp->tif->tif_clientdata,sp->tif->tif_name,"Strip byte counts are missing"); - return(0); - } - sp->in_buffer_file_togo=sp->tif->tif_dir.td_stripbytecount[sp->in_buffer_next_strile]; + sp->in_buffer_file_togo=bytecount; if (sp->in_buffer_file_togo==0) sp->in_buffer_file_pos=0; - else if (sp->in_buffer_file_pos+sp->in_buffer_file_togo>sp->file_size) + else if (sp->in_buffer_file_pos > TIFF_UINT64_MAX - sp->in_buffer_file_togo || + sp->in_buffer_file_pos+sp->in_buffer_file_togo>sp->file_size) sp->in_buffer_file_togo=sp->file_size-sp->in_buffer_file_pos; } } diff --git a/external/tiff-4.0.9/libtiff/tif_open.c b/external/tiff-4.1.0/libtiff/tif_open.c similarity index 96% rename from external/tiff-4.0.9/libtiff/tif_open.c rename to external/tiff-4.1.0/libtiff/tif_open.c index a7279e1e..3cb53d4e 100644 --- a/external/tiff-4.0.9/libtiff/tif_open.c +++ b/external/tiff-4.1.0/libtiff/tif_open.c @@ -1,5 +1,3 @@ -/* $Id: tif_open.c,v 1.48 2016-11-20 22:29:47 erouault Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. @@ -133,6 +131,7 @@ TIFFClientOpen( if (!readproc || !writeproc || !seekproc || !closeproc || !sizeproc) { TIFFErrorExt(clientdata, module, "One of the client procedures is NULL pointer."); + _TIFFfree(tif); goto bad2; } tif->tif_readproc = readproc; @@ -183,6 +182,8 @@ TIFFClientOpen( * 'h' read TIFF header only, do not load the first IFD * '4' ClassicTIFF for creating a file (default) * '8' BigTIFF for creating a file + * 'D' enable use of deferred strip/tile offset/bytecount array loading. + * 'O' on-demand loading of values instead of whole array loading (implies D) * * The use of the 'l' and 'b' flags is strongly discouraged. * These flags are provided solely because numerous vendors, @@ -264,7 +265,22 @@ TIFFClientOpen( if (m&O_CREAT) tif->tif_flags |= TIFF_BIGTIFF; break; + case 'D': + tif->tif_flags |= TIFF_DEFERSTRILELOAD; + break; + case 'O': + if( m == O_RDONLY ) + tif->tif_flags |= (TIFF_LAZYSTRILELOAD | TIFF_DEFERSTRILELOAD); + break; } + +#ifdef DEFER_STRILE_LOAD + /* Compatibility with old DEFER_STRILE_LOAD compilation flag */ + /* Probably unneeded, since to the best of my knowledge (E. Rouault) */ + /* GDAL was the only user of this, and will now use the new 'D' flag */ + tif->tif_flags |= TIFF_DEFERSTRILELOAD; +#endif + /* * Read in TIFF header. */ diff --git a/external/tiff-4.0.9/libtiff/tif_packbits.c b/external/tiff-4.1.0/libtiff/tif_packbits.c similarity index 99% rename from external/tiff-4.0.9/libtiff/tif_packbits.c rename to external/tiff-4.1.0/libtiff/tif_packbits.c index 18904b01..a8f29e87 100644 --- a/external/tiff-4.0.9/libtiff/tif_packbits.c +++ b/external/tiff-4.1.0/libtiff/tif_packbits.c @@ -1,5 +1,3 @@ -/* $Id: tif_packbits.c,v 1.26 2017-05-14 02:26:07 erouault Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/libtiff/tif_pixarlog.c b/external/tiff-4.1.0/libtiff/tif_pixarlog.c similarity index 99% rename from external/tiff-4.0.9/libtiff/tif_pixarlog.c rename to external/tiff-4.1.0/libtiff/tif_pixarlog.c index 979858da..62640905 100644 --- a/external/tiff-4.0.9/libtiff/tif_pixarlog.c +++ b/external/tiff-4.1.0/libtiff/tif_pixarlog.c @@ -1,5 +1,3 @@ -/* $Id: tif_pixarlog.c,v 1.54 2017-07-10 10:40:28 erouault Exp $ */ - /* * Copyright (c) 1996-1997 Sam Leffler * Copyright (c) 1996 Pixar @@ -636,20 +634,16 @@ PixarLogGuessDataFmt(TIFFDirectory *td) return guess; } -#define TIFF_SIZE_T_MAX ((size_t) ~ ((size_t)0)) -#define TIFF_TMSIZE_T_MAX (tmsize_t)(TIFF_SIZE_T_MAX >> 1) - static tmsize_t multiply_ms(tmsize_t m1, tmsize_t m2) { - if( m1 == 0 || m2 > TIFF_TMSIZE_T_MAX / m1 ) - return 0; - return m1 * m2; + return _TIFFMultiplySSize(NULL, m1, m2, NULL); } static tmsize_t add_ms(tmsize_t m1, tmsize_t m2) { + assert(m1 >= 0 && m2 >= 0); /* if either input is zero, assume overflow already occurred */ if (m1 == 0 || m2 == 0) return 0; @@ -819,9 +813,7 @@ PixarLogDecode(TIFF* tif, uint8* op, tmsize_t occ, uint16 s) TIFFErrorExt(tif->tif_clientdata, module, "Decoding error at scanline %lu, %s", (unsigned long) tif->tif_row, sp->stream.msg ? sp->stream.msg : "(null)"); - if (inflateSync(&sp->stream) != Z_OK) - return (0); - continue; + return (0); } if (state != Z_OK) { TIFFErrorExt(tif->tif_clientdata, module, "ZLib error: %s", @@ -1155,7 +1147,7 @@ PixarLogEncode(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s) llen = sp->stride * td->td_imagewidth; /* Check against the number of elements (of size uint16) of sp->tbuf */ - if( n > (tmsize_t)(td->td_rowsperstrip * llen) ) + if( n > ((tmsize_t)td->td_rowsperstrip * llen) ) { TIFFErrorExt(tif->tif_clientdata, module, "Too many input bytes provided"); diff --git a/external/tiff-4.0.9/libtiff/tif_predict.c b/external/tiff-4.1.0/libtiff/tif_predict.c similarity index 99% rename from external/tiff-4.0.9/libtiff/tif_predict.c rename to external/tiff-4.1.0/libtiff/tif_predict.c index 9ae1f57a..b775663a 100644 --- a/external/tiff-4.0.9/libtiff/tif_predict.c +++ b/external/tiff-4.1.0/libtiff/tif_predict.c @@ -1,5 +1,3 @@ -/* $Id: tif_predict.c,v 1.44 2017-06-18 10:31:50 erouault Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/libtiff/tif_predict.h b/external/tiff-4.1.0/libtiff/tif_predict.h similarity index 97% rename from external/tiff-4.0.9/libtiff/tif_predict.h rename to external/tiff-4.1.0/libtiff/tif_predict.h index 6c68e21a..a326b9b8 100644 --- a/external/tiff-4.0.9/libtiff/tif_predict.h +++ b/external/tiff-4.1.0/libtiff/tif_predict.h @@ -1,5 +1,3 @@ -/* $Id: tif_predict.h,v 1.9 2016-10-31 17:24:26 erouault Exp $ */ - /* * Copyright (c) 1995-1997 Sam Leffler * Copyright (c) 1995-1997 Silicon Graphics, Inc. @@ -26,6 +24,10 @@ #ifndef _TIFFPREDICT_ #define _TIFFPREDICT_ + +#include "tiffio.h" +#include "tiffiop.h" + /* * ``Library-private'' Support for the Predictor Tag */ diff --git a/external/tiff-4.0.9/libtiff/tif_print.c b/external/tiff-4.1.0/libtiff/tif_print.c similarity index 98% rename from external/tiff-4.0.9/libtiff/tif_print.c rename to external/tiff-4.1.0/libtiff/tif_print.c index b9b53a0f..a0737941 100644 --- a/external/tiff-4.0.9/libtiff/tif_print.c +++ b/external/tiff-4.1.0/libtiff/tif_print.c @@ -1,5 +1,3 @@ -/* $Id: tif_print.c,v 1.65 2016-11-20 22:31:22 erouault Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. @@ -654,8 +652,6 @@ TIFFPrintDirectory(TIFF* tif, FILE* fd, long flags) if (tif->tif_tagmethods.printdir) (*tif->tif_tagmethods.printdir)(tif, fd, flags); - _TIFFFillStriles( tif ); - if ((flags & TIFFPRINT_STRIPS) && TIFFFieldSet(tif,FIELD_STRIPOFFSETS)) { uint32 s; @@ -667,13 +663,13 @@ TIFFPrintDirectory(TIFF* tif, FILE* fd, long flags) #if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) fprintf(fd, " %3lu: [%8I64u, %8I64u]\n", (unsigned long) s, - td->td_stripoffset ? (unsigned __int64) td->td_stripoffset[s] : 0, - td->td_stripbytecount ? (unsigned __int64) td->td_stripbytecount[s] : 0); + (unsigned __int64) TIFFGetStrileOffset(tif, s), + (unsigned __int64) TIFFGetStrileByteCount(tif, s)); #else fprintf(fd, " %3lu: [%8llu, %8llu]\n", (unsigned long) s, - td->td_stripoffset ? (unsigned long long) td->td_stripoffset[s] : 0, - td->td_stripbytecount ? (unsigned long long) td->td_stripbytecount[s] : 0); + (unsigned long long) TIFFGetStrileOffset(tif, s), + (unsigned long long) TIFFGetStrileByteCount(tif, s)); #endif } } diff --git a/external/tiff-4.0.9/libtiff/tif_read.c b/external/tiff-4.1.0/libtiff/tif_read.c similarity index 87% rename from external/tiff-4.0.9/libtiff/tif_read.c rename to external/tiff-4.1.0/libtiff/tif_read.c index 2ba985a7..527fadd6 100644 --- a/external/tiff-4.0.9/libtiff/tif_read.c +++ b/external/tiff-4.1.0/libtiff/tif_read.c @@ -1,5 +1,3 @@ -/* $Id: tif_read.c,v 1.66 2017-11-17 20:21:00 erouault Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. @@ -31,9 +29,6 @@ #include "tiffiop.h" #include -#define TIFF_SIZE_T_MAX ((size_t) ~ ((size_t)0)) -#define TIFF_TMSIZE_T_MAX (tmsize_t)(TIFF_SIZE_T_MAX >> 1) - int TIFFFillStrip(TIFF* tif, uint32 strip); int TIFFFillTile(TIFF* tif, uint32 tile); static int TIFFStartStrip(TIFF* tif, uint32 strip); @@ -51,6 +46,8 @@ TIFFReadRawTile1(TIFF* tif, uint32 tile, void* buf, tmsize_t size, const char* m #define THRESHOLD_MULTIPLIER 10 #define MAX_THRESHOLD (THRESHOLD_MULTIPLIER * THRESHOLD_MULTIPLIER * THRESHOLD_MULTIPLIER * INITIAL_THRESHOLD) +#define TIFF_INT64_MAX ((((int64)0x7FFFFFFF) << 32) | 0xFFFFFFFF) + /* Read 'size' bytes in tif_rawdata buffer starting at offset 'rawdata_offset' * Returns 1 in case of success, 0 otherwise. */ static int TIFFReadAndRealloc( TIFF* tif, tmsize_t size, @@ -58,11 +55,27 @@ static int TIFFReadAndRealloc( TIFF* tif, tmsize_t size, int is_strip, uint32 strip_or_tile, const char* module ) { -#if SIZEOF_VOIDP == 8 || SIZEOF_SIZE_T == 8 +#if SIZEOF_SIZE_T == 8 tmsize_t threshold = INITIAL_THRESHOLD; #endif tmsize_t already_read = 0; + +#if SIZEOF_SIZE_T != 8 + /* On 32 bit processes, if the request is large enough, check against */ + /* file size */ + if( size > 1000 * 1000 * 1000 ) + { + uint64 filesize = TIFFGetFileSize(tif); + if( (uint64)size >= filesize ) + { + TIFFErrorExt(tif->tif_clientdata, module, + "Chunk size requested is larger than file size."); + return 0; + } + } +#endif + /* On 64 bit processes, read first a maximum of 1 MB, then 10 MB, etc */ /* so as to avoid allocating too much memory in case the file is too */ /* short. We could ask for the file size, but this might be */ @@ -73,7 +86,7 @@ static int TIFFReadAndRealloc( TIFF* tif, tmsize_t size, { tmsize_t bytes_read; tmsize_t to_read = size - already_read; -#if SIZEOF_VOIDP == 8 || SIZEOF_SIZE_T == 8 +#if SIZEOF_SIZE_T == 8 if( to_read >= threshold && threshold < MAX_THRESHOLD && already_read + to_read + rawdata_offset > tif->tif_rawdatasize ) { @@ -105,6 +118,11 @@ static int TIFFReadAndRealloc( TIFF* tif, tmsize_t size, } tif->tif_rawdata = new_rawdata; } + if( tif->tif_rawdata == NULL ) + { + /* should not happen in practice but helps CoverityScan */ + return 0; + } bytes_read = TIFFReadFile(tif, tif->tif_rawdata + rawdata_offset + already_read, to_read); @@ -172,17 +190,14 @@ TIFFFillStripPartial( TIFF *tif, int strip, tmsize_t read_ahead, int restart ) tmsize_t to_read; tmsize_t read_ahead_mod; /* tmsize_t bytecountm; */ - - if (!_TIFFFillStriles( tif ) || !tif->tif_dir.td_stripbytecount) - return 0; - + /* * Expand raw data buffer, if needed, to hold data * strip coming from file (perhaps should set upper * bound on the size of a buffer we'll use?). */ - /* bytecountm=(tmsize_t) td->td_stripbytecount[strip]; */ + /* bytecountm=(tmsize_t) TIFFGetStrileByteCount(tif, strip); */ /* Not completely sure where the * 2 comes from, but probably for */ /* an exponentional growth strategy of tif_rawdatasize */ @@ -226,7 +241,7 @@ TIFFFillStripPartial( TIFF *tif, int strip, tmsize_t read_ahead, int restart ) /* ** Seek to the point in the file where more data should be read. */ - read_offset = td->td_stripoffset[strip] + read_offset = TIFFGetStrileOffset(tif, strip) + tif->tif_rawdataoff + tif->tif_rawdataloaded; if (!SeekOK(tif, read_offset)) { @@ -243,10 +258,10 @@ TIFFFillStripPartial( TIFF *tif, int strip, tmsize_t read_ahead, int restart ) to_read = read_ahead_mod - unused_data; else to_read = tif->tif_rawdatasize - unused_data; - if( (uint64) to_read > td->td_stripbytecount[strip] + if( (uint64) to_read > TIFFGetStrileByteCount(tif, strip) - tif->tif_rawdataoff - tif->tif_rawdataloaded ) { - to_read = (tmsize_t) td->td_stripbytecount[strip] + to_read = (tmsize_t) TIFFGetStrileByteCount(tif, strip) - tif->tif_rawdataoff - tif->tif_rawdataloaded; } @@ -285,7 +300,7 @@ TIFFFillStripPartial( TIFF *tif, int strip, tmsize_t read_ahead, int restart ) /* For JPEG, if there are multiple scans (can generally be known */ /* with the read_ahead used), we need to read the whole strip */ if( tif->tif_dir.td_compression==COMPRESSION_JPEG && - (uint64)tif->tif_rawcc < td->td_stripbytecount[strip] ) + (uint64)tif->tif_rawcc < TIFFGetStrileByteCount(tif, strip) ) { if( TIFFJPEGIsFullStripRequired(tif) ) { @@ -344,10 +359,15 @@ TIFFSeek(TIFF* tif, uint32 row, uint16 sample ) * read it a few lines at a time? */ #if defined(CHUNKY_STRIP_READ_SUPPORT) - if (!_TIFFFillStriles( tif ) || !tif->tif_dir.td_stripbytecount) - return 0; - whole_strip = tif->tif_dir.td_stripbytecount[strip] < 10 + whole_strip = TIFFGetStrileByteCount(tif, strip) < 10 || isMapped(tif); + if( td->td_compression == COMPRESSION_LERC || + td->td_compression == COMPRESSION_JBIG ) + { + /* Ideally plugins should have a way to declare they don't support + * chunk strip */ + whole_strip = 1; + } #else whole_strip = 1; #endif @@ -392,7 +412,7 @@ TIFFSeek(TIFF* tif, uint32 row, uint16 sample ) else if( !whole_strip ) { if( ((tif->tif_rawdata + tif->tif_rawdataloaded) - tif->tif_rawcp) < read_ahead - && (uint64) tif->tif_rawdataoff+tif->tif_rawdataloaded < td->td_stripbytecount[strip] ) + && (uint64) tif->tif_rawdataoff+tif->tif_rawdataloaded < TIFFGetStrileByteCount(tif, strip) ) { if( !TIFFFillStripPartial(tif,strip,read_ahead,0) ) return 0; @@ -589,16 +609,11 @@ static tmsize_t TIFFReadRawStrip1(TIFF* tif, uint32 strip, void* buf, tmsize_t size, const char* module) { - TIFFDirectory *td = &tif->tif_dir; - - if (!_TIFFFillStriles( tif )) - return ((tmsize_t)(-1)); - assert((tif->tif_flags&TIFF_NOREADRAW)==0); if (!isMapped(tif)) { tmsize_t cc; - if (!SeekOK(tif, td->td_stripoffset[strip])) { + if (!SeekOK(tif, TIFFGetStrileOffset(tif, strip))) { TIFFErrorExt(tif->tif_clientdata, module, "Seek error at scanline %lu, strip %lu", (unsigned long) tif->tif_row, (unsigned long) strip); @@ -624,8 +639,8 @@ TIFFReadRawStrip1(TIFF* tif, uint32 strip, void* buf, tmsize_t size, } else { tmsize_t ma = 0; tmsize_t n; - if ((td->td_stripoffset[strip] > (uint64)TIFF_TMSIZE_T_MAX)|| - ((ma=(tmsize_t)td->td_stripoffset[strip])>tif->tif_size)) + if ((TIFFGetStrileOffset(tif, strip) > (uint64)TIFF_TMSIZE_T_MAX)|| + ((ma=(tmsize_t)TIFFGetStrileOffset(tif, strip))>tif->tif_size)) { n=0; } @@ -669,12 +684,10 @@ static tmsize_t TIFFReadRawStripOrTile2(TIFF* tif, uint32 strip_or_tile, int is_strip, tmsize_t size, const char* module) { - TIFFDirectory *td = &tif->tif_dir; - assert( !isMapped(tif) ); assert((tif->tif_flags&TIFF_NOREADRAW)==0); - if (!SeekOK(tif, td->td_stripoffset[strip_or_tile])) { + if (!SeekOK(tif, TIFFGetStrileOffset(tif, strip_or_tile))) { if( is_strip ) { TIFFErrorExt(tif->tif_clientdata, module, @@ -710,7 +723,7 @@ TIFFReadRawStrip(TIFF* tif, uint32 strip, void* buf, tmsize_t size) { static const char module[] = "TIFFReadRawStrip"; TIFFDirectory *td = &tif->tif_dir; - uint64 bytecount; + uint64 bytecount64; tmsize_t bytecountm; if (!TIFFCheckRead(tif, 0)) @@ -728,31 +741,23 @@ TIFFReadRawStrip(TIFF* tif, uint32 strip, void* buf, tmsize_t size) "Compression scheme does not support access to raw uncompressed data"); return ((tmsize_t)(-1)); } - bytecount = td->td_stripbytecount[strip]; - if ((int64)bytecount <= 0) { -#if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) - TIFFErrorExt(tif->tif_clientdata, module, - "%I64u: Invalid strip byte count, strip %lu", - (unsigned __int64) bytecount, - (unsigned long) strip); -#else - TIFFErrorExt(tif->tif_clientdata, module, - "%llu: Invalid strip byte count, strip %lu", - (unsigned long long) bytecount, - (unsigned long) strip); -#endif - return ((tmsize_t)(-1)); - } - bytecountm = (tmsize_t)bytecount; - if ((uint64)bytecountm!=bytecount) { - TIFFErrorExt(tif->tif_clientdata, module, "Integer overflow"); + bytecount64 = TIFFGetStrileByteCount(tif, strip); + if (size != (tmsize_t)(-1) && (uint64)size <= bytecount64) + bytecountm = size; + else + bytecountm = _TIFFCastUInt64ToSSize(tif, bytecount64, module); + if( bytecountm == 0 ) { return ((tmsize_t)(-1)); } - if (size != (tmsize_t)(-1) && size < bytecountm) - bytecountm = size; return (TIFFReadRawStrip1(tif, strip, buf, bytecountm, module)); } +TIFF_NOSANITIZE_UNSIGNED_INT_OVERFLOW +static uint64 NoSantizeSubUInt64(uint64 a, uint64 b) +{ + return a - b; +} + /* * Read the specified strip and setup for decoding. The data buffer is * expanded, as necessary, to hold the strip's data. @@ -763,13 +768,10 @@ TIFFFillStrip(TIFF* tif, uint32 strip) static const char module[] = "TIFFFillStrip"; TIFFDirectory *td = &tif->tif_dir; - if (!_TIFFFillStriles( tif ) || !tif->tif_dir.td_stripbytecount) - return 0; - if ((tif->tif_flags&TIFF_NOREADRAW)==0) { - uint64 bytecount = td->td_stripbytecount[strip]; - if ((int64)bytecount <= 0) { + uint64 bytecount = TIFFGetStrileByteCount(tif, strip); + if( bytecount == 0 || bytecount > (uint64)TIFF_INT64_MAX ) { #if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) TIFFErrorExt(tif->tif_clientdata, module, "Invalid strip byte count %I64u, strip %lu", @@ -796,7 +798,7 @@ TIFFFillStrip(TIFF* tif, uint32 strip) (bytecount - 4096) / 10 > (uint64)stripsize ) { uint64 newbytecount = (uint64)stripsize * 10 + 4096; - if( (int64)newbytecount >= 0 ) + if( newbytecount == 0 || newbytecount > (uint64)TIFF_INT64_MAX ) { #if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) TIFFWarningExt(tif->tif_clientdata, module, @@ -821,13 +823,13 @@ TIFFFillStrip(TIFF* tif, uint32 strip) * We must check for overflow, potentially causing * an OOB read. Instead of simple * - * td->td_stripoffset[strip]+bytecount > tif->tif_size + * TIFFGetStrileOffset(tif, strip)+bytecount > tif->tif_size * * comparison (which can overflow) we do the following * two comparisons: */ if (bytecount > (uint64)tif->tif_size || - td->td_stripoffset[strip] > (uint64)tif->tif_size - bytecount) { + TIFFGetStrileOffset(tif, strip) > (uint64)tif->tif_size - bytecount) { /* * This error message might seem strange, but * it's what would happen if a read were done @@ -839,7 +841,7 @@ TIFFFillStrip(TIFF* tif, uint32 strip) "Read error on strip %lu; " "got %I64u bytes, expected %I64u", (unsigned long) strip, - (unsigned __int64) tif->tif_size - td->td_stripoffset[strip], + (unsigned __int64) NoSantizeSubUInt64(tif->tif_size, TIFFGetStrileOffset(tif, strip)), (unsigned __int64) bytecount); #else TIFFErrorExt(tif->tif_clientdata, module, @@ -847,7 +849,7 @@ TIFFFillStrip(TIFF* tif, uint32 strip) "Read error on strip %lu; " "got %llu bytes, expected %llu", (unsigned long) strip, - (unsigned long long) tif->tif_size - td->td_stripoffset[strip], + (unsigned long long) NoSantizeSubUInt64(tif->tif_size, TIFFGetStrileOffset(tif, strip)), (unsigned long long) bytecount); #endif tif->tif_curstrip = NOSTRIP; @@ -876,7 +878,7 @@ TIFFFillStrip(TIFF* tif, uint32 strip) } tif->tif_flags &= ~TIFF_MYBUFFER; tif->tif_rawdatasize = (tmsize_t)bytecount; - tif->tif_rawdata = tif->tif_base + (tmsize_t)td->td_stripoffset[strip]; + tif->tif_rawdata = tif->tif_base + (tmsize_t)TIFFGetStrileOffset(tif, strip); tif->tif_rawdataoff = 0; tif->tif_rawdataloaded = (tmsize_t) bytecount; @@ -1091,16 +1093,11 @@ _TIFFReadEncodedTileAndAllocBuffer(TIFF* tif, uint32 tile, static tmsize_t TIFFReadRawTile1(TIFF* tif, uint32 tile, void* buf, tmsize_t size, const char* module) { - TIFFDirectory *td = &tif->tif_dir; - - if (!_TIFFFillStriles( tif )) - return ((tmsize_t)(-1)); - assert((tif->tif_flags&TIFF_NOREADRAW)==0); if (!isMapped(tif)) { tmsize_t cc; - if (!SeekOK(tif, td->td_stripoffset[tile])) { + if (!SeekOK(tif, TIFFGetStrileOffset(tif, tile))) { TIFFErrorExt(tif->tif_clientdata, module, "Seek error at row %lu, col %lu, tile %lu", (unsigned long) tif->tif_row, @@ -1130,9 +1127,9 @@ TIFFReadRawTile1(TIFF* tif, uint32 tile, void* buf, tmsize_t size, const char* m } else { tmsize_t ma,mb; tmsize_t n; - ma=(tmsize_t)td->td_stripoffset[tile]; + ma=(tmsize_t)TIFFGetStrileOffset(tif, tile); mb=ma+size; - if ((td->td_stripoffset[tile] > (uint64)TIFF_TMSIZE_T_MAX)||(ma>tif->tif_size)) + if ((TIFFGetStrileOffset(tif, tile) > (uint64)TIFF_TMSIZE_T_MAX)||(ma>tif->tif_size)) n=0; else if ((mbtif->tif_size)) n=tif->tif_size-ma; @@ -1188,13 +1185,12 @@ TIFFReadRawTile(TIFF* tif, uint32 tile, void* buf, tmsize_t size) "Compression scheme does not support access to raw uncompressed data"); return ((tmsize_t)(-1)); } - bytecount64 = td->td_stripbytecount[tile]; - if (size != (tmsize_t)(-1) && (uint64)size < bytecount64) - bytecount64 = (uint64)size; - bytecountm = (tmsize_t)bytecount64; - if ((uint64)bytecountm!=bytecount64) - { - TIFFErrorExt(tif->tif_clientdata,module,"Integer overflow"); + bytecount64 = TIFFGetStrileByteCount(tif, tile); + if (size != (tmsize_t)(-1) && (uint64)size <= bytecount64) + bytecountm = size; + else + bytecountm = _TIFFCastUInt64ToSSize(tif, bytecount64, module); + if( bytecountm == 0 ) { return ((tmsize_t)(-1)); } return (TIFFReadRawTile1(tif, tile, buf, bytecountm, module)); @@ -1210,13 +1206,10 @@ TIFFFillTile(TIFF* tif, uint32 tile) static const char module[] = "TIFFFillTile"; TIFFDirectory *td = &tif->tif_dir; - if (!_TIFFFillStriles( tif ) || !tif->tif_dir.td_stripbytecount) - return 0; - if ((tif->tif_flags&TIFF_NOREADRAW)==0) { - uint64 bytecount = td->td_stripbytecount[tile]; - if ((int64)bytecount <= 0) { + uint64 bytecount = TIFFGetStrileByteCount(tif, tile); + if( bytecount == 0 || bytecount > (uint64)TIFF_INT64_MAX ) { #if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) TIFFErrorExt(tif->tif_clientdata, module, "%I64u: Invalid tile byte count, tile %lu", @@ -1243,7 +1236,7 @@ TIFFFillTile(TIFF* tif, uint32 tile) (bytecount - 4096) / 10 > (uint64)stripsize ) { uint64 newbytecount = (uint64)stripsize * 10 + 4096; - if( (int64)newbytecount >= 0 ) + if( newbytecount == 0 || newbytecount > (uint64)TIFF_INT64_MAX ) { #if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) TIFFWarningExt(tif->tif_clientdata, module, @@ -1268,13 +1261,13 @@ TIFFFillTile(TIFF* tif, uint32 tile) * We must check for overflow, potentially causing * an OOB read. Instead of simple * - * td->td_stripoffset[tile]+bytecount > tif->tif_size + * TIFFGetStrileOffset(tif, tile)+bytecount > tif->tif_size * * comparison (which can overflow) we do the following * two comparisons: */ if (bytecount > (uint64)tif->tif_size || - td->td_stripoffset[tile] > (uint64)tif->tif_size - bytecount) { + TIFFGetStrileOffset(tif, tile) > (uint64)tif->tif_size - bytecount) { tif->tif_curtile = NOTILE; return (0); } @@ -1303,7 +1296,7 @@ TIFFFillTile(TIFF* tif, uint32 tile) tif->tif_rawdatasize = (tmsize_t)bytecount; tif->tif_rawdata = - tif->tif_base + (tmsize_t)td->td_stripoffset[tile]; + tif->tif_base + (tmsize_t)TIFFGetStrileOffset(tif, tile); tif->tif_rawdataoff = 0; tif->tif_rawdataloaded = (tmsize_t) bytecount; tif->tif_flags |= TIFF_BUFFERMMAP; @@ -1362,7 +1355,8 @@ TIFFFillTile(TIFF* tif, uint32 tile) tif->tif_rawdataoff = 0; tif->tif_rawdataloaded = bytecountm; - if (!isFillOrder(tif, td->td_fillorder) && + if (tif->tif_rawdata != NULL && + !isFillOrder(tif, td->td_fillorder) && (tif->tif_flags & TIFF_NOBITREV) == 0) TIFFReverseBits(tif->tif_rawdata, tif->tif_rawdataloaded); @@ -1429,9 +1423,6 @@ TIFFStartStrip(TIFF* tif, uint32 strip) { TIFFDirectory *td = &tif->tif_dir; - if (!_TIFFFillStriles( tif ) || !tif->tif_dir.td_stripbytecount) - return 0; - if ((tif->tif_flags & TIFF_CODERSETUP) == 0) { if (!(*tif->tif_setupdecode)(tif)) return (0); @@ -1452,7 +1443,7 @@ TIFFStartStrip(TIFF* tif, uint32 strip) if( tif->tif_rawdataloaded > 0 ) tif->tif_rawcc = tif->tif_rawdataloaded; else - tif->tif_rawcc = (tmsize_t)td->td_stripbytecount[strip]; + tif->tif_rawcc = (tmsize_t)TIFFGetStrileByteCount(tif, strip); } return ((*tif->tif_predecode)(tif, (uint16)(strip / td->td_stripsperimage))); @@ -1469,9 +1460,6 @@ TIFFStartTile(TIFF* tif, uint32 tile) TIFFDirectory *td = &tif->tif_dir; uint32 howmany32; - if (!_TIFFFillStriles( tif ) || !tif->tif_dir.td_stripbytecount) - return 0; - if ((tif->tif_flags & TIFF_CODERSETUP) == 0) { if (!(*tif->tif_setupdecode)(tif)) return (0); @@ -1502,7 +1490,7 @@ TIFFStartTile(TIFF* tif, uint32 tile) if( tif->tif_rawdataloaded > 0 ) tif->tif_rawcc = tif->tif_rawdataloaded; else - tif->tif_rawcc = (tmsize_t)td->td_stripbytecount[tile]; + tif->tif_rawcc = (tmsize_t)TIFFGetStrileByteCount(tif, tile); } return ((*tif->tif_predecode)(tif, (uint16)(tile/td->td_stripsperimage))); @@ -1517,13 +1505,100 @@ TIFFCheckRead(TIFF* tif, int tiles) } if (tiles ^ isTiled(tif)) { TIFFErrorExt(tif->tif_clientdata, tif->tif_name, tiles ? - "Can not read tiles from a stripped image" : + "Can not read tiles from a striped image" : "Can not read scanlines from a tiled image"); return (0); } return (1); } +/* Use the provided input buffer (inbuf, insize) and decompress it into + * (outbuf, outsize). + * This function replaces the use of TIFFReadEncodedStrip()/TIFFReadEncodedTile() + * when the user can provide the buffer for the input data, for example when + * he wants to avoid libtiff to read the strile offset/count values from the + * [Strip|Tile][Offsets/ByteCounts] array. + * inbuf content must be writable (if bit reversal is needed) + * Returns 1 in case of success, 0 otherwise. + */ +int TIFFReadFromUserBuffer(TIFF* tif, uint32 strile, + void* inbuf, tmsize_t insize, + void* outbuf, tmsize_t outsize) +{ + static const char module[] = "TIFFReadFromUserBuffer"; + TIFFDirectory *td = &tif->tif_dir; + int ret = 1; + uint32 old_tif_flags = tif->tif_flags; + tmsize_t old_rawdatasize = tif->tif_rawdatasize; + void* old_rawdata = tif->tif_rawdata; + + if (tif->tif_mode == O_WRONLY) { + TIFFErrorExt(tif->tif_clientdata, tif->tif_name, "File not open for reading"); + return 0; + } + if (tif->tif_flags&TIFF_NOREADRAW) + { + TIFFErrorExt(tif->tif_clientdata, module, + "Compression scheme does not support access to raw uncompressed data"); + return 0; + } + + tif->tif_flags &= ~TIFF_MYBUFFER; + tif->tif_flags |= TIFF_BUFFERMMAP; + tif->tif_rawdatasize = insize; + tif->tif_rawdata = inbuf; + tif->tif_rawdataoff = 0; + tif->tif_rawdataloaded = insize; + + if (!isFillOrder(tif, td->td_fillorder) && + (tif->tif_flags & TIFF_NOBITREV) == 0) + { + TIFFReverseBits(inbuf, insize); + } + + if( TIFFIsTiled(tif) ) + { + if( !TIFFStartTile(tif, strile) || + !(*tif->tif_decodetile)(tif, (uint8*) outbuf, outsize, + (uint16)(strile/td->td_stripsperimage)) ) + { + ret = 0; + } + } + else + { + uint32 rowsperstrip=td->td_rowsperstrip; + uint32 stripsperplane; + if (rowsperstrip>td->td_imagelength) + rowsperstrip=td->td_imagelength; + stripsperplane= TIFFhowmany_32_maxuint_compat(td->td_imagelength, rowsperstrip); + if( !TIFFStartStrip(tif, strile) || + !(*tif->tif_decodestrip)(tif, (uint8*) outbuf, outsize, + (uint16)(strile/stripsperplane)) ) + { + ret = 0; + } + } + if( ret ) + { + (*tif->tif_postdecode)(tif, (uint8*) outbuf, outsize); + } + + if (!isFillOrder(tif, td->td_fillorder) && + (tif->tif_flags & TIFF_NOBITREV) == 0) + { + TIFFReverseBits(inbuf, insize); + } + + tif->tif_flags = old_tif_flags; + tif->tif_rawdatasize = old_rawdatasize; + tif->tif_rawdata = old_rawdata; + tif->tif_rawdataoff = 0; + tif->tif_rawdataloaded = 0; + + return ret; +} + void _TIFFNoPostDecode(TIFF* tif, uint8* buf, tmsize_t cc) { diff --git a/external/tiff-4.0.9/libtiff/tif_stream.cxx b/external/tiff-4.1.0/libtiff/tif_stream.cxx similarity index 99% rename from external/tiff-4.0.9/libtiff/tif_stream.cxx rename to external/tiff-4.1.0/libtiff/tif_stream.cxx index ecca1fd5..7f640a9c 100644 --- a/external/tiff-4.0.9/libtiff/tif_stream.cxx +++ b/external/tiff-4.1.0/libtiff/tif_stream.cxx @@ -1,5 +1,3 @@ -/* $Id: tif_stream.cxx,v 1.13 2015-05-28 01:50:22 bfriesen Exp $ */ - /* * Copyright (c) 1988-1996 Sam Leffler * Copyright (c) 1991-1996 Silicon Graphics, Inc. @@ -375,6 +373,9 @@ _tiffStreamOpen(const char* name, const char* mode, void *fd) _tiffosSizeProc, _tiffDummyMapProc, _tiffDummyUnmapProc); + if (!tif) { + delete data; + } } else { tiffis_data *data = new tiffis_data; data->stream = reinterpret_cast(fd); @@ -389,6 +390,9 @@ _tiffStreamOpen(const char* name, const char* mode, void *fd) _tiffisSizeProc, _tiffDummyMapProc, _tiffDummyUnmapProc); + if (!tif) { + delete data; + } } return (tif); diff --git a/external/tiff-4.0.9/libtiff/tif_strip.c b/external/tiff-4.1.0/libtiff/tif_strip.c similarity index 93% rename from external/tiff-4.0.9/libtiff/tif_strip.c rename to external/tiff-4.1.0/libtiff/tif_strip.c index 6e9f2ef6..c08c60a7 100644 --- a/external/tiff-4.0.9/libtiff/tif_strip.c +++ b/external/tiff-4.1.0/libtiff/tif_strip.c @@ -1,5 +1,3 @@ -/* $Id: tif_strip.c,v 1.38 2016-12-03 11:02:15 erouault Exp $ */ - /* * Copyright (c) 1991-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. @@ -131,15 +129,8 @@ TIFFVStripSize(TIFF* tif, uint32 nrows) { static const char module[] = "TIFFVStripSize"; uint64 m; - tmsize_t n; m=TIFFVStripSize64(tif,nrows); - n=(tmsize_t)m; - if ((uint64)n!=m) - { - TIFFErrorExt(tif->tif_clientdata,module,"Integer overflow"); - n=0; - } - return(n); + return _TIFFCastUInt64ToSSize(tif, m, module); } /* @@ -149,8 +140,7 @@ uint64 TIFFRawStripSize64(TIFF* tif, uint32 strip) { static const char module[] = "TIFFRawStripSize64"; - TIFFDirectory* td = &tif->tif_dir; - uint64 bytecount = td->td_stripbytecount[strip]; + uint64 bytecount = TIFFGetStrileByteCount(tif, strip); if (bytecount == 0) { @@ -213,15 +203,8 @@ TIFFStripSize(TIFF* tif) { static const char module[] = "TIFFStripSize"; uint64 m; - tmsize_t n; m=TIFFStripSize64(tif); - n=(tmsize_t)m; - if ((uint64)n!=m) - { - TIFFErrorExt(tif->tif_clientdata,module,"Integer overflow"); - n=0; - } - return(n); + return _TIFFCastUInt64ToSSize(tif, m, module); } /* @@ -332,14 +315,8 @@ TIFFScanlineSize(TIFF* tif) { static const char module[] = "TIFFScanlineSize"; uint64 m; - tmsize_t n; m=TIFFScanlineSize64(tif); - n=(tmsize_t)m; - if ((uint64)n!=m) { - TIFFErrorExt(tif->tif_clientdata,module,"Integer arithmetic overflow"); - n=0; - } - return(n); + return _TIFFCastUInt64ToSSize(tif, m, module); } /* @@ -368,15 +345,8 @@ TIFFRasterScanlineSize(TIFF* tif) { static const char module[] = "TIFFRasterScanlineSize"; uint64 m; - tmsize_t n; m=TIFFRasterScanlineSize64(tif); - n=(tmsize_t)m; - if ((uint64)n!=m) - { - TIFFErrorExt(tif->tif_clientdata,module,"Integer arithmetic overflow"); - n=0; - } - return(n); + return _TIFFCastUInt64ToSSize(tif, m, module); } /* vim: set ts=8 sts=8 sw=8 noet: */ diff --git a/external/tiff-4.0.9/libtiff/tif_swab.c b/external/tiff-4.1.0/libtiff/tif_swab.c similarity index 99% rename from external/tiff-4.0.9/libtiff/tif_swab.c rename to external/tiff-4.1.0/libtiff/tif_swab.c index 4b2e5f16..b174ba69 100644 --- a/external/tiff-4.0.9/libtiff/tif_swab.c +++ b/external/tiff-4.1.0/libtiff/tif_swab.c @@ -1,5 +1,3 @@ -/* $Id: tif_swab.c,v 1.15 2017-06-08 16:39:50 erouault Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/libtiff/tif_thunder.c b/external/tiff-4.1.0/libtiff/tif_thunder.c similarity index 94% rename from external/tiff-4.0.9/libtiff/tif_thunder.c rename to external/tiff-4.1.0/libtiff/tif_thunder.c index 183199de..db6383a8 100644 --- a/external/tiff-4.0.9/libtiff/tif_thunder.c +++ b/external/tiff-4.1.0/libtiff/tif_thunder.c @@ -1,5 +1,3 @@ -/* $Id: tif_thunder.c,v 1.13 2016-09-04 21:32:56 erouault Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. @@ -124,17 +122,17 @@ ThunderDecode(TIFF* tif, uint8* op, tmsize_t maxpixels) break; case THUNDER_2BITDELTAS: /* 2-bit deltas */ if ((delta = ((n >> 4) & 3)) != DELTA2_SKIP) - SETPIXEL(op, lastpixel + twobitdeltas[delta]); + SETPIXEL(op, (unsigned)((int)lastpixel + twobitdeltas[delta])); if ((delta = ((n >> 2) & 3)) != DELTA2_SKIP) - SETPIXEL(op, lastpixel + twobitdeltas[delta]); + SETPIXEL(op, (unsigned)((int)lastpixel + twobitdeltas[delta])); if ((delta = (n & 3)) != DELTA2_SKIP) - SETPIXEL(op, lastpixel + twobitdeltas[delta]); + SETPIXEL(op, (unsigned)((int)lastpixel + twobitdeltas[delta])); break; case THUNDER_3BITDELTAS: /* 3-bit deltas */ if ((delta = ((n >> 3) & 7)) != DELTA3_SKIP) - SETPIXEL(op, lastpixel + threebitdeltas[delta]); + SETPIXEL(op, (unsigned)((int)lastpixel + threebitdeltas[delta])); if ((delta = (n & 7)) != DELTA3_SKIP) - SETPIXEL(op, lastpixel + threebitdeltas[delta]); + SETPIXEL(op, (unsigned)((int)lastpixel + threebitdeltas[delta])); break; case THUNDER_RAW: /* raw data */ SETPIXEL(op, n); diff --git a/external/tiff-4.0.9/libtiff/tif_tile.c b/external/tiff-4.1.0/libtiff/tif_tile.c similarity index 94% rename from external/tiff-4.0.9/libtiff/tif_tile.c rename to external/tiff-4.1.0/libtiff/tif_tile.c index 388e168a..661cc771 100644 --- a/external/tiff-4.0.9/libtiff/tif_tile.c +++ b/external/tiff-4.1.0/libtiff/tif_tile.c @@ -1,5 +1,3 @@ -/* $Id: tif_tile.c,v 1.24 2015-06-07 22:35:40 bfriesen Exp $ */ - /* * Copyright (c) 1991-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. @@ -183,15 +181,8 @@ TIFFTileRowSize(TIFF* tif) { static const char module[] = "TIFFTileRowSize"; uint64 m; - tmsize_t n; m=TIFFTileRowSize64(tif); - n=(tmsize_t)m; - if ((uint64)n!=m) - { - TIFFErrorExt(tif->tif_clientdata,module,"Integer overflow"); - n=0; - } - return(n); + return _TIFFCastUInt64ToSSize(tif, m, module); } /* @@ -250,15 +241,8 @@ TIFFVTileSize(TIFF* tif, uint32 nrows) { static const char module[] = "TIFFVTileSize"; uint64 m; - tmsize_t n; m=TIFFVTileSize64(tif,nrows); - n=(tmsize_t)m; - if ((uint64)n!=m) - { - TIFFErrorExt(tif->tif_clientdata,module,"Integer overflow"); - n=0; - } - return(n); + return _TIFFCastUInt64ToSSize(tif, m, module); } /* @@ -274,15 +258,8 @@ TIFFTileSize(TIFF* tif) { static const char module[] = "TIFFTileSize"; uint64 m; - tmsize_t n; m=TIFFTileSize64(tif); - n=(tmsize_t)m; - if ((uint64)n!=m) - { - TIFFErrorExt(tif->tif_clientdata,module,"Integer overflow"); - n=0; - } - return(n); + return _TIFFCastUInt64ToSSize(tif, m, module); } /* diff --git a/external/tiff-4.0.9/libtiff/tif_unix.c b/external/tiff-4.1.0/libtiff/tif_unix.c similarity index 99% rename from external/tiff-4.0.9/libtiff/tif_unix.c rename to external/tiff-4.1.0/libtiff/tif_unix.c index 80c437cf..874f1feb 100644 --- a/external/tiff-4.0.9/libtiff/tif_unix.c +++ b/external/tiff-4.1.0/libtiff/tif_unix.c @@ -1,5 +1,3 @@ -/* $Id: tif_unix.c,v 1.28 2017-01-11 19:02:49 erouault Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/libtiff/tif_version.c b/external/tiff-4.1.0/libtiff/tif_version.c similarity index 93% rename from external/tiff-4.0.9/libtiff/tif_version.c rename to external/tiff-4.1.0/libtiff/tif_version.c index f92c843d..60875bbf 100644 --- a/external/tiff-4.0.9/libtiff/tif_version.c +++ b/external/tiff-4.1.0/libtiff/tif_version.c @@ -1,4 +1,3 @@ -/* $Header: /cvs/maptools/cvsroot/libtiff/libtiff/tif_version.c,v 1.3 2010-03-10 18:56:49 bfriesen Exp $ */ /* * Copyright (c) 1992-1997 Sam Leffler * Copyright (c) 1992-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/libtiff/tif_warning.c b/external/tiff-4.1.0/libtiff/tif_warning.c similarity index 95% rename from external/tiff-4.0.9/libtiff/tif_warning.c rename to external/tiff-4.1.0/libtiff/tif_warning.c index dc79f144..c482785c 100644 --- a/external/tiff-4.0.9/libtiff/tif_warning.c +++ b/external/tiff-4.1.0/libtiff/tif_warning.c @@ -1,5 +1,3 @@ -/* $Header: /cvs/maptools/cvsroot/libtiff/libtiff/tif_warning.c,v 1.4 2017-07-04 12:54:42 erouault Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.1.0/libtiff/tif_webp.c b/external/tiff-4.1.0/libtiff/tif_webp.c new file mode 100644 index 00000000..22665f2d --- /dev/null +++ b/external/tiff-4.1.0/libtiff/tif_webp.c @@ -0,0 +1,695 @@ +/* +* Copyright (c) 2018, Mapbox +* Author: +* +* Permission to use, copy, modify, distribute, and sell this software and +* its documentation for any purpose is hereby granted without fee, provided +* that (i) the above copyright notices and this permission notice appear in +* all copies of the software and related documentation, and (ii) the names of +* Sam Leffler and Silicon Graphics may not be used in any advertising or +* publicity relating to the software without the specific, prior written +* permission of Sam Leffler and Silicon Graphics. +* +* THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, +* EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY +* WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. +* +* IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR +* ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, +* OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +* WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF +* LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE +* OF THIS SOFTWARE. +*/ + +#include "tiffiop.h" +#ifdef WEBP_SUPPORT +/* + * TIFF Library. + * + * WEBP Compression Support + * + */ + +#include "webp/decode.h" +#include "webp/encode.h" + +#include + +#define LSTATE_INIT_DECODE 0x01 +#define LSTATE_INIT_ENCODE 0x02 +/* + * State block for each open TIFF + * file using WEBP compression/decompression. + */ +typedef struct { + uint16 nSamples; /* number of samples per pixel */ + + int lossless; /* lossy/lossless compression */ + int quality_level; /* compression level */ + WebPPicture sPicture; /* WebP Picture */ + WebPConfig sEncoderConfig; /* WebP encoder config */ + uint8* pBuffer; /* buffer to hold raw data on encoding */ + unsigned int buffer_offset; /* current offset into the buffer */ + unsigned int buffer_size; + + WebPIDecoder* psDecoder; /* WebPIDecoder */ + WebPDecBuffer sDecBuffer; /* Decoder buffer */ + int last_y; /* Last row decoded */ + + int state; /* state flags */ + + TIFFVGetMethod vgetparent; /* super-class method */ + TIFFVSetMethod vsetparent; /* super-class method */ +} WebPState; + +#define LState(tif) ((WebPState*) (tif)->tif_data) +#define DecoderState(tif) LState(tif) +#define EncoderState(tif) LState(tif) + +static int TWebPEncode(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s); +static int TWebPDecode(TIFF* tif, uint8* op, tmsize_t occ, uint16 s); + +static +int TWebPDatasetWriter(const uint8_t* data, size_t data_size, + const WebPPicture* const picture) +{ + static const char module[] = "TWebPDatasetWriter"; + TIFF* tif = (TIFF*)(picture->custom_ptr); + + if ( (tif->tif_rawcc + (tmsize_t)data_size) > tif->tif_rawdatasize ) { + TIFFErrorExt(tif->tif_clientdata, module, + "Buffer too small by " TIFF_SIZE_FORMAT " bytes.", + (size_t) (tif->tif_rawcc + data_size - tif->tif_rawdatasize)); + return 0; + } else { + _TIFFmemcpy(tif->tif_rawcp, data, data_size); + tif->tif_rawcc += data_size; + tif->tif_rawcp += data_size; + return 1; + } +} + +/* + * Encode a chunk of pixels. + */ +static int +TWebPEncode(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s) +{ + static const char module[] = "TWebPEncode"; + WebPState *sp = EncoderState(tif); + (void) s; + + assert(sp != NULL); + assert(sp->state == LSTATE_INIT_ENCODE); + + if( (uint64)sp->buffer_offset + + (uint64)cc > sp->buffer_size ) + { + TIFFErrorExt(tif->tif_clientdata, module, + "Too many bytes to be written"); + return 0; + } + + memcpy(sp->pBuffer + sp->buffer_offset, + bp, cc); + sp->buffer_offset += (unsigned)cc; + + return 1; + +} + +static int +TWebPDecode(TIFF* tif, uint8* op, tmsize_t occ, uint16 s) +{ + static const char module[] = "WebPDecode"; + VP8StatusCode status = VP8_STATUS_OK; + WebPState *sp = DecoderState(tif); + (void) s; + + assert(sp != NULL); + assert(sp->state == LSTATE_INIT_DECODE); + + if (occ % sp->sDecBuffer.u.RGBA.stride) + { + TIFFErrorExt(tif->tif_clientdata, module, + "Fractional scanlines cannot be read"); + return 0; + } + + status = WebPIAppend(sp->psDecoder, tif->tif_rawcp, tif->tif_rawcc); + + if (status != VP8_STATUS_OK && status != VP8_STATUS_SUSPENDED) { + if (status == VP8_STATUS_INVALID_PARAM) { + TIFFErrorExt(tif->tif_clientdata, module, + "Invalid parameter used."); + } else if (status == VP8_STATUS_OUT_OF_MEMORY) { + TIFFErrorExt(tif->tif_clientdata, module, + "Out of memory."); + } else { + TIFFErrorExt(tif->tif_clientdata, module, + "Unrecognized error."); + } + return 0; + } else { + int current_y, stride; + uint8_t* buf; + + /* Returns the RGB/A image decoded so far */ + buf = WebPIDecGetRGB(sp->psDecoder, ¤t_y, NULL, NULL, &stride); + + if ((buf != NULL) && + (occ <= stride * (current_y - sp->last_y))) { + memcpy(op, + buf + (sp->last_y * stride), + occ); + + tif->tif_rawcp += tif->tif_rawcc; + tif->tif_rawcc = 0; + sp->last_y += occ / sp->sDecBuffer.u.RGBA.stride; + return 1; + } else { + TIFFErrorExt(tif->tif_clientdata, module, "Unable to decode WebP data."); + return 0; + } + } +} + +static int +TWebPFixupTags(TIFF* tif) +{ + (void) tif; + if (tif->tif_dir.td_planarconfig != PLANARCONFIG_CONTIG) { + static const char module[] = "TWebPFixupTags"; + TIFFErrorExt(tif->tif_clientdata, module, + "TIFF WEBP requires data to be stored contiguously in RGB e.g. RGBRGBRGB " +#if WEBP_ENCODER_ABI_VERSION >= 0x0100 + "or RGBARGBARGBA" +#endif + ); + return 0; + } + return 1; +} + +static int +TWebPSetupDecode(TIFF* tif) +{ + static const char module[] = "WebPSetupDecode"; + uint16 nBitsPerSample = tif->tif_dir.td_bitspersample; + uint16 sampleFormat = tif->tif_dir.td_sampleformat; + + WebPState* sp = DecoderState(tif); + assert(sp != NULL); + + sp->nSamples = tif->tif_dir.td_samplesperpixel; + + /* check band count */ + if ( sp->nSamples != 3 +#if WEBP_ENCODER_ABI_VERSION >= 0x0100 + && sp->nSamples != 4 +#endif + ) + { + TIFFErrorExt(tif->tif_clientdata, module, + "WEBP driver doesn't support %d bands. Must be 3 (RGB) " + #if WEBP_ENCODER_ABI_VERSION >= 0x0100 + "or 4 (RGBA) " + #endif + "bands.", + sp->nSamples ); + return 0; + } + + /* check bits per sample and data type */ + if ((nBitsPerSample != 8) && (sampleFormat != 1)) { + TIFFErrorExt(tif->tif_clientdata, module, + "WEBP driver requires 8 bit unsigned data"); + return 0; + } + + /* if we were last encoding, terminate this mode */ + if (sp->state & LSTATE_INIT_ENCODE) { + WebPPictureFree(&sp->sPicture); + if (sp->pBuffer != NULL) { + _TIFFfree(sp->pBuffer); + sp->pBuffer = NULL; + } + sp->buffer_offset = 0; + sp->state = 0; + } + + sp->state |= LSTATE_INIT_DECODE; + + return 1; +} + +/* +* Setup state for decoding a strip. +*/ +static int +TWebPPreDecode(TIFF* tif, uint16 s) +{ + static const char module[] = "TWebPPreDecode"; + uint32 segment_width, segment_height; + WebPState* sp = DecoderState(tif); + TIFFDirectory* td = &tif->tif_dir; + (void) s; + assert(sp != NULL); + + if (isTiled(tif)) { + segment_width = td->td_tilewidth; + segment_height = td->td_tilelength; + } else { + segment_width = td->td_imagewidth; + segment_height = td->td_imagelength - tif->tif_row; + if (segment_height > td->td_rowsperstrip) + segment_height = td->td_rowsperstrip; + } + + if( (sp->state & LSTATE_INIT_DECODE) == 0 ) + tif->tif_setupdecode(tif); + + if (sp->psDecoder != NULL) { + WebPIDelete(sp->psDecoder); + WebPFreeDecBuffer(&sp->sDecBuffer); + sp->psDecoder = NULL; + } + + sp->last_y = 0; + + WebPInitDecBuffer(&sp->sDecBuffer); + + sp->sDecBuffer.is_external_memory = 0; + sp->sDecBuffer.width = segment_width; + sp->sDecBuffer.height = segment_height; + sp->sDecBuffer.u.RGBA.stride = segment_width * sp->nSamples; + sp->sDecBuffer.u.RGBA.size = segment_width * sp->nSamples * segment_height; + + if (sp->nSamples > 3) { + sp->sDecBuffer.colorspace = MODE_RGBA; + } else { + sp->sDecBuffer.colorspace = MODE_RGB; + } + + sp->psDecoder = WebPINewDecoder(&sp->sDecBuffer); + + if (sp->psDecoder == NULL) { + TIFFErrorExt(tif->tif_clientdata, module, + "Unable to allocate WebP decoder."); + return 0; + } + + return 1; +} + +static int +TWebPSetupEncode(TIFF* tif) +{ + static const char module[] = "WebPSetupEncode"; + uint16 nBitsPerSample = tif->tif_dir.td_bitspersample; + uint16 sampleFormat = tif->tif_dir.td_sampleformat; + + WebPState* sp = EncoderState(tif); + assert(sp != NULL); + + sp->nSamples = tif->tif_dir.td_samplesperpixel; + + /* check band count */ + if ( sp->nSamples != 3 +#if WEBP_ENCODER_ABI_VERSION >= 0x0100 + && sp->nSamples != 4 +#endif + ) + { + TIFFErrorExt(tif->tif_clientdata, module, + "WEBP driver doesn't support %d bands. Must be 3 (RGB) " +#if WEBP_ENCODER_ABI_VERSION >= 0x0100 + "or 4 (RGBA) " +#endif + "bands.", + sp->nSamples ); + return 0; + } + + /* check bits per sample and data type */ + if ((nBitsPerSample != 8) && (sampleFormat != 1)) { + TIFFErrorExt(tif->tif_clientdata, module, + "WEBP driver requires 8 bit unsigned data"); + return 0; + } + + if (sp->state & LSTATE_INIT_DECODE) { + WebPIDelete(sp->psDecoder); + WebPFreeDecBuffer(&sp->sDecBuffer); + sp->psDecoder = NULL; + sp->last_y = 0; + sp->state = 0; + } + + sp->state |= LSTATE_INIT_ENCODE; + + if (!WebPPictureInit(&sp->sPicture)) { + TIFFErrorExt(tif->tif_clientdata, module, + "Error initializing WebP picture."); + return 0; + } + + if (!WebPConfigInitInternal(&sp->sEncoderConfig, WEBP_PRESET_DEFAULT, + sp->quality_level, + WEBP_ENCODER_ABI_VERSION)) { + TIFFErrorExt(tif->tif_clientdata, module, + "Error creating WebP encoder configuration."); + return 0; + } + + // WebPConfigInitInternal above sets lossless to false + #if WEBP_ENCODER_ABI_VERSION >= 0x0100 + sp->sEncoderConfig.lossless = sp->lossless; + if (sp->lossless) { + sp->sPicture.use_argb = 1; + } + #endif + + if (!WebPValidateConfig(&sp->sEncoderConfig)) { + TIFFErrorExt(tif->tif_clientdata, module, + "Error with WebP encoder configuration."); + return 0; + } + + return 1; +} + +/* +* Reset encoding state at the start of a strip. +*/ +static int +TWebPPreEncode(TIFF* tif, uint16 s) +{ + static const char module[] = "TWebPPreEncode"; + uint32 segment_width, segment_height; + WebPState *sp = EncoderState(tif); + TIFFDirectory* td = &tif->tif_dir; + + (void) s; + + assert(sp != NULL); + if( sp->state != LSTATE_INIT_ENCODE ) + tif->tif_setupencode(tif); + + /* + * Set encoding parameters for this strip/tile. + */ + if (isTiled(tif)) { + segment_width = td->td_tilewidth; + segment_height = td->td_tilelength; + } else { + segment_width = td->td_imagewidth; + segment_height = td->td_imagelength - tif->tif_row; + if (segment_height > td->td_rowsperstrip) + segment_height = td->td_rowsperstrip; + } + + if( segment_width > 16383 || segment_height > 16383 ) { + TIFFErrorExt(tif->tif_clientdata, module, + "WEBP maximum image dimensions are 16383 x 16383."); + return 0; + } + + /* set up buffer for raw data */ + /* given above check and that nSamples <= 4, buffer_size is <= 1 GB */ + sp->buffer_size = segment_width * segment_height * sp->nSamples; + + if (sp->pBuffer != NULL) { + _TIFFfree(sp->pBuffer); + sp->pBuffer = NULL; + } + + sp->pBuffer = _TIFFmalloc(sp->buffer_size); + if( !sp->pBuffer) { + TIFFErrorExt(tif->tif_clientdata, module, "Cannot allocate buffer"); + return 0; + } + sp->buffer_offset = 0; + + sp->sPicture.width = segment_width; + sp->sPicture.height = segment_height; + sp->sPicture.writer = TWebPDatasetWriter; + sp->sPicture.custom_ptr = tif; + + return 1; +} + +/* +* Finish off an encoded strip by flushing it. +*/ +static int +TWebPPostEncode(TIFF* tif) +{ + static const char module[] = "WebPPostEncode"; + int64_t stride; + WebPState *sp = EncoderState(tif); + assert(sp != NULL); + + assert(sp->state == LSTATE_INIT_ENCODE); + + stride = (int64_t)sp->sPicture.width * sp->nSamples; + +#if WEBP_ENCODER_ABI_VERSION >= 0x0100 + if (sp->nSamples == 4) { + if (!WebPPictureImportRGBA(&sp->sPicture, sp->pBuffer, (int)stride)) { + TIFFErrorExt(tif->tif_clientdata, module, + "WebPPictureImportRGBA() failed" ); + return 0; + } + } + else +#endif + if (!WebPPictureImportRGB(&sp->sPicture, sp->pBuffer, (int)stride)) { + TIFFErrorExt(tif->tif_clientdata, module, + "WebPPictureImportRGB() failed"); + return 0; + } + + if (!WebPEncode(&sp->sEncoderConfig, &sp->sPicture)) { + +#if WEBP_ENCODER_ABI_VERSION >= 0x0100 + const char* pszErrorMsg = NULL; + switch(sp->sPicture.error_code) { + case VP8_ENC_ERROR_OUT_OF_MEMORY: + pszErrorMsg = "Out of memory"; break; + case VP8_ENC_ERROR_BITSTREAM_OUT_OF_MEMORY: + pszErrorMsg = "Out of memory while flushing bits"; break; + case VP8_ENC_ERROR_NULL_PARAMETER: + pszErrorMsg = "A pointer parameter is NULL"; break; + case VP8_ENC_ERROR_INVALID_CONFIGURATION: + pszErrorMsg = "Configuration is invalid"; break; + case VP8_ENC_ERROR_BAD_DIMENSION: + pszErrorMsg = "Picture has invalid width/height"; break; + case VP8_ENC_ERROR_PARTITION0_OVERFLOW: + pszErrorMsg = "Partition is bigger than 512k. Try using less " + "SEGMENTS, or increase PARTITION_LIMIT value"; + break; + case VP8_ENC_ERROR_PARTITION_OVERFLOW: + pszErrorMsg = "Partition is bigger than 16M"; + break; + case VP8_ENC_ERROR_BAD_WRITE: + pszErrorMsg = "Error while fludshing bytes"; break; + case VP8_ENC_ERROR_FILE_TOO_BIG: + pszErrorMsg = "File is bigger than 4G"; break; + case VP8_ENC_ERROR_USER_ABORT: + pszErrorMsg = "User interrupted"; + break; + default: + TIFFErrorExt(tif->tif_clientdata, module, + "WebPEncode returned an unknown error code: %d", + sp->sPicture.error_code); + pszErrorMsg = "Unknown WebP error type."; + break; + } + TIFFErrorExt(tif->tif_clientdata, module, + "WebPEncode() failed : %s", pszErrorMsg); +#else + TIFFErrorExt(tif->tif_clientdata, module, + "Error in WebPEncode()"); +#endif + return 0; + } + + sp->sPicture.custom_ptr = NULL; + + if (!TIFFFlushData1(tif)) + { + TIFFErrorExt(tif->tif_clientdata, module, + "Error flushing TIFF WebP encoder."); + return 0; + } + + return 1; +} + +static void +TWebPCleanup(TIFF* tif) +{ + WebPState* sp = LState(tif); + + assert(sp != 0); + + tif->tif_tagmethods.vgetfield = sp->vgetparent; + tif->tif_tagmethods.vsetfield = sp->vsetparent; + + if (sp->state & LSTATE_INIT_ENCODE) { + WebPPictureFree(&sp->sPicture); + } + + if (sp->psDecoder != NULL) { + WebPIDelete(sp->psDecoder); + WebPFreeDecBuffer(&sp->sDecBuffer); + sp->psDecoder = NULL; + sp->last_y = 0; + } + + if (sp->pBuffer != NULL) { + _TIFFfree(sp->pBuffer); + sp->pBuffer = NULL; + } + + _TIFFfree(tif->tif_data); + tif->tif_data = NULL; + + _TIFFSetDefaultCompressionState(tif); +} + +static int +TWebPVSetField(TIFF* tif, uint32 tag, va_list ap) +{ + static const char module[] = "WebPVSetField"; + WebPState* sp = LState(tif); + + switch (tag) { + case TIFFTAG_WEBP_LEVEL: + sp->quality_level = (int) va_arg(ap, int); + if( sp->quality_level <= 0 || + sp->quality_level > 100.0f ) { + TIFFWarningExt(tif->tif_clientdata, module, + "WEBP_LEVEL should be between 1 and 100"); + } + return 1; + case TIFFTAG_WEBP_LOSSLESS: + #if WEBP_ENCODER_ABI_VERSION >= 0x0100 + sp->lossless = va_arg(ap, int); + if (sp->lossless){ + sp->quality_level = 100.0f; + } + return 1; + #else + TIFFErrorExt(tif->tif_clientdata, module, + "Need to upgrade WEBP driver, this version doesn't support " + "lossless compression."); + return 0; + #endif + default: + return (*sp->vsetparent)(tif, tag, ap); + } + /*NOTREACHED*/ +} + +static int +TWebPVGetField(TIFF* tif, uint32 tag, va_list ap) +{ + WebPState* sp = LState(tif); + + switch (tag) { + case TIFFTAG_WEBP_LEVEL: + *va_arg(ap, int*) = sp->quality_level; + break; + case TIFFTAG_WEBP_LOSSLESS: + *va_arg(ap, int*) = sp->lossless; + break; + default: + return (*sp->vgetparent)(tif, tag, ap); + } + return 1; +} + +static const TIFFField TWebPFields[] = { + { TIFFTAG_WEBP_LEVEL, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT, + TIFF_SETGET_UNDEFINED, + FIELD_PSEUDO, TRUE, FALSE, "WEBP quality", NULL }, + { TIFFTAG_WEBP_LOSSLESS, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT, + TIFF_SETGET_UNDEFINED, + FIELD_PSEUDO, TRUE, FALSE, "WEBP lossless/lossy", NULL + }, +}; + +int +TIFFInitWebP(TIFF* tif, int scheme) +{ + static const char module[] = "TIFFInitWebP"; + WebPState* sp; + + assert( scheme == COMPRESSION_WEBP ); + + /* + * Merge codec-specific tag information. + */ + if ( !_TIFFMergeFields(tif, TWebPFields, TIFFArrayCount(TWebPFields)) ) { + TIFFErrorExt(tif->tif_clientdata, module, + "Merging WebP codec-specific tags failed"); + return 0; + } + + /* + * Allocate state block so tag methods have storage to record values. + */ + tif->tif_data = (uint8*) _TIFFmalloc(sizeof(WebPState)); + if (tif->tif_data == NULL) + goto bad; + sp = LState(tif); + + /* + * Override parent get/set field methods. + */ + sp->vgetparent = tif->tif_tagmethods.vgetfield; + tif->tif_tagmethods.vgetfield = TWebPVGetField; /* hook for codec tags */ + sp->vsetparent = tif->tif_tagmethods.vsetfield; + tif->tif_tagmethods.vsetfield = TWebPVSetField; /* hook for codec tags */ + + /* Default values for codec-specific fields */ + sp->quality_level = 75.0f; /* default comp. level */ + sp->lossless = 0; /* default to false */ + sp->state = 0; + sp->nSamples = 0; + sp->psDecoder = NULL; + sp->last_y = 0; + + sp->buffer_offset = 0; + sp->pBuffer = NULL; + + /* + * Install codec methods. + * Notes: + * encoderow is not supported + */ + tif->tif_fixuptags = TWebPFixupTags; + tif->tif_setupdecode = TWebPSetupDecode; + tif->tif_predecode = TWebPPreDecode; + tif->tif_decoderow = TWebPDecode; + tif->tif_decodestrip = TWebPDecode; + tif->tif_decodetile = TWebPDecode; + tif->tif_setupencode = TWebPSetupEncode; + tif->tif_preencode = TWebPPreEncode; + tif->tif_postencode = TWebPPostEncode; + tif->tif_encoderow = TWebPEncode; + tif->tif_encodestrip = TWebPEncode; + tif->tif_encodetile = TWebPEncode; + tif->tif_cleanup = TWebPCleanup; + + return 1; +bad: + TIFFErrorExt(tif->tif_clientdata, module, + "No space for WebP state block"); + return 0; +} + +#endif /* WEBP_SUPPORT */ diff --git a/external/tiff-4.0.9/libtiff/tif_win32.c b/external/tiff-4.1.0/libtiff/tif_win32.c similarity index 87% rename from external/tiff-4.0.9/libtiff/tif_win32.c rename to external/tiff-4.1.0/libtiff/tif_win32.c index 090baed8..088880e7 100644 --- a/external/tiff-4.0.9/libtiff/tif_win32.c +++ b/external/tiff-4.1.0/libtiff/tif_win32.c @@ -1,5 +1,3 @@ -/* $Id: tif_win32.c,v 1.42 2017-01-11 19:02:49 erouault Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. @@ -407,60 +405,21 @@ _TIFFmemcmp(const void* p1, const void* p2, tmsize_t c) static void Win32WarningHandler(const char* module, const char* fmt, va_list ap) { -#ifndef TIF_PLATFORM_CONSOLE - LPTSTR szTitle; - LPTSTR szTmp; - LPCTSTR szTitleText = "%s Warning"; - LPCTSTR szDefaultModule = "LIBTIFF"; - LPCTSTR szTmpModule = (module == NULL) ? szDefaultModule : module; - SIZE_T nBufSize = (strlen(szTmpModule) + - strlen(szTitleText) + strlen(fmt) + 256)*sizeof(char); - - if ((szTitle = (LPTSTR)LocalAlloc(LMEM_FIXED, nBufSize)) == NULL) - return; - sprintf(szTitle, szTitleText, szTmpModule); - szTmp = szTitle + (strlen(szTitle)+2)*sizeof(char); - vsnprintf(szTmp, nBufSize-(strlen(szTitle)+2)*sizeof(char), fmt, ap); - MessageBoxA(GetFocus(), szTmp, szTitle, MB_OK | MB_ICONINFORMATION); - LocalFree(szTitle); - - return; -#else if (module != NULL) fprintf(stderr, "%s: ", module); fprintf(stderr, "Warning, "); vfprintf(stderr, fmt, ap); fprintf(stderr, ".\n"); -#endif } TIFFErrorHandler _TIFFwarningHandler = Win32WarningHandler; static void Win32ErrorHandler(const char* module, const char* fmt, va_list ap) { -#ifndef TIF_PLATFORM_CONSOLE - LPTSTR szTitle; - LPTSTR szTmp; - LPCTSTR szTitleText = "%s Error"; - LPCTSTR szDefaultModule = "LIBTIFF"; - LPCTSTR szTmpModule = (module == NULL) ? szDefaultModule : module; - SIZE_T nBufSize = (strlen(szTmpModule) + - strlen(szTitleText) + strlen(fmt) + 256)*sizeof(char); - - if ((szTitle = (LPTSTR)LocalAlloc(LMEM_FIXED, nBufSize)) == NULL) - return; - sprintf(szTitle, szTitleText, szTmpModule); - szTmp = szTitle + (strlen(szTitle)+2)*sizeof(char); - vsnprintf(szTmp, nBufSize-(strlen(szTitle)+2)*sizeof(char), fmt, ap); - MessageBoxA(GetFocus(), szTmp, szTitle, MB_OK | MB_ICONEXCLAMATION); - LocalFree(szTitle); - return; -#else if (module != NULL) fprintf(stderr, "%s: ", module); vfprintf(stderr, fmt, ap); fprintf(stderr, ".\n"); -#endif } TIFFErrorHandler _TIFFerrorHandler = Win32ErrorHandler; diff --git a/external/tiff-4.0.9/libtiff/tif_write.c b/external/tiff-4.1.0/libtiff/tif_write.c similarity index 87% rename from external/tiff-4.0.9/libtiff/tif_write.c rename to external/tiff-4.1.0/libtiff/tif_write.c index 208a2ee6..33e803c1 100644 --- a/external/tiff-4.0.9/libtiff/tif_write.c +++ b/external/tiff-4.1.0/libtiff/tif_write.c @@ -1,5 +1,3 @@ -/* $Id: tif_write.c,v 1.46 2016-12-03 21:57:44 erouault Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. @@ -130,10 +128,10 @@ TIFFWriteScanline(TIFF* tif, void* buf, uint32 row, uint16 sample) tif->tif_rawcc = 0; tif->tif_rawcp = tif->tif_rawdata; - if( td->td_stripbytecount[strip] > 0 ) + if( td->td_stripbytecount_p[strip] > 0 ) { /* if we are writing over existing tiles, zero length */ - td->td_stripbytecount[strip] = 0; + td->td_stripbytecount_p[strip] = 0; /* this forces TIFFAppendToStrip() to do a seek */ tif->tif_curoff = 0; @@ -178,6 +176,32 @@ TIFFWriteScanline(TIFF* tif, void* buf, uint32 row, uint16 sample) return (status); } +/* Make sure that at the first attempt of rewriting a tile/strip, we will have */ +/* more bytes available in the output buffer than the previous byte count, */ +/* so that TIFFAppendToStrip() will detect the overflow when it is called the first */ +/* time if the new compressed tile is bigger than the older one. (GDAL #4771) */ +static int _TIFFReserveLargeEnoughWriteBuffer(TIFF* tif, uint32 strip_or_tile) +{ + TIFFDirectory *td = &tif->tif_dir; + if( td->td_stripbytecount_p[strip_or_tile] > 0 ) + { + /* The +1 is to ensure at least one extra bytes */ + /* The +4 is because the LZW encoder flushes 4 bytes before the limit */ + uint64 safe_buffer_size = (uint64)(td->td_stripbytecount_p[strip_or_tile] + 1 + 4); + if( tif->tif_rawdatasize <= (tmsize_t)safe_buffer_size ) + { + if( !(TIFFWriteBufferSetup(tif, NULL, + (tmsize_t)TIFFroundup_64(safe_buffer_size, 1024))) ) + return 0; + } + + /* Force TIFFAppendToStrip() to consider placing data at end + of file. */ + tif->tif_curoff = 0; + } + return 1; +} + /* * Encode the supplied data and write it to the * specified strip. @@ -224,6 +248,13 @@ TIFFWriteEncodedStrip(TIFF* tif, uint32 strip, void* data, tmsize_t cc) tif->tif_flags |= TIFF_BUF4WRITE; tif->tif_curstrip = strip; + if( !_TIFFReserveLargeEnoughWriteBuffer(tif, strip) ) { + return ((tmsize_t)(-1)); + } + + tif->tif_rawcc = 0; + tif->tif_rawcp = tif->tif_rawdata; + if (td->td_stripsperimage == 0) { TIFFErrorExt(tif->tif_clientdata, module, "Zero strips per image"); return ((tmsize_t) -1); @@ -236,27 +267,6 @@ TIFFWriteEncodedStrip(TIFF* tif, uint32 strip, void* data, tmsize_t cc) tif->tif_flags |= TIFF_CODERSETUP; } - if( td->td_stripbytecount[strip] > 0 ) - { - /* Make sure that at the first attempt of rewriting the tile, we will have */ - /* more bytes available in the output buffer than the previous byte count, */ - /* so that TIFFAppendToStrip() will detect the overflow when it is called the first */ - /* time if the new compressed tile is bigger than the older one. (GDAL #4771) */ - if( tif->tif_rawdatasize <= (tmsize_t)td->td_stripbytecount[strip] ) - { - if( !(TIFFWriteBufferSetup(tif, NULL, - (tmsize_t)TIFFroundup_64((uint64)(td->td_stripbytecount[strip] + 1), 1024))) ) - return ((tmsize_t)(-1)); - } - - /* Force TIFFAppendToStrip() to consider placing data at end - of file. */ - tif->tif_curoff = 0; - } - - tif->tif_rawcc = 0; - tif->tif_rawcp = tif->tif_rawdata; - tif->tif_flags &= ~TIFF_POSTENCODE; /* shortcut to avoid an extra memcpy() */ @@ -404,22 +414,8 @@ TIFFWriteEncodedTile(TIFF* tif, uint32 tile, void* data, tmsize_t cc) tif->tif_flags |= TIFF_BUF4WRITE; tif->tif_curtile = tile; - if( td->td_stripbytecount[tile] > 0 ) - { - /* Make sure that at the first attempt of rewriting the tile, we will have */ - /* more bytes available in the output buffer than the previous byte count, */ - /* so that TIFFAppendToStrip() will detect the overflow when it is called the first */ - /* time if the new compressed tile is bigger than the older one. (GDAL #4771) */ - if( tif->tif_rawdatasize <= (tmsize_t) td->td_stripbytecount[tile] ) - { - if( !(TIFFWriteBufferSetup(tif, NULL, - (tmsize_t)TIFFroundup_64((uint64)(td->td_stripbytecount[tile] + 1), 1024))) ) - return ((tmsize_t)(-1)); - } - - /* Force TIFFAppendToStrip() to consider placing data at end - of file. */ - tif->tif_curoff = 0; + if( !_TIFFReserveLargeEnoughWriteBuffer(tif, tile) ) { + return ((tmsize_t)(-1)); } tif->tif_rawcc = 0; @@ -539,20 +535,20 @@ TIFFSetupStrips(TIFF* tif) td->td_nstrips = td->td_stripsperimage; if (td->td_planarconfig == PLANARCONFIG_SEPARATE) td->td_stripsperimage /= td->td_samplesperpixel; - td->td_stripoffset = (uint64 *) + td->td_stripoffset_p = (uint64 *) _TIFFCheckMalloc(tif, td->td_nstrips, sizeof (uint64), "for \"StripOffsets\" array"); - td->td_stripbytecount = (uint64 *) + td->td_stripbytecount_p = (uint64 *) _TIFFCheckMalloc(tif, td->td_nstrips, sizeof (uint64), "for \"StripByteCounts\" array"); - if (td->td_stripoffset == NULL || td->td_stripbytecount == NULL) + if (td->td_stripoffset_p == NULL || td->td_stripbytecount_p == NULL) return (0); /* * Place data at the end-of-file * (by setting offsets to zero). */ - _TIFFmemset(td->td_stripoffset, 0, td->td_nstrips*sizeof (uint64)); - _TIFFmemset(td->td_stripbytecount, 0, td->td_nstrips*sizeof (uint64)); + _TIFFmemset(td->td_stripoffset_p, 0, td->td_nstrips*sizeof (uint64)); + _TIFFmemset(td->td_stripbytecount_p, 0, td->td_nstrips*sizeof (uint64)); TIFFSetFieldBit(tif, FIELD_STRIPOFFSETS); TIFFSetFieldBit(tif, FIELD_STRIPBYTECOUNTS); return (1); @@ -574,7 +570,7 @@ TIFFWriteCheck(TIFF* tif, int tiles, const char* module) } if (tiles ^ isTiled(tif)) { TIFFErrorExt(tif->tif_clientdata, module, tiles ? - "Can not write tiles to a stripped image" : + "Can not write tiles to a striped image" : "Can not write scanlines to a tiled image"); return (0); } @@ -612,7 +608,7 @@ TIFFWriteCheck(TIFF* tif, int tiles, const char* module) return (0); } } - if (tif->tif_dir.td_stripoffset == NULL && !TIFFSetupStrips(tif)) { + if (tif->tif_dir.td_stripoffset_p == NULL && !TIFFSetupStrips(tif)) { tif->tif_dir.td_nstrips = 0; TIFFErrorExt(tif->tif_clientdata, module, "No space for %s arrays", isTiled(tif) ? "tile" : "strip"); @@ -630,6 +626,20 @@ TIFFWriteCheck(TIFF* tif, int tiles, const char* module) if (tif->tif_scanlinesize == 0) return (0); tif->tif_flags |= TIFF_BEENWRITING; + + if( tif->tif_dir.td_stripoffset_entry.tdir_tag != 0 && + tif->tif_dir.td_stripoffset_entry.tdir_count == 0 && + tif->tif_dir.td_stripoffset_entry.tdir_type == 0 && + tif->tif_dir.td_stripoffset_entry.tdir_offset.toff_long8 == 0 && + tif->tif_dir.td_stripbytecount_entry.tdir_tag != 0 && + tif->tif_dir.td_stripbytecount_entry.tdir_count == 0 && + tif->tif_dir.td_stripbytecount_entry.tdir_type == 0 && + tif->tif_dir.td_stripbytecount_entry.tdir_offset.toff_long8 == 0 && + !(tif->tif_flags & TIFF_DIRTYDIRECT) ) + { + TIFFForceStrileArrayWriting(tif); + } + return (1); } @@ -686,9 +696,9 @@ TIFFGrowStrips(TIFF* tif, uint32 delta, const char* module) uint64* new_stripbytecount; assert(td->td_planarconfig == PLANARCONFIG_CONTIG); - new_stripoffset = (uint64*)_TIFFrealloc(td->td_stripoffset, + new_stripoffset = (uint64*)_TIFFrealloc(td->td_stripoffset_p, (td->td_nstrips + delta) * sizeof (uint64)); - new_stripbytecount = (uint64*)_TIFFrealloc(td->td_stripbytecount, + new_stripbytecount = (uint64*)_TIFFrealloc(td->td_stripbytecount_p, (td->td_nstrips + delta) * sizeof (uint64)); if (new_stripoffset == NULL || new_stripbytecount == NULL) { if (new_stripoffset) @@ -699,11 +709,11 @@ TIFFGrowStrips(TIFF* tif, uint32 delta, const char* module) TIFFErrorExt(tif->tif_clientdata, module, "No space to expand strip arrays"); return (0); } - td->td_stripoffset = new_stripoffset; - td->td_stripbytecount = new_stripbytecount; - _TIFFmemset(td->td_stripoffset + td->td_nstrips, + td->td_stripoffset_p = new_stripoffset; + td->td_stripbytecount_p = new_stripbytecount; + _TIFFmemset(td->td_stripoffset_p + td->td_nstrips, 0, delta*sizeof (uint64)); - _TIFFmemset(td->td_stripbytecount + td->td_nstrips, + _TIFFmemset(td->td_stripbytecount_p + td->td_nstrips, 0, delta*sizeof (uint64)); td->td_nstrips += delta; tif->tif_flags |= TIFF_DIRTYDIRECT; @@ -722,12 +732,12 @@ TIFFAppendToStrip(TIFF* tif, uint32 strip, uint8* data, tmsize_t cc) uint64 m; int64 old_byte_count = -1; - if (td->td_stripoffset[strip] == 0 || tif->tif_curoff == 0) { + if (td->td_stripoffset_p[strip] == 0 || tif->tif_curoff == 0) { assert(td->td_nstrips > 0); - if( td->td_stripbytecount[strip] != 0 - && td->td_stripoffset[strip] != 0 - && td->td_stripbytecount[strip] >= (uint64) cc ) + if( td->td_stripbytecount_p[strip] != 0 + && td->td_stripoffset_p[strip] != 0 + && td->td_stripbytecount_p[strip] >= (uint64) cc ) { /* * There is already tile data on disk, and the new tile @@ -736,7 +746,7 @@ TIFFAppendToStrip(TIFF* tif, uint32 strip, uint8* data, tmsize_t cc) * more data to append to this strip before we are done * depending on how we are getting called. */ - if (!SeekOK(tif, td->td_stripoffset[strip])) { + if (!SeekOK(tif, td->td_stripoffset_p[strip])) { TIFFErrorExt(tif->tif_clientdata, module, "Seek error at scanline %lu", (unsigned long)tif->tif_row); @@ -749,17 +759,17 @@ TIFFAppendToStrip(TIFF* tif, uint32 strip, uint8* data, tmsize_t cc) * Seek to end of file, and set that as our location to * write this strip. */ - td->td_stripoffset[strip] = TIFFSeekFile(tif, 0, SEEK_END); + td->td_stripoffset_p[strip] = TIFFSeekFile(tif, 0, SEEK_END); tif->tif_flags |= TIFF_DIRTYSTRIP; } - tif->tif_curoff = td->td_stripoffset[strip]; + tif->tif_curoff = td->td_stripoffset_p[strip]; /* * We are starting a fresh strip/tile, so set the size to zero. */ - old_byte_count = td->td_stripbytecount[strip]; - td->td_stripbytecount[strip] = 0; + old_byte_count = td->td_stripbytecount_p[strip]; + td->td_stripbytecount_p[strip] = 0; } m = tif->tif_curoff+cc; @@ -776,9 +786,9 @@ TIFFAppendToStrip(TIFF* tif, uint32 strip, uint8* data, tmsize_t cc) return (0); } tif->tif_curoff = m; - td->td_stripbytecount[strip] += cc; + td->td_stripbytecount_p[strip] += cc; - if( (int64) td->td_stripbytecount[strip] != old_byte_count ) + if( (int64) td->td_stripbytecount_p[strip] != old_byte_count ) tif->tif_flags |= TIFF_DIRTYSTRIP; return (1); diff --git a/external/tiff-4.0.9/libtiff/tif_zip.c b/external/tiff-4.1.0/libtiff/tif_zip.c similarity index 88% rename from external/tiff-4.0.9/libtiff/tif_zip.c rename to external/tiff-4.1.0/libtiff/tif_zip.c index 42943fbb..c7507734 100644 --- a/external/tiff-4.0.9/libtiff/tif_zip.c +++ b/external/tiff-4.1.0/libtiff/tif_zip.c @@ -1,5 +1,3 @@ -/* $Id: tif_zip.c,v 1.37 2017-05-10 15:21:16 erouault Exp $ */ - /* * Copyright (c) 1995-1997 Sam Leffler * Copyright (c) 1995-1997 Silicon Graphics, Inc. @@ -126,7 +124,6 @@ ZIPSetupDecode(TIFF* tif) static int ZIPPreDecode(TIFF* tif, uint16 s) { - static const char module[] = "ZIPPreDecode"; ZIPState* sp = DecoderState(tif); (void) s; @@ -140,12 +137,7 @@ ZIPPreDecode(TIFF* tif, uint16 s) we need to simplify this code to reflect a ZLib that is likely updated to deal with 8byte memory sizes, though this code will respond appropriately even before we simplify it */ - sp->stream.avail_in = (uInt) tif->tif_rawcc; - if ((tmsize_t)sp->stream.avail_in != tif->tif_rawcc) - { - TIFFErrorExt(tif->tif_clientdata, module, "ZLib cannot deal with buffers this size"); - return (0); - } + sp->stream.avail_in = (uint64)tif->tif_rawcc < 0xFFFFFFFFU ? (uInt) tif->tif_rawcc : 0xFFFFFFFFU; return (inflateReset(&sp->stream) == Z_OK); } @@ -160,46 +152,43 @@ ZIPDecode(TIFF* tif, uint8* op, tmsize_t occ, uint16 s) assert(sp->state == ZSTATE_INIT_DECODE); sp->stream.next_in = tif->tif_rawcp; - sp->stream.avail_in = (uInt) tif->tif_rawcc; sp->stream.next_out = op; assert(sizeof(sp->stream.avail_out)==4); /* if this assert gets raised, we need to simplify this code to reflect a ZLib that is likely updated to deal with 8byte memory sizes, though this code will respond appropriately even before we simplify it */ - sp->stream.avail_out = (uInt) occ; - if ((tmsize_t)sp->stream.avail_out != occ) - { - TIFFErrorExt(tif->tif_clientdata, module, "ZLib cannot deal with buffers this size"); - return (0); - } do { - int state = inflate(&sp->stream, Z_PARTIAL_FLUSH); + int state; + uInt avail_in_before = (uint64)tif->tif_rawcc <= 0xFFFFFFFFU ? (uInt)tif->tif_rawcc : 0xFFFFFFFFU; + uInt avail_out_before = (uint64)occ < 0xFFFFFFFFU ? (uInt) occ : 0xFFFFFFFFU; + sp->stream.avail_in = avail_in_before; + sp->stream.avail_out = avail_out_before; + state = inflate(&sp->stream, Z_PARTIAL_FLUSH); + tif->tif_rawcc -= (avail_in_before - sp->stream.avail_in); + occ -= (avail_out_before - sp->stream.avail_out); if (state == Z_STREAM_END) break; if (state == Z_DATA_ERROR) { TIFFErrorExt(tif->tif_clientdata, module, "Decoding error at scanline %lu, %s", (unsigned long) tif->tif_row, SAFE_MSG(sp)); - if (inflateSync(&sp->stream) != Z_OK) - return (0); - continue; + return (0); } if (state != Z_OK) { TIFFErrorExt(tif->tif_clientdata, module, "ZLib error: %s", SAFE_MSG(sp)); return (0); } - } while (sp->stream.avail_out > 0); - if (sp->stream.avail_out != 0) { + } while (occ > 0); + if (occ != 0) { TIFFErrorExt(tif->tif_clientdata, module, "Not enough data at scanline %lu (short " TIFF_UINT64_FORMAT " bytes)", - (unsigned long) tif->tif_row, (TIFF_UINT64_T) sp->stream.avail_out); + (unsigned long) tif->tif_row, (TIFF_UINT64_T) occ); return (0); } tif->tif_rawcp = sp->stream.next_in; - tif->tif_rawcc = sp->stream.avail_in; return (1); } @@ -231,7 +220,6 @@ ZIPSetupEncode(TIFF* tif) static int ZIPPreEncode(TIFF* tif, uint16 s) { - static const char module[] = "ZIPPreEncode"; ZIPState *sp = EncoderState(tif); (void) s; @@ -244,12 +232,7 @@ ZIPPreEncode(TIFF* tif, uint16 s) we need to simplify this code to reflect a ZLib that is likely updated to deal with 8byte memory sizes, though this code will respond appropriately even before we simplify it */ - sp->stream.avail_out = (uInt)tif->tif_rawdatasize; - if ((tmsize_t)sp->stream.avail_out != tif->tif_rawdatasize) - { - TIFFErrorExt(tif->tif_clientdata, module, "ZLib cannot deal with buffers this size"); - return (0); - } + sp->stream.avail_out = (uint64)tif->tif_rawdatasize <= 0xFFFFFFFFU ? (uInt)tif->tif_rawdatasize : 0xFFFFFFFFU; return (deflateReset(&sp->stream) == Z_OK); } @@ -271,13 +254,9 @@ ZIPEncode(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s) we need to simplify this code to reflect a ZLib that is likely updated to deal with 8byte memory sizes, though this code will respond appropriately even before we simplify it */ - sp->stream.avail_in = (uInt) cc; - if ((tmsize_t)sp->stream.avail_in != cc) - { - TIFFErrorExt(tif->tif_clientdata, module, "ZLib cannot deal with buffers this size"); - return (0); - } do { + uInt avail_in_before = (uint64)cc <= 0xFFFFFFFFU ? (uInt)cc : 0xFFFFFFFFU; + sp->stream.avail_in = avail_in_before; if (deflate(&sp->stream, Z_NO_FLUSH) != Z_OK) { TIFFErrorExt(tif->tif_clientdata, module, "Encoder error: %s", @@ -288,9 +267,10 @@ ZIPEncode(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s) tif->tif_rawcc = tif->tif_rawdatasize; TIFFFlushData1(tif); sp->stream.next_out = tif->tif_rawdata; - sp->stream.avail_out = (uInt) tif->tif_rawdatasize; /* this is a safe typecast, as check is made already in ZIPPreEncode */ + sp->stream.avail_out = (uint64)tif->tif_rawdatasize <= 0xFFFFFFFFU ? (uInt)tif->tif_rawdatasize : 0xFFFFFFFFU; } - } while (sp->stream.avail_in > 0); + cc -= (avail_in_before - sp->stream.avail_in); + } while (cc > 0); return (1); } @@ -316,7 +296,7 @@ ZIPPostEncode(TIFF* tif) tif->tif_rawcc = tif->tif_rawdatasize - sp->stream.avail_out; TIFFFlushData1(tif); sp->stream.next_out = tif->tif_rawdata; - sp->stream.avail_out = (uInt) tif->tif_rawdatasize; /* this is a safe typecast, as check is made already in ZIPPreEncode */ + sp->stream.avail_out = (uint64)tif->tif_rawdatasize <= 0xFFFFFFFFU ? (uInt)tif->tif_rawdatasize : 0xFFFFFFFFU; } break; default: diff --git a/external/tiff-4.1.0/libtiff/tif_zstd.c b/external/tiff-4.1.0/libtiff/tif_zstd.c new file mode 100644 index 00000000..21c935e2 --- /dev/null +++ b/external/tiff-4.1.0/libtiff/tif_zstd.c @@ -0,0 +1,440 @@ +/* +* Copyright (c) 2017, Planet Labs +* Author: +* +* Permission to use, copy, modify, distribute, and sell this software and +* its documentation for any purpose is hereby granted without fee, provided +* that (i) the above copyright notices and this permission notice appear in +* all copies of the software and related documentation, and (ii) the names of +* Sam Leffler and Silicon Graphics may not be used in any advertising or +* publicity relating to the software without the specific, prior written +* permission of Sam Leffler and Silicon Graphics. +* +* THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, +* EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY +* WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. +* +* IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR +* ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, +* OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +* WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF +* LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE +* OF THIS SOFTWARE. +*/ + +#include "tiffiop.h" +#ifdef ZSTD_SUPPORT +/* +* TIFF Library. +* +* ZSTD Compression Support +* +*/ + +#include "tif_predict.h" +#include "zstd.h" + +#include + +/* +* State block for each open TIFF file using ZSTD compression/decompression. +*/ +typedef struct { + TIFFPredictorState predict; + ZSTD_DStream* dstream; + ZSTD_CStream* cstream; + int compression_level; /* compression level */ + ZSTD_outBuffer out_buffer; + int state; /* state flags */ +#define LSTATE_INIT_DECODE 0x01 +#define LSTATE_INIT_ENCODE 0x02 + + TIFFVGetMethod vgetparent; /* super-class method */ + TIFFVSetMethod vsetparent; /* super-class method */ +} ZSTDState; + +#define LState(tif) ((ZSTDState*) (tif)->tif_data) +#define DecoderState(tif) LState(tif) +#define EncoderState(tif) LState(tif) + +static int ZSTDEncode(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s); +static int ZSTDDecode(TIFF* tif, uint8* op, tmsize_t occ, uint16 s); + +static int +ZSTDFixupTags(TIFF* tif) +{ + (void) tif; + return 1; +} + +static int +ZSTDSetupDecode(TIFF* tif) +{ + ZSTDState* sp = DecoderState(tif); + + assert(sp != NULL); + + /* if we were last encoding, terminate this mode */ + if (sp->state & LSTATE_INIT_ENCODE) { + ZSTD_freeCStream(sp->cstream); + sp->cstream = NULL; + sp->state = 0; + } + + sp->state |= LSTATE_INIT_DECODE; + return 1; +} + +/* +* Setup state for decoding a strip. +*/ +static int +ZSTDPreDecode(TIFF* tif, uint16 s) +{ + static const char module[] = "ZSTDPreDecode"; + ZSTDState* sp = DecoderState(tif); + size_t zstd_ret; + + (void) s; + assert(sp != NULL); + + if( (sp->state & LSTATE_INIT_DECODE) == 0 ) + tif->tif_setupdecode(tif); + + if( sp->dstream ) + { + ZSTD_freeDStream(sp->dstream); + sp->dstream = NULL; + } + + sp->dstream = ZSTD_createDStream(); + if( sp->dstream == NULL ) { + TIFFErrorExt(tif->tif_clientdata, module, + "Cannot allocate decompression stream"); + return 0; + } + zstd_ret = ZSTD_initDStream(sp->dstream); + if( ZSTD_isError(zstd_ret) ) { + TIFFErrorExt(tif->tif_clientdata, module, + "Error in ZSTD_initDStream(): %s", + ZSTD_getErrorName(zstd_ret)); + return 0; + } + + return 1; +} + +static int +ZSTDDecode(TIFF* tif, uint8* op, tmsize_t occ, uint16 s) +{ + static const char module[] = "ZSTDDecode"; + ZSTDState* sp = DecoderState(tif); + ZSTD_inBuffer in_buffer; + ZSTD_outBuffer out_buffer; + size_t zstd_ret; + + (void) s; + assert(sp != NULL); + assert(sp->state == LSTATE_INIT_DECODE); + + in_buffer.src = tif->tif_rawcp; + in_buffer.size = (size_t) tif->tif_rawcc; + in_buffer.pos = 0; + + out_buffer.dst = op; + out_buffer.size = (size_t) occ; + out_buffer.pos = 0; + + do { + zstd_ret = ZSTD_decompressStream(sp->dstream, &out_buffer, + &in_buffer); + if( ZSTD_isError(zstd_ret) ) { + TIFFErrorExt(tif->tif_clientdata, module, + "Error in ZSTD_decompressStream(): %s", + ZSTD_getErrorName(zstd_ret)); + return 0; + } + } while( zstd_ret != 0 && + in_buffer.pos < in_buffer.size && + out_buffer.pos < out_buffer.size ); + + if (out_buffer.pos < (size_t)occ) { + TIFFErrorExt(tif->tif_clientdata, module, + "Not enough data at scanline %lu (short %lu bytes)", + (unsigned long) tif->tif_row, + (unsigned long) (size_t)occ - out_buffer.pos); + return 0; + } + + tif->tif_rawcp += in_buffer.pos; + tif->tif_rawcc -= in_buffer.pos; + + return 1; +} + +static int +ZSTDSetupEncode(TIFF* tif) +{ + ZSTDState* sp = EncoderState(tif); + + assert(sp != NULL); + if (sp->state & LSTATE_INIT_DECODE) { + ZSTD_freeDStream(sp->dstream); + sp->dstream = NULL; + sp->state = 0; + } + + sp->state |= LSTATE_INIT_ENCODE; + return 1; +} + +/* +* Reset encoding state at the start of a strip. +*/ +static int +ZSTDPreEncode(TIFF* tif, uint16 s) +{ + static const char module[] = "ZSTDPreEncode"; + ZSTDState *sp = EncoderState(tif); + size_t zstd_ret; + + (void) s; + assert(sp != NULL); + if( sp->state != LSTATE_INIT_ENCODE ) + tif->tif_setupencode(tif); + + if (sp->cstream) { + ZSTD_freeCStream(sp->cstream); + sp->cstream = NULL; + } + sp->cstream = ZSTD_createCStream(); + if( sp->cstream == NULL ) { + TIFFErrorExt(tif->tif_clientdata, module, + "Cannot allocate compression stream"); + return 0; + } + + zstd_ret = ZSTD_initCStream(sp->cstream, sp->compression_level); + if( ZSTD_isError(zstd_ret) ) { + TIFFErrorExt(tif->tif_clientdata, module, + "Error in ZSTD_initCStream(): %s", + ZSTD_getErrorName(zstd_ret)); + return 0; + } + + sp->out_buffer.dst = tif->tif_rawdata; + sp->out_buffer.size = (size_t)tif->tif_rawdatasize; + sp->out_buffer.pos = 0; + + return 1; +} + +/* +* Encode a chunk of pixels. +*/ +static int +ZSTDEncode(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s) +{ + static const char module[] = "ZSTDEncode"; + ZSTDState *sp = EncoderState(tif); + ZSTD_inBuffer in_buffer; + size_t zstd_ret; + + assert(sp != NULL); + assert(sp->state == LSTATE_INIT_ENCODE); + + (void) s; + + in_buffer.src = bp; + in_buffer.size = (size_t)cc; + in_buffer.pos = 0; + + do { + zstd_ret = ZSTD_compressStream(sp->cstream, &sp->out_buffer, + &in_buffer); + if( ZSTD_isError(zstd_ret) ) { + TIFFErrorExt(tif->tif_clientdata, module, + "Error in ZSTD_compressStream(): %s", + ZSTD_getErrorName(zstd_ret)); + return 0; + } + if( sp->out_buffer.pos == sp->out_buffer.size ) { + tif->tif_rawcc = tif->tif_rawdatasize; + TIFFFlushData1(tif); + sp->out_buffer.dst = tif->tif_rawcp; + sp->out_buffer.pos = 0; + } + } while( in_buffer.pos < in_buffer.size ); + + return 1; +} + +/* +* Finish off an encoded strip by flushing it. +*/ +static int +ZSTDPostEncode(TIFF* tif) +{ + static const char module[] = "ZSTDPostEncode"; + ZSTDState *sp = EncoderState(tif); + size_t zstd_ret; + + do { + zstd_ret = ZSTD_endStream(sp->cstream, &sp->out_buffer); + if( ZSTD_isError(zstd_ret) ) { + TIFFErrorExt(tif->tif_clientdata, module, + "Error in ZSTD_endStream(): %s", + ZSTD_getErrorName(zstd_ret)); + return 0; + } + if( sp->out_buffer.pos > 0 ) { + tif->tif_rawcc = sp->out_buffer.pos; + TIFFFlushData1(tif); + sp->out_buffer.dst = tif->tif_rawcp; + sp->out_buffer.pos = 0; + } + } while (zstd_ret != 0); + return 1; +} + +static void +ZSTDCleanup(TIFF* tif) +{ + ZSTDState* sp = LState(tif); + + assert(sp != 0); + + (void)TIFFPredictorCleanup(tif); + + tif->tif_tagmethods.vgetfield = sp->vgetparent; + tif->tif_tagmethods.vsetfield = sp->vsetparent; + + if (sp->dstream) { + ZSTD_freeDStream(sp->dstream); + sp->dstream = NULL; + } + if (sp->cstream) { + ZSTD_freeCStream(sp->cstream); + sp->cstream = NULL; + } + _TIFFfree(sp); + tif->tif_data = NULL; + + _TIFFSetDefaultCompressionState(tif); +} + +static int +ZSTDVSetField(TIFF* tif, uint32 tag, va_list ap) +{ + static const char module[] = "ZSTDVSetField"; + ZSTDState* sp = LState(tif); + + switch (tag) { + case TIFFTAG_ZSTD_LEVEL: + sp->compression_level = (int) va_arg(ap, int); + if( sp->compression_level <= 0 || + sp->compression_level > ZSTD_maxCLevel() ) + { + TIFFWarningExt(tif->tif_clientdata, module, + "ZSTD_LEVEL should be between 1 and %d", + ZSTD_maxCLevel()); + } + return 1; + default: + return (*sp->vsetparent)(tif, tag, ap); + } + /*NOTREACHED*/ +} + +static int +ZSTDVGetField(TIFF* tif, uint32 tag, va_list ap) +{ + ZSTDState* sp = LState(tif); + + switch (tag) { + case TIFFTAG_ZSTD_LEVEL: + *va_arg(ap, int*) = sp->compression_level; + break; + default: + return (*sp->vgetparent)(tif, tag, ap); + } + return 1; +} + +static const TIFFField ZSTDFields[] = { + { TIFFTAG_ZSTD_LEVEL, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT, + TIFF_SETGET_UNDEFINED, + FIELD_PSEUDO, TRUE, FALSE, "ZSTD compression_level", NULL }, +}; + +int +TIFFInitZSTD(TIFF* tif, int scheme) +{ + static const char module[] = "TIFFInitZSTD"; + ZSTDState* sp; + + assert( scheme == COMPRESSION_ZSTD ); + + /* + * Merge codec-specific tag information. + */ + if (!_TIFFMergeFields(tif, ZSTDFields, TIFFArrayCount(ZSTDFields))) { + TIFFErrorExt(tif->tif_clientdata, module, + "Merging ZSTD codec-specific tags failed"); + return 0; + } + + /* + * Allocate state block so tag methods have storage to record values. + */ + tif->tif_data = (uint8*) _TIFFmalloc(sizeof(ZSTDState)); + if (tif->tif_data == NULL) + goto bad; + sp = LState(tif); + + /* + * Override parent get/set field methods. + */ + sp->vgetparent = tif->tif_tagmethods.vgetfield; + tif->tif_tagmethods.vgetfield = ZSTDVGetField; /* hook for codec tags */ + sp->vsetparent = tif->tif_tagmethods.vsetfield; + tif->tif_tagmethods.vsetfield = ZSTDVSetField; /* hook for codec tags */ + + /* Default values for codec-specific fields */ + sp->compression_level = 9; /* default comp. level */ + sp->state = 0; + sp->dstream = 0; + sp->cstream = 0; + sp->out_buffer.dst = NULL; + sp->out_buffer.size = 0; + sp->out_buffer.pos = 0; + + /* + * Install codec methods. + */ + tif->tif_fixuptags = ZSTDFixupTags; + tif->tif_setupdecode = ZSTDSetupDecode; + tif->tif_predecode = ZSTDPreDecode; + tif->tif_decoderow = ZSTDDecode; + tif->tif_decodestrip = ZSTDDecode; + tif->tif_decodetile = ZSTDDecode; + tif->tif_setupencode = ZSTDSetupEncode; + tif->tif_preencode = ZSTDPreEncode; + tif->tif_postencode = ZSTDPostEncode; + tif->tif_encoderow = ZSTDEncode; + tif->tif_encodestrip = ZSTDEncode; + tif->tif_encodetile = ZSTDEncode; + tif->tif_cleanup = ZSTDCleanup; + /* + * Setup predictor setup. + */ + (void) TIFFPredictorInit(tif); + return 1; +bad: + TIFFErrorExt(tif->tif_clientdata, module, + "No space for ZSTD state block"); + return 0; +} +#endif /* ZSTD_SUPPORT */ + +/* vim: set ts=8 sts=8 sw=8 noet: */ diff --git a/external/tiff-4.0.9/libtiff/tiff.h b/external/tiff-4.1.0/libtiff/tiff.h similarity index 96% rename from external/tiff-4.0.9/libtiff/tiff.h rename to external/tiff-4.1.0/libtiff/tiff.h index fb39634c..5b0a0c90 100644 --- a/external/tiff-4.0.9/libtiff/tiff.h +++ b/external/tiff-4.1.0/libtiff/tiff.h @@ -1,5 +1,3 @@ -/* $Id: tiff.h,v 1.70 2016-01-23 21:20:34 erouault Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. @@ -189,7 +187,11 @@ typedef enum { #define COMPRESSION_SGILOG 34676 /* SGI Log Luminance RLE */ #define COMPRESSION_SGILOG24 34677 /* SGI Log 24-bit packed */ #define COMPRESSION_JP2000 34712 /* Leadtools JPEG2000 */ +#define COMPRESSION_LERC 34887 /* ESRI Lerc codec: https://github.com/Esri/lerc */ +/* compression codes 34887-34889 are reserved for ESRI */ #define COMPRESSION_LZMA 34925 /* LZMA2 */ +#define COMPRESSION_ZSTD 50000 /* ZSTD: WARNING not registered in Adobe-maintained registry */ +#define COMPRESSION_WEBP 50001 /* WEBP: WARNING not registered in Adobe-maintained registry */ #define TIFFTAG_PHOTOMETRIC 262 /* photometric interpretation */ #define PHOTOMETRIC_MINISWHITE 0 /* min value is white */ #define PHOTOMETRIC_MINISBLACK 1 /* min value is black */ @@ -450,6 +452,8 @@ typedef enum { /* tag 34929 is a private tag registered to FedEx */ #define TIFFTAG_FEDEX_EDR 34929 /* unknown use */ #define TIFFTAG_INTEROPERABILITYIFD 40965 /* Pointer to Interoperability private directory */ +/* tags 50674 to 50677 are reserved for ESRI */ +#define TIFFTAG_LERC_PARAMETERS 50674 /* Stores LERC version and additional compression method */ /* Adobe Digital Negative (DNG) format tags */ #define TIFFTAG_DNGVERSION 50706 /* &DNG version number */ #define TIFFTAG_DNGBACKWARDVERSION 50707 /* &DNG compatibility version */ @@ -603,6 +607,16 @@ typedef enum { #define TIFFTAG_PERSAMPLE 65563 /* interface for per sample tags */ #define PERSAMPLE_MERGED 0 /* present as a single value */ #define PERSAMPLE_MULTI 1 /* present as multiple values */ +#define TIFFTAG_ZSTD_LEVEL 65564 /* ZSTD compression level */ +#define TIFFTAG_LERC_VERSION 65565 /* LERC version */ +#define LERC_VERSION_2_4 4 +#define TIFFTAG_LERC_ADD_COMPRESSION 65566 /* LERC additional compression */ +#define LERC_ADD_COMPRESSION_NONE 0 +#define LERC_ADD_COMPRESSION_DEFLATE 1 +#define LERC_ADD_COMPRESSION_ZSTD 2 +#define TIFFTAG_LERC_MAXZERROR 65567 /* LERC maximum error */ +#define TIFFTAG_WEBP_LEVEL 65568 /* WebP compression level: WARNING not registered in Adobe-maintained registry */ +#define TIFFTAG_WEBP_LOSSLESS 65569 /* WebP lossless/lossy : WARNING not registered in Adobe-maintained registry */ /* * EXIF tags diff --git a/external/tiff-4.0.9/libtiff/tiffconf.h.cmake.in b/external/tiff-4.1.0/libtiff/tiffconf.h.cmake.in similarity index 93% rename from external/tiff-4.0.9/libtiff/tiffconf.h.cmake.in rename to external/tiff-4.1.0/libtiff/tiffconf.h.cmake.in index de8a807e..59542f1e 100644 --- a/external/tiff-4.0.9/libtiff/tiffconf.h.cmake.in +++ b/external/tiff-4.1.0/libtiff/tiffconf.h.cmake.in @@ -40,15 +40,6 @@ /* Pointer difference type */ #define TIFF_PTRDIFF_T @TIFF_PTRDIFF_T@ -/* Define to 1 if the system has the type `int16'. */ -#cmakedefine HAVE_INT16 1 - -/* Define to 1 if the system has the type `int32'. */ -#cmakedefine HAVE_INT32 1 - -/* Define to 1 if the system has the type `int8'. */ -#cmakedefine HAVE_INT8 1 - /* Compatibility stuff. */ /* Define as 0 or 1 according to the floating point format suported by the diff --git a/external/tiff-4.0.9/libtiff/tiffconf.h.in b/external/tiff-4.1.0/libtiff/tiffconf.h.in similarity index 93% rename from external/tiff-4.0.9/libtiff/tiffconf.h.in rename to external/tiff-4.1.0/libtiff/tiffconf.h.in index 6da9c5a6..5de30c9b 100644 --- a/external/tiff-4.0.9/libtiff/tiffconf.h.in +++ b/external/tiff-4.1.0/libtiff/tiffconf.h.in @@ -37,15 +37,6 @@ /* Pointer difference type */ #undef TIFF_PTRDIFF_T -/* Define to 1 if the system has the type `int16'. */ -#undef HAVE_INT16 - -/* Define to 1 if the system has the type `int32'. */ -#undef HAVE_INT32 - -/* Define to 1 if the system has the type `int8'. */ -#undef HAVE_INT8 - /* Compatibility stuff. */ /* Define as 0 or 1 according to the floating point format suported by the diff --git a/external/tiff-4.0.9/libtiff/tiffconf.vc.h b/external/tiff-4.1.0/libtiff/tiffconf.vc.h similarity index 93% rename from external/tiff-4.0.9/libtiff/tiffconf.vc.h rename to external/tiff-4.1.0/libtiff/tiffconf.vc.h index c8c6c656..fb37a755 100644 --- a/external/tiff-4.0.9/libtiff/tiffconf.vc.h +++ b/external/tiff-4.1.0/libtiff/tiffconf.vc.h @@ -7,15 +7,6 @@ #ifndef _TIFFCONF_ #define _TIFFCONF_ -/* Define to 1 if the system has the type `int16'. */ -/* #undef HAVE_INT16 */ - -/* Define to 1 if the system has the type `int32'. */ -/* #undef HAVE_INT32 */ - -/* Define to 1 if the system has the type `int8'. */ -/* #undef HAVE_INT8 */ - /* The size of a `int', as computed by sizeof. */ #define SIZEOF_INT 4 diff --git a/external/tiff-4.0.9/libtiff/tiffconf.wince.h b/external/tiff-4.1.0/libtiff/tiffconf.wince.h similarity index 90% rename from external/tiff-4.0.9/libtiff/tiffconf.wince.h rename to external/tiff-4.1.0/libtiff/tiffconf.wince.h index 2ef3958a..013b0960 100644 --- a/external/tiff-4.0.9/libtiff/tiffconf.wince.h +++ b/external/tiff-4.1.0/libtiff/tiffconf.wince.h @@ -1,5 +1,3 @@ -/* $Id: tiffconf.wince.h,v 1.3 2010-03-10 18:56:49 bfriesen Exp $ */ - /* * Windows CE platform tiffconf.wince.h * Created by Mateusz Loskot (mateusz@loskot.net) @@ -27,15 +25,6 @@ #ifndef _TIFFCONF_ #define _TIFFCONF_ -/* Define to 1 if the system has the type `int16'. */ -/* #undef HAVE_INT16 */ - -/* Define to 1 if the system has the type `int32'. */ -/* #undef HAVE_INT32 */ - -/* Define to 1 if the system has the type `int8'. */ -/* #undef HAVE_INT8 */ - /* The size of a `int', as computed by sizeof. */ #define SIZEOF_INT 4 diff --git a/external/tiff-4.0.9/libtiff/tiffio.h b/external/tiff-4.1.0/libtiff/tiffio.h similarity index 97% rename from external/tiff-4.0.9/libtiff/tiffio.h rename to external/tiff-4.1.0/libtiff/tiffio.h index ef61b5c0..198481d5 100644 --- a/external/tiff-4.0.9/libtiff/tiffio.h +++ b/external/tiff-4.1.0/libtiff/tiffio.h @@ -1,5 +1,3 @@ -/* $Id: tiffio.h,v 1.94 2017-01-11 19:02:49 erouault Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. @@ -52,7 +50,7 @@ typedef struct tiff TIFF; * promoted type (i.e. one of int, unsigned int, pointer, * or double) and because we defined pseudo-tags that are * outside the range of legal Aldus-assigned tags. - * NB: tsize_t is int32 and not uint32 because some functions + * NB: tsize_t is signed and not unsigned because some functions * return -1. * NB: toff_t is not off_t for many reasons; TIFFs max out at * 32-bit file offsets, and BigTIFF maxes out at 64-bit @@ -413,6 +411,8 @@ extern int TIFFWriteDirectory(TIFF *); extern int TIFFWriteCustomDirectory(TIFF *, uint64 *); extern int TIFFCheckpointDirectory(TIFF *); extern int TIFFRewriteDirectory(TIFF *); +extern int TIFFDeferStrileArrayWriting(TIFF *); +extern int TIFFForceStrileArrayWriting(TIFF* ); #if defined(c_plusplus) || defined(__cplusplus) extern void TIFFPrintDirectory(TIFF*, FILE*, long = 0); @@ -470,6 +470,9 @@ extern tmsize_t TIFFReadEncodedStrip(TIFF* tif, uint32 strip, void* buf, tmsize_ extern tmsize_t TIFFReadRawStrip(TIFF* tif, uint32 strip, void* buf, tmsize_t size); extern tmsize_t TIFFReadEncodedTile(TIFF* tif, uint32 tile, void* buf, tmsize_t size); extern tmsize_t TIFFReadRawTile(TIFF* tif, uint32 tile, void* buf, tmsize_t size); +extern int TIFFReadFromUserBuffer(TIFF* tif, uint32 strile, + void* inbuf, tmsize_t insize, + void* outbuf, tmsize_t outsize); extern tmsize_t TIFFWriteEncodedStrip(TIFF* tif, uint32 strip, void* data, tmsize_t cc); extern tmsize_t TIFFWriteRawStrip(TIFF* tif, uint32 strip, void* data, tmsize_t cc); extern tmsize_t TIFFWriteEncodedTile(TIFF* tif, uint32 tile, void* data, tmsize_t cc); @@ -490,6 +493,11 @@ extern void TIFFSwabArrayOfDouble(double* dp, tmsize_t n); extern void TIFFReverseBits(uint8* cp, tmsize_t n); extern const unsigned char* TIFFGetBitRevTable(int); +extern uint64 TIFFGetStrileOffset(TIFF *tif, uint32 strile); +extern uint64 TIFFGetStrileByteCount(TIFF *tif, uint32 strile); +extern uint64 TIFFGetStrileOffsetWithErr(TIFF *tif, uint32 strile, int *pbErr); +extern uint64 TIFFGetStrileByteCountWithErr(TIFF *tif, uint32 strile, int *pbErr); + #ifdef LOGLUV_PUBLIC #define U_NEU 0.210526316 #define V_NEU 0.473684211 diff --git a/external/tiff-4.0.9/libtiff/tiffio.hxx b/external/tiff-4.1.0/libtiff/tiffio.hxx similarity index 96% rename from external/tiff-4.0.9/libtiff/tiffio.hxx rename to external/tiff-4.1.0/libtiff/tiffio.hxx index ed994f11..df2cbbce 100644 --- a/external/tiff-4.0.9/libtiff/tiffio.hxx +++ b/external/tiff-4.1.0/libtiff/tiffio.hxx @@ -1,5 +1,3 @@ -/* $Id: tiffio.hxx,v 1.3 2010-06-08 18:55:15 bfriesen Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. @@ -33,6 +31,7 @@ #include #include "tiff.h" +#include "tiffio.h" extern TIFF* TIFFStreamOpen(const char*, std::ostream *); extern TIFF* TIFFStreamOpen(const char*, std::istream *); diff --git a/external/tiff-4.0.9/libtiff/tiffiop.h b/external/tiff-4.1.0/libtiff/tiffiop.h similarity index 93% rename from external/tiff-4.0.9/libtiff/tiffiop.h rename to external/tiff-4.1.0/libtiff/tiffiop.h index daa291c0..45a79323 100644 --- a/external/tiff-4.0.9/libtiff/tiffiop.h +++ b/external/tiff-4.1.0/libtiff/tiffiop.h @@ -1,5 +1,3 @@ -/* $Id: tiffiop.h,v 1.95 2017-09-07 14:02:52 erouault Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. @@ -72,12 +70,26 @@ extern int snprintf(char* str, size_t size, const char* format, ...); #endif #define streq(a,b) (strcmp(a,b) == 0) +#define strneq(a,b,n) (strncmp(a,b,n) == 0) #ifndef TRUE #define TRUE 1 #define FALSE 0 #endif +#define TIFF_SIZE_T_MAX ((size_t) ~ ((size_t)0)) +#define TIFF_TMSIZE_T_MAX (tmsize_t)(TIFF_SIZE_T_MAX >> 1) + +/* + * Largest 32-bit unsigned integer value. + */ +#define TIFF_UINT32_MAX 0xFFFFFFFFU + +/* + * Largest 64-bit unsigned integer value. + */ +#define TIFF_UINT64_MAX (((uint64)(TIFF_UINT32_MAX)) << 32 | TIFF_UINT32_MAX) + typedef struct client_info { struct client_info *next; void *data; @@ -128,6 +140,9 @@ struct tiff { #define TIFF_DIRTYSTRIP 0x200000U /* stripoffsets/stripbytecount dirty*/ #define TIFF_PERSAMPLE 0x400000U /* get/set per sample tags as arrays */ #define TIFF_BUFFERMMAP 0x800000U /* read buffer (tif_rawdata) points into mmap() memory */ + #define TIFF_DEFERSTRILELOAD 0x1000000U /* defer strip/tile offset/bytecount array loading. */ + #define TIFF_LAZYSTRILELOAD 0x2000000U /* lazy/ondemand loading of strip/tile offset/bytecount values. Only used if TIFF_DEFERSTRILELOAD is set and in read-only mode */ + #define TIFF_CHOPPEDUPARRAYS 0x4000000U /* set when allocChoppedUpStripArrays() has modified strip array */ uint64 tif_diroff; /* file offset of current directory */ uint64 tif_nextdiroff; /* file offset of following directory */ uint64* tif_dirlist; /* list of offsets to already seen directories to prevent IFD looping */ @@ -259,7 +274,7 @@ struct tiff { #define TIFFhowmany8_64(x) (((x)&0x07)?((uint64)(x)>>3)+1:(uint64)(x)>>3) #define TIFFroundup_64(x, y) (TIFFhowmany_64(x,y)*(y)) -/* Safe multiply which returns zero if there is an integer overflow */ +/* Safe multiply which returns zero if there is an *unsigned* integer overflow. This macro is not safe for *signed* integer types */ #define TIFFSafeMultiply(t,v,m) ((((t)(m) != (t)0) && (((t)(((v)*(m))/(m))) == (t)(v))) ? (t)((v)*(m)) : (t)0) #define TIFFmax(A,B) ((A)>(B)?(A):(B)) @@ -314,11 +329,15 @@ typedef size_t TIFFIOSize_t; #define _TIFF_off_t off_t #endif -#if __clang_major__ >= 4 || (__clang_major__ == 3 && __clang_minor__ >= 8) +#if defined(__has_attribute) && defined(__clang__) +#if __has_attribute(no_sanitize) #define TIFF_NOSANITIZE_UNSIGNED_INT_OVERFLOW __attribute__((no_sanitize("unsigned-integer-overflow"))) #else #define TIFF_NOSANITIZE_UNSIGNED_INT_OVERFLOW #endif +#else +#define TIFF_NOSANITIZE_UNSIGNED_INT_OVERFLOW +#endif #if defined(__cplusplus) @@ -365,12 +384,16 @@ extern TIFFErrorHandlerExt _TIFFerrorHandlerExt; extern uint32 _TIFFMultiply32(TIFF*, uint32, uint32, const char*); extern uint64 _TIFFMultiply64(TIFF*, uint64, uint64, const char*); +extern tmsize_t _TIFFMultiplySSize(TIFF*, tmsize_t, tmsize_t, const char*); +extern tmsize_t _TIFFCastUInt64ToSSize(TIFF*, uint64, const char*); extern void* _TIFFCheckMalloc(TIFF*, tmsize_t, tmsize_t, const char*); extern void* _TIFFCheckRealloc(TIFF*, void*, tmsize_t, tmsize_t, const char*); extern double _TIFFUInt64ToDouble(uint64); extern float _TIFFUInt64ToFloat(uint64); +extern float _TIFFClampDoubleToFloat(double); + extern tmsize_t _TIFFReadEncodedStripAndAllocBuffer(TIFF* tif, uint32 strip, void **buf, tmsize_t bufsizetoalloc, @@ -424,6 +447,12 @@ extern int TIFFInitSGILog(TIFF*, int); #ifdef LZMA_SUPPORT extern int TIFFInitLZMA(TIFF*, int); #endif +#ifdef ZSTD_SUPPORT +extern int TIFFInitZSTD(TIFF*, int); +#endif +#ifdef WEBP_SUPPORT +extern int TIFFInitWebP(TIFF*, int); +#endif #ifdef VMS extern const TIFFCodec _TIFFBuiltinCODECS[]; #else diff --git a/external/tiff-4.0.9/libtiff/tiffvers.h b/external/tiff-4.1.0/libtiff/tiffvers.h similarity index 76% rename from external/tiff-4.0.9/libtiff/tiffvers.h rename to external/tiff-4.1.0/libtiff/tiffvers.h index 7c415740..aa3f613e 100644 --- a/external/tiff-4.0.9/libtiff/tiffvers.h +++ b/external/tiff-4.1.0/libtiff/tiffvers.h @@ -1,4 +1,4 @@ -#define TIFFLIB_VERSION_STR "LIBTIFF, Version 4.0.9\nCopyright (c) 1988-1996 Sam Leffler\nCopyright (c) 1991-1996 Silicon Graphics, Inc." +#define TIFFLIB_VERSION_STR "LIBTIFF, Version 4.1.0\nCopyright (c) 1988-1996 Sam Leffler\nCopyright (c) 1991-1996 Silicon Graphics, Inc." /* * This define can be used in code that requires * compilation-related definitions specific to a @@ -6,4 +6,4 @@ * version checking should be done based on the * string returned by TIFFGetVersion. */ -#define TIFFLIB_VERSION 20171118 +#define TIFFLIB_VERSION 20191103 diff --git a/external/tiff-4.0.9/libtiff/uvcode.h b/external/tiff-4.1.0/libtiff/uvcode.h similarity index 100% rename from external/tiff-4.0.9/libtiff/uvcode.h rename to external/tiff-4.1.0/libtiff/uvcode.h diff --git a/external/tiff-4.0.9/m4/acinclude.m4 b/external/tiff-4.1.0/m4/acinclude.m4 similarity index 100% rename from external/tiff-4.0.9/m4/acinclude.m4 rename to external/tiff-4.1.0/m4/acinclude.m4 diff --git a/external/tiff-4.0.9/m4/libtool.m4 b/external/tiff-4.1.0/m4/libtool.m4 similarity index 99% rename from external/tiff-4.0.9/m4/libtool.m4 rename to external/tiff-4.1.0/m4/libtool.m4 index 10ab2844..a3bc337b 100644 --- a/external/tiff-4.0.9/m4/libtool.m4 +++ b/external/tiff-4.1.0/m4/libtool.m4 @@ -2887,18 +2887,6 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) dynamic_linker='GNU/Linux ld.so' ;; -netbsdelf*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='NetBSD ld.elf_so' - ;; - netbsd*) version_type=sunos need_lib_prefix=no @@ -3558,7 +3546,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; -netbsd* | netbsdelf*-gnu) +netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else @@ -4436,7 +4424,7 @@ m4_if([$1], [CXX], [ ;; esac ;; - netbsd* | netbsdelf*-gnu) + netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise @@ -4948,9 +4936,6 @@ m4_if([$1], [CXX], [ ;; esac ;; - linux* | k*bsd*-gnu | gnu*) - _LT_TAGVAR(link_all_deplibs, $1)=no - ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; @@ -5013,9 +4998,6 @@ dnl Note also adjust exclude_expsyms for C++ above. openbsd* | bitrig*) with_gnu_ld=no ;; - linux* | k*bsd*-gnu | gnu*) - _LT_TAGVAR(link_all_deplibs, $1)=no - ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes @@ -5270,7 +5252,7 @@ _LT_EOF fi ;; - netbsd* | netbsdelf*-gnu) + netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= @@ -5791,7 +5773,6 @@ _LT_EOF if test yes = "$lt_cv_irix_exported_symbol"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi - _LT_TAGVAR(link_all_deplibs, $1)=no else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' @@ -5813,7 +5794,7 @@ _LT_EOF esac ;; - netbsd* | netbsdelf*-gnu) + netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else diff --git a/external/tiff-4.0.9/m4/ltoptions.m4 b/external/tiff-4.1.0/m4/ltoptions.m4 similarity index 100% rename from external/tiff-4.0.9/m4/ltoptions.m4 rename to external/tiff-4.1.0/m4/ltoptions.m4 diff --git a/external/tiff-4.0.9/m4/ltsugar.m4 b/external/tiff-4.1.0/m4/ltsugar.m4 similarity index 100% rename from external/tiff-4.0.9/m4/ltsugar.m4 rename to external/tiff-4.1.0/m4/ltsugar.m4 diff --git a/external/tiff-4.0.9/m4/ltversion.m4 b/external/tiff-4.1.0/m4/ltversion.m4 similarity index 100% rename from external/tiff-4.0.9/m4/ltversion.m4 rename to external/tiff-4.1.0/m4/ltversion.m4 diff --git a/external/tiff-4.0.9/m4/lt~obsolete.m4 b/external/tiff-4.1.0/m4/lt~obsolete.m4 similarity index 100% rename from external/tiff-4.0.9/m4/lt~obsolete.m4 rename to external/tiff-4.1.0/m4/lt~obsolete.m4 diff --git a/external/tiff-4.0.9/man/CMakeLists.txt b/external/tiff-4.1.0/man/CMakeLists.txt similarity index 100% rename from external/tiff-4.0.9/man/CMakeLists.txt rename to external/tiff-4.1.0/man/CMakeLists.txt diff --git a/external/tiff-4.0.9/man/Makefile.am b/external/tiff-4.1.0/man/Makefile.am similarity index 100% rename from external/tiff-4.0.9/man/Makefile.am rename to external/tiff-4.1.0/man/Makefile.am diff --git a/external/tiff-4.0.9/man/Makefile.in b/external/tiff-4.1.0/man/Makefile.in similarity index 98% rename from external/tiff-4.0.9/man/Makefile.in rename to external/tiff-4.1.0/man/Makefile.in index 212905b6..f5c9bf0c 100644 --- a/external/tiff-4.0.9/man/Makefile.in +++ b/external/tiff-4.1.0/man/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -121,7 +121,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs +mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/libtiff/tif_config.h \ $(top_builddir)/libtiff/tiffconf.h CONFIG_CLEAN_FILES = @@ -179,7 +179,7 @@ NROFF = nroff MANS = $(dist_man1_MANS) $(dist_man3_MANS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(dist_man1_MANS) $(dist_man3_MANS) \ - $(srcdir)/Makefile.in $(top_srcdir)/config/mkinstalldirs + $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ @@ -419,8 +419,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -526,7 +526,10 @@ ctags CTAGS: cscope cscopelist: -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ diff --git a/external/tiff-4.0.9/man/TIFFClose.3tiff b/external/tiff-4.1.0/man/TIFFClose.3tiff similarity index 96% rename from external/tiff-4.0.9/man/TIFFClose.3tiff rename to external/tiff-4.1.0/man/TIFFClose.3tiff index a6a7d82a..fc64ccc3 100644 --- a/external/tiff-4.0.9/man/TIFFClose.3tiff +++ b/external/tiff-4.1.0/man/TIFFClose.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFClose.3tiff,v 1.4 2016-09-25 20:05:49 bfriesen Exp $ .\" .\" Copyright (c) 1988-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/TIFFDataWidth.3tiff b/external/tiff-4.1.0/man/TIFFDataWidth.3tiff similarity index 96% rename from external/tiff-4.0.9/man/TIFFDataWidth.3tiff rename to external/tiff-4.1.0/man/TIFFDataWidth.3tiff index af67777d..efcd39d7 100644 --- a/external/tiff-4.0.9/man/TIFFDataWidth.3tiff +++ b/external/tiff-4.1.0/man/TIFFDataWidth.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFDataWidth.3tiff,v 1.4 2016-09-25 20:05:49 bfriesen Exp $ .\" .\" Copyright (c) 2002, Andrey Kiselev .\" diff --git a/external/tiff-4.0.9/man/TIFFError.3tiff b/external/tiff-4.1.0/man/TIFFError.3tiff similarity index 97% rename from external/tiff-4.0.9/man/TIFFError.3tiff rename to external/tiff-4.1.0/man/TIFFError.3tiff index 6924c7f4..5d0c2196 100644 --- a/external/tiff-4.0.9/man/TIFFError.3tiff +++ b/external/tiff-4.1.0/man/TIFFError.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFError.3tiff,v 1.3 2016-09-25 20:05:49 bfriesen Exp $ .\" .\" Copyright (c) 1988-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/TIFFFieldDataType.3tiff b/external/tiff-4.1.0/man/TIFFFieldDataType.3tiff similarity index 96% rename from external/tiff-4.0.9/man/TIFFFieldDataType.3tiff rename to external/tiff-4.1.0/man/TIFFFieldDataType.3tiff index 4fb1e2cf..6049f591 100644 --- a/external/tiff-4.0.9/man/TIFFFieldDataType.3tiff +++ b/external/tiff-4.1.0/man/TIFFFieldDataType.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFFieldDataType.3tiff,v 1.2 2016-09-25 20:05:49 bfriesen Exp $ .\" .\" Copyright (c) 2012, Tom Lane .\" diff --git a/external/tiff-4.0.9/man/TIFFFieldName.3tiff b/external/tiff-4.1.0/man/TIFFFieldName.3tiff similarity index 96% rename from external/tiff-4.0.9/man/TIFFFieldName.3tiff rename to external/tiff-4.1.0/man/TIFFFieldName.3tiff index 0f49c337..47d9ad84 100644 --- a/external/tiff-4.0.9/man/TIFFFieldName.3tiff +++ b/external/tiff-4.1.0/man/TIFFFieldName.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFFieldName.3tiff,v 1.2 2016-09-25 20:05:49 bfriesen Exp $ .\" .\" Copyright (c) 2012, Tom Lane .\" diff --git a/external/tiff-4.0.9/man/TIFFFieldPassCount.3tiff b/external/tiff-4.1.0/man/TIFFFieldPassCount.3tiff similarity index 96% rename from external/tiff-4.0.9/man/TIFFFieldPassCount.3tiff rename to external/tiff-4.1.0/man/TIFFFieldPassCount.3tiff index 07324f80..ff14c520 100644 --- a/external/tiff-4.0.9/man/TIFFFieldPassCount.3tiff +++ b/external/tiff-4.1.0/man/TIFFFieldPassCount.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFFieldPassCount.3tiff,v 1.2 2016-09-25 20:05:49 bfriesen Exp $ .\" .\" Copyright (c) 2012, Tom Lane .\" diff --git a/external/tiff-4.0.9/man/TIFFFieldReadCount.3tiff b/external/tiff-4.1.0/man/TIFFFieldReadCount.3tiff similarity index 97% rename from external/tiff-4.0.9/man/TIFFFieldReadCount.3tiff rename to external/tiff-4.1.0/man/TIFFFieldReadCount.3tiff index 88d67fd1..b6a4546c 100644 --- a/external/tiff-4.0.9/man/TIFFFieldReadCount.3tiff +++ b/external/tiff-4.1.0/man/TIFFFieldReadCount.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFFieldReadCount.3tiff,v 1.2 2016-09-25 20:05:49 bfriesen Exp $ .\" .\" Copyright (c) 2012, Tom Lane .\" diff --git a/external/tiff-4.0.9/man/TIFFFieldTag.3tiff b/external/tiff-4.1.0/man/TIFFFieldTag.3tiff similarity index 96% rename from external/tiff-4.0.9/man/TIFFFieldTag.3tiff rename to external/tiff-4.1.0/man/TIFFFieldTag.3tiff index f94f1be9..3d1e83d0 100644 --- a/external/tiff-4.0.9/man/TIFFFieldTag.3tiff +++ b/external/tiff-4.1.0/man/TIFFFieldTag.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFFieldTag.3tiff,v 1.2 2016-09-25 20:05:49 bfriesen Exp $ .\" .\" Copyright (c) 2012, Tom Lane .\" diff --git a/external/tiff-4.0.9/man/TIFFFieldWriteCount.3tiff b/external/tiff-4.1.0/man/TIFFFieldWriteCount.3tiff similarity index 97% rename from external/tiff-4.0.9/man/TIFFFieldWriteCount.3tiff rename to external/tiff-4.1.0/man/TIFFFieldWriteCount.3tiff index 68a3b043..f80290fe 100644 --- a/external/tiff-4.0.9/man/TIFFFieldWriteCount.3tiff +++ b/external/tiff-4.1.0/man/TIFFFieldWriteCount.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFFieldWriteCount.3tiff,v 1.2 2016-09-25 20:05:49 bfriesen Exp $ .\" .\" Copyright (c) 2012, Tom Lane .\" diff --git a/external/tiff-4.0.9/man/TIFFFlush.3tiff b/external/tiff-4.1.0/man/TIFFFlush.3tiff similarity index 97% rename from external/tiff-4.0.9/man/TIFFFlush.3tiff rename to external/tiff-4.1.0/man/TIFFFlush.3tiff index 27520da3..c46a2a3f 100644 --- a/external/tiff-4.0.9/man/TIFFFlush.3tiff +++ b/external/tiff-4.1.0/man/TIFFFlush.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFFlush.3tiff,v 1.3 2016-09-25 20:05:49 bfriesen Exp $ .\" .\" Copyright (c) 1988-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/TIFFGetField.3tiff b/external/tiff-4.1.0/man/TIFFGetField.3tiff similarity index 99% rename from external/tiff-4.0.9/man/TIFFGetField.3tiff rename to external/tiff-4.1.0/man/TIFFGetField.3tiff index 528019e1..c2fd025f 100644 --- a/external/tiff-4.0.9/man/TIFFGetField.3tiff +++ b/external/tiff-4.1.0/man/TIFFGetField.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFGetField.3tiff,v 1.8 2017-06-30 17:40:02 erouault Exp $ .\" .\" Copyright (c) 1988-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/TIFFOpen.3tiff b/external/tiff-4.1.0/man/TIFFOpen.3tiff similarity index 95% rename from external/tiff-4.0.9/man/TIFFOpen.3tiff rename to external/tiff-4.1.0/man/TIFFOpen.3tiff index f4209313..c6ed28e6 100644 --- a/external/tiff-4.0.9/man/TIFFOpen.3tiff +++ b/external/tiff-4.1.0/man/TIFFOpen.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFOpen.3tiff,v 1.2 2005-07-01 12:36:22 dron Exp $ .\" .\" Copyright (c) 1988-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. @@ -208,6 +207,21 @@ Disable the use of strip chopping when reading images. Read TIFF header only, do not load the first image directory. That could be useful in case of the broken first directory. We can open the file and proceed to the other directories. +.TP +.B 4 +ClassicTIFF for creating a file (default) +.TP +.B 8 +BigTIFF for creating a file. +.TP +.B D +Enable use of deferred strip/tile offset/bytecount array loading. They will +be loaded the first time they are accessed to. This loading will be done in +its entirety unless the O flag is also specified. +.TP +.B O +On-demand loading of values of the strip/tile offset/bytecount arrays, limited +to the requested strip/tile, instead of whole array loading (implies D) .SH "BYTE ORDER" The .SM TIFF diff --git a/external/tiff-4.0.9/man/TIFFPrintDirectory.3tiff b/external/tiff-4.1.0/man/TIFFPrintDirectory.3tiff similarity index 97% rename from external/tiff-4.0.9/man/TIFFPrintDirectory.3tiff rename to external/tiff-4.1.0/man/TIFFPrintDirectory.3tiff index 437b09e2..c208f044 100644 --- a/external/tiff-4.0.9/man/TIFFPrintDirectory.3tiff +++ b/external/tiff-4.1.0/man/TIFFPrintDirectory.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFPrintDirectory.3tiff,v 1.1 2004-11-11 14:39:16 dron Exp $ .\" .\" Copyright (c) 1991-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/TIFFRGBAImage.3tiff b/external/tiff-4.1.0/man/TIFFRGBAImage.3tiff similarity index 99% rename from external/tiff-4.0.9/man/TIFFRGBAImage.3tiff rename to external/tiff-4.1.0/man/TIFFRGBAImage.3tiff index 86c93680..fe6064fc 100644 --- a/external/tiff-4.0.9/man/TIFFRGBAImage.3tiff +++ b/external/tiff-4.1.0/man/TIFFRGBAImage.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFRGBAImage.3tiff,v 1.3 2016-09-25 20:05:49 bfriesen Exp $ .\" .\" Copyright (c) 1991-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/TIFFReadDirectory.3tiff b/external/tiff-4.1.0/man/TIFFReadDirectory.3tiff similarity index 98% rename from external/tiff-4.0.9/man/TIFFReadDirectory.3tiff rename to external/tiff-4.1.0/man/TIFFReadDirectory.3tiff index e13586fd..c178c42b 100644 --- a/external/tiff-4.0.9/man/TIFFReadDirectory.3tiff +++ b/external/tiff-4.1.0/man/TIFFReadDirectory.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFReadDirectory.3tiff,v 1.4 2016-09-25 20:05:49 bfriesen Exp $ .\" .\" Copyright (c) 1988-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/TIFFReadEncodedStrip.3tiff b/external/tiff-4.1.0/man/TIFFReadEncodedStrip.3tiff similarity index 97% rename from external/tiff-4.0.9/man/TIFFReadEncodedStrip.3tiff rename to external/tiff-4.1.0/man/TIFFReadEncodedStrip.3tiff index afde8e74..7122946a 100644 --- a/external/tiff-4.0.9/man/TIFFReadEncodedStrip.3tiff +++ b/external/tiff-4.1.0/man/TIFFReadEncodedStrip.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFReadEncodedStrip.3tiff,v 1.3 2016-09-25 20:05:49 bfriesen Exp $ .\" .\" Copyright (c) 1988-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/TIFFReadEncodedTile.3tiff b/external/tiff-4.1.0/man/TIFFReadEncodedTile.3tiff similarity index 97% rename from external/tiff-4.0.9/man/TIFFReadEncodedTile.3tiff rename to external/tiff-4.1.0/man/TIFFReadEncodedTile.3tiff index 99d3e459..6f8d6496 100644 --- a/external/tiff-4.0.9/man/TIFFReadEncodedTile.3tiff +++ b/external/tiff-4.1.0/man/TIFFReadEncodedTile.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFReadEncodedTile.3tiff,v 1.4 2016-09-25 20:05:50 bfriesen Exp $ .\" .\" Copyright (c) 1988-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/TIFFReadRGBAImage.3tiff b/external/tiff-4.1.0/man/TIFFReadRGBAImage.3tiff similarity index 98% rename from external/tiff-4.0.9/man/TIFFReadRGBAImage.3tiff rename to external/tiff-4.1.0/man/TIFFReadRGBAImage.3tiff index 7373e2ae..920fc370 100644 --- a/external/tiff-4.0.9/man/TIFFReadRGBAImage.3tiff +++ b/external/tiff-4.1.0/man/TIFFReadRGBAImage.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFReadRGBAImage.3tiff,v 1.5 2016-09-25 20:05:50 bfriesen Exp $ .\" .\" Copyright (c) 1991-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/TIFFReadRGBAStrip.3tiff b/external/tiff-4.1.0/man/TIFFReadRGBAStrip.3tiff similarity index 98% rename from external/tiff-4.0.9/man/TIFFReadRGBAStrip.3tiff rename to external/tiff-4.1.0/man/TIFFReadRGBAStrip.3tiff index db889a0a..31604124 100644 --- a/external/tiff-4.0.9/man/TIFFReadRGBAStrip.3tiff +++ b/external/tiff-4.1.0/man/TIFFReadRGBAStrip.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFReadRGBAStrip.3tiff,v 1.4 2016-09-25 20:05:50 bfriesen Exp $ .\" .\" Copyright (c) 1991-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/TIFFReadRGBATile.3tiff b/external/tiff-4.1.0/man/TIFFReadRGBATile.3tiff similarity index 98% rename from external/tiff-4.0.9/man/TIFFReadRGBATile.3tiff rename to external/tiff-4.1.0/man/TIFFReadRGBATile.3tiff index 5cb76553..5b9b4bf2 100644 --- a/external/tiff-4.0.9/man/TIFFReadRGBATile.3tiff +++ b/external/tiff-4.1.0/man/TIFFReadRGBATile.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFReadRGBATile.3tiff,v 1.3 2016-09-25 20:05:50 bfriesen Exp $ .\" .\" Copyright (c) 1991-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/TIFFReadRawStrip.3tiff b/external/tiff-4.1.0/man/TIFFReadRawStrip.3tiff similarity index 97% rename from external/tiff-4.0.9/man/TIFFReadRawStrip.3tiff rename to external/tiff-4.1.0/man/TIFFReadRawStrip.3tiff index 6fe326b7..6d411df4 100644 --- a/external/tiff-4.0.9/man/TIFFReadRawStrip.3tiff +++ b/external/tiff-4.1.0/man/TIFFReadRawStrip.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFReadRawStrip.3tiff,v 1.3 2016-09-25 20:05:50 bfriesen Exp $ .\" .\" Copyright (c) 1988-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/TIFFReadRawTile.3tiff b/external/tiff-4.1.0/man/TIFFReadRawTile.3tiff similarity index 97% rename from external/tiff-4.0.9/man/TIFFReadRawTile.3tiff rename to external/tiff-4.1.0/man/TIFFReadRawTile.3tiff index 2844573e..9c60888a 100644 --- a/external/tiff-4.0.9/man/TIFFReadRawTile.3tiff +++ b/external/tiff-4.1.0/man/TIFFReadRawTile.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFReadRawTile.3tiff,v 1.3 2016-09-25 20:05:50 bfriesen Exp $ .\" .\" Copyright (c) 1988-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/TIFFReadScanline.3tiff b/external/tiff-4.1.0/man/TIFFReadScanline.3tiff similarity index 98% rename from external/tiff-4.0.9/man/TIFFReadScanline.3tiff rename to external/tiff-4.1.0/man/TIFFReadScanline.3tiff index 2d9c85a3..ca4b8368 100644 --- a/external/tiff-4.0.9/man/TIFFReadScanline.3tiff +++ b/external/tiff-4.1.0/man/TIFFReadScanline.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFReadScanline.3tiff,v 1.3 2016-09-25 20:05:50 bfriesen Exp $ .\" .\" Copyright (c) 1988-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/TIFFReadTile.3tiff b/external/tiff-4.1.0/man/TIFFReadTile.3tiff similarity index 97% rename from external/tiff-4.0.9/man/TIFFReadTile.3tiff rename to external/tiff-4.1.0/man/TIFFReadTile.3tiff index f1107dc3..cf0f21dc 100644 --- a/external/tiff-4.0.9/man/TIFFReadTile.3tiff +++ b/external/tiff-4.1.0/man/TIFFReadTile.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFReadTile.3tiff,v 1.3 2016-09-25 20:05:50 bfriesen Exp $ .\" .\" Copyright (c) 1988-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/TIFFSetDirectory.3tiff b/external/tiff-4.1.0/man/TIFFSetDirectory.3tiff similarity index 97% rename from external/tiff-4.0.9/man/TIFFSetDirectory.3tiff rename to external/tiff-4.1.0/man/TIFFSetDirectory.3tiff index 0f109f66..734c0155 100644 --- a/external/tiff-4.0.9/man/TIFFSetDirectory.3tiff +++ b/external/tiff-4.1.0/man/TIFFSetDirectory.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFSetDirectory.3tiff,v 1.4 2017-06-30 17:40:02 erouault Exp $ .\" .\" Copyright (c) 1988-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/TIFFSetField.3tiff b/external/tiff-4.1.0/man/TIFFSetField.3tiff similarity index 99% rename from external/tiff-4.0.9/man/TIFFSetField.3tiff rename to external/tiff-4.1.0/man/TIFFSetField.3tiff index 695a199e..df2a5ea2 100644 --- a/external/tiff-4.0.9/man/TIFFSetField.3tiff +++ b/external/tiff-4.1.0/man/TIFFSetField.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFSetField.3tiff,v 1.7 2017-06-30 17:40:02 erouault Exp $ .\" .\" Copyright (c) 1988-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/TIFFWarning.3tiff b/external/tiff-4.1.0/man/TIFFWarning.3tiff similarity index 97% rename from external/tiff-4.0.9/man/TIFFWarning.3tiff rename to external/tiff-4.1.0/man/TIFFWarning.3tiff index 0d302ed8..9a4d9096 100644 --- a/external/tiff-4.0.9/man/TIFFWarning.3tiff +++ b/external/tiff-4.1.0/man/TIFFWarning.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFWarning.3tiff,v 1.4 2016-09-25 20:05:50 bfriesen Exp $ .\" .\" Copyright (c) 1988-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/TIFFWriteDirectory.3tiff b/external/tiff-4.1.0/man/TIFFWriteDirectory.3tiff similarity index 98% rename from external/tiff-4.0.9/man/TIFFWriteDirectory.3tiff rename to external/tiff-4.1.0/man/TIFFWriteDirectory.3tiff index 9f0d2492..e7b84b6d 100644 --- a/external/tiff-4.0.9/man/TIFFWriteDirectory.3tiff +++ b/external/tiff-4.1.0/man/TIFFWriteDirectory.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFWriteDirectory.3tiff,v 1.4 2016-09-25 20:05:50 bfriesen Exp $ .\" .\" Copyright (c) 1988-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/TIFFWriteEncodedStrip.3tiff b/external/tiff-4.1.0/man/TIFFWriteEncodedStrip.3tiff similarity index 97% rename from external/tiff-4.0.9/man/TIFFWriteEncodedStrip.3tiff rename to external/tiff-4.1.0/man/TIFFWriteEncodedStrip.3tiff index a31f6e00..dc410e41 100644 --- a/external/tiff-4.0.9/man/TIFFWriteEncodedStrip.3tiff +++ b/external/tiff-4.1.0/man/TIFFWriteEncodedStrip.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFWriteEncodedStrip.3tiff,v 1.3 2016-09-25 20:05:50 bfriesen Exp $ .\" .\" Copyright (c) 1988-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/TIFFWriteEncodedTile.3tiff b/external/tiff-4.1.0/man/TIFFWriteEncodedTile.3tiff similarity index 97% rename from external/tiff-4.0.9/man/TIFFWriteEncodedTile.3tiff rename to external/tiff-4.1.0/man/TIFFWriteEncodedTile.3tiff index 476cbbb4..d94f4d0e 100644 --- a/external/tiff-4.0.9/man/TIFFWriteEncodedTile.3tiff +++ b/external/tiff-4.1.0/man/TIFFWriteEncodedTile.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFWriteEncodedTile.3tiff,v 1.3 2016-09-25 20:05:50 bfriesen Exp $ .\" .\" Copyright (c) 1988-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/TIFFWriteRawStrip.3tiff b/external/tiff-4.1.0/man/TIFFWriteRawStrip.3tiff similarity index 97% rename from external/tiff-4.0.9/man/TIFFWriteRawStrip.3tiff rename to external/tiff-4.1.0/man/TIFFWriteRawStrip.3tiff index 8d145a07..784a6e03 100644 --- a/external/tiff-4.0.9/man/TIFFWriteRawStrip.3tiff +++ b/external/tiff-4.1.0/man/TIFFWriteRawStrip.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFWriteRawStrip.3tiff,v 1.3 2016-09-25 20:05:50 bfriesen Exp $ .\" .\" Copyright (c) 1988-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/TIFFWriteRawTile.3tiff b/external/tiff-4.1.0/man/TIFFWriteRawTile.3tiff similarity index 97% rename from external/tiff-4.0.9/man/TIFFWriteRawTile.3tiff rename to external/tiff-4.1.0/man/TIFFWriteRawTile.3tiff index 78b23ed7..f3334b85 100644 --- a/external/tiff-4.0.9/man/TIFFWriteRawTile.3tiff +++ b/external/tiff-4.1.0/man/TIFFWriteRawTile.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFWriteRawTile.3tiff,v 1.3 2016-09-25 20:05:50 bfriesen Exp $ .\" .\" Copyright (c) 1988-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/TIFFWriteScanline.3tiff b/external/tiff-4.1.0/man/TIFFWriteScanline.3tiff similarity index 98% rename from external/tiff-4.0.9/man/TIFFWriteScanline.3tiff rename to external/tiff-4.1.0/man/TIFFWriteScanline.3tiff index a2691b55..a51cec52 100644 --- a/external/tiff-4.0.9/man/TIFFWriteScanline.3tiff +++ b/external/tiff-4.1.0/man/TIFFWriteScanline.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFWriteScanline.3tiff,v 1.3 2016-09-25 20:05:50 bfriesen Exp $ .\" .\" Copyright (c) 1988-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/TIFFWriteTile.3tiff b/external/tiff-4.1.0/man/TIFFWriteTile.3tiff similarity index 97% rename from external/tiff-4.0.9/man/TIFFWriteTile.3tiff rename to external/tiff-4.1.0/man/TIFFWriteTile.3tiff index 3755fc78..a6700258 100644 --- a/external/tiff-4.0.9/man/TIFFWriteTile.3tiff +++ b/external/tiff-4.1.0/man/TIFFWriteTile.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFWriteTile.3tiff,v 1.3 2016-09-25 20:05:50 bfriesen Exp $ .\" .\" Copyright (c) 1988-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/TIFFbuffer.3tiff b/external/tiff-4.1.0/man/TIFFbuffer.3tiff similarity index 97% rename from external/tiff-4.0.9/man/TIFFbuffer.3tiff rename to external/tiff-4.1.0/man/TIFFbuffer.3tiff index edda2dbc..20111701 100644 --- a/external/tiff-4.0.9/man/TIFFbuffer.3tiff +++ b/external/tiff-4.1.0/man/TIFFbuffer.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFbuffer.3tiff,v 1.3 2016-09-25 20:05:50 bfriesen Exp $ .\" .\" Copyright (c) 1995 Sam Leffler .\" Copyright (c) 1995 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/TIFFcodec.3tiff b/external/tiff-4.1.0/man/TIFFcodec.3tiff similarity index 97% rename from external/tiff-4.0.9/man/TIFFcodec.3tiff rename to external/tiff-4.1.0/man/TIFFcodec.3tiff index 6c480c49..aa3a8c63 100644 --- a/external/tiff-4.0.9/man/TIFFcodec.3tiff +++ b/external/tiff-4.1.0/man/TIFFcodec.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFcodec.3tiff,v 1.4 2016-09-25 20:05:50 bfriesen Exp $ .\" .\" Copyright (c) 1995 Sam Leffler .\" Copyright (c) 1995 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/TIFFcolor.3tiff b/external/tiff-4.1.0/man/TIFFcolor.3tiff similarity index 99% rename from external/tiff-4.0.9/man/TIFFcolor.3tiff rename to external/tiff-4.1.0/man/TIFFcolor.3tiff index 987ac9d6..1d2bb2b8 100644 --- a/external/tiff-4.0.9/man/TIFFcolor.3tiff +++ b/external/tiff-4.1.0/man/TIFFcolor.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFcolor.3tiff,v 1.5 2016-09-25 20:05:51 bfriesen Exp $ .\" .\" Copyright (c) 2003, Andrey Kiselev .\" diff --git a/external/tiff-4.0.9/man/TIFFmemory.3tiff b/external/tiff-4.1.0/man/TIFFmemory.3tiff similarity index 97% rename from external/tiff-4.0.9/man/TIFFmemory.3tiff rename to external/tiff-4.1.0/man/TIFFmemory.3tiff index 6c4412dd..70a82123 100644 --- a/external/tiff-4.0.9/man/TIFFmemory.3tiff +++ b/external/tiff-4.1.0/man/TIFFmemory.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFmemory.3tiff,v 1.3 2016-09-25 20:05:51 bfriesen Exp $ .\" .\" Copyright (c) 1995 Sam Leffler .\" Copyright (c) 1995 Silicon Graphics, Inc. @@ -78,7 +77,7 @@ C routines: .IR memcpy , and .IR memcmp , -repsectively. +respectively. .SH DIAGNOSTICS None. .SH "SEE ALSO" diff --git a/external/tiff-4.0.9/man/TIFFquery.3tiff b/external/tiff-4.1.0/man/TIFFquery.3tiff similarity index 97% rename from external/tiff-4.0.9/man/TIFFquery.3tiff rename to external/tiff-4.1.0/man/TIFFquery.3tiff index 8bddc889..4d95f5f4 100644 --- a/external/tiff-4.0.9/man/TIFFquery.3tiff +++ b/external/tiff-4.1.0/man/TIFFquery.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFquery.3tiff,v 1.1 2004-11-11 14:39:16 dron Exp $ .\" .\" Copyright (c) 1988-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. @@ -114,7 +113,7 @@ returned if the image data is organized in strips. .IR TIFFIsByteSwapped returns a non-zero value if the image data was in a different byte-order than the host machine. Zero is returned if the TIFF file and local host byte-orders -are the same. Note that TIFFReadTile(), TIFFReadStrip() and +are the same. Note that TIFFReadTile(), TIFFReadEncodedStrip() and TIFFReadScanline() functions already normally perform byte swapping to local host order if needed. .PP diff --git a/external/tiff-4.0.9/man/TIFFsize.3tiff b/external/tiff-4.1.0/man/TIFFsize.3tiff similarity index 97% rename from external/tiff-4.0.9/man/TIFFsize.3tiff rename to external/tiff-4.1.0/man/TIFFsize.3tiff index 4b90a59b..5fbc6bc9 100644 --- a/external/tiff-4.0.9/man/TIFFsize.3tiff +++ b/external/tiff-4.1.0/man/TIFFsize.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFsize.3tiff,v 1.3 2016-09-25 20:05:51 bfriesen Exp $ .\" .\" Copyright (c) 1988-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/TIFFstrip.3tiff b/external/tiff-4.1.0/man/TIFFstrip.3tiff similarity index 98% rename from external/tiff-4.0.9/man/TIFFstrip.3tiff rename to external/tiff-4.1.0/man/TIFFstrip.3tiff index da59b0ef..eb38318f 100644 --- a/external/tiff-4.0.9/man/TIFFstrip.3tiff +++ b/external/tiff-4.1.0/man/TIFFstrip.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFstrip.3tiff,v 1.3 2016-09-25 20:05:51 bfriesen Exp $ .\" .\" Copyright (c) 1992-1997 Sam Leffler .\" Copyright (c) 1992-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/TIFFswab.3tiff b/external/tiff-4.1.0/man/TIFFswab.3tiff similarity index 97% rename from external/tiff-4.0.9/man/TIFFswab.3tiff rename to external/tiff-4.1.0/man/TIFFswab.3tiff index 2294156f..3d7a47bc 100644 --- a/external/tiff-4.0.9/man/TIFFswab.3tiff +++ b/external/tiff-4.1.0/man/TIFFswab.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFswab.3tiff,v 1.3 2016-09-25 20:05:51 bfriesen Exp $ .\" .\" Copyright (c) 1988-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/TIFFtile.3tiff b/external/tiff-4.1.0/man/TIFFtile.3tiff similarity index 98% rename from external/tiff-4.0.9/man/TIFFtile.3tiff rename to external/tiff-4.1.0/man/TIFFtile.3tiff index 5bdbe551..10310a06 100644 --- a/external/tiff-4.0.9/man/TIFFtile.3tiff +++ b/external/tiff-4.1.0/man/TIFFtile.3tiff @@ -1,4 +1,3 @@ -.\" $Id: TIFFtile.3tiff,v 1.3 2016-09-25 20:05:51 bfriesen Exp $ .\" .\" Copyright (c) 1988-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/fax2ps.1 b/external/tiff-4.1.0/man/fax2ps.1 similarity index 98% rename from external/tiff-4.0.9/man/fax2ps.1 rename to external/tiff-4.1.0/man/fax2ps.1 index f82e252b..7aeea4f9 100644 --- a/external/tiff-4.0.9/man/fax2ps.1 +++ b/external/tiff-4.1.0/man/fax2ps.1 @@ -1,4 +1,3 @@ -.\" $Id: fax2ps.1,v 1.5 2016-09-25 20:05:51 bfriesen Exp $ .\" .\" Copyright (c) 1991-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/fax2tiff.1 b/external/tiff-4.1.0/man/fax2tiff.1 similarity index 99% rename from external/tiff-4.0.9/man/fax2tiff.1 rename to external/tiff-4.1.0/man/fax2tiff.1 index 7ce4ffe3..97144c9f 100644 --- a/external/tiff-4.0.9/man/fax2tiff.1 +++ b/external/tiff-4.1.0/man/fax2tiff.1 @@ -1,4 +1,3 @@ -.\" $Id: fax2tiff.1,v 1.8 2016-09-25 20:05:51 bfriesen Exp $ .\" .\" Copyright (c) 1990-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/libtiff.3tiff b/external/tiff-4.1.0/man/libtiff.3tiff similarity index 98% rename from external/tiff-4.0.9/man/libtiff.3tiff rename to external/tiff-4.1.0/man/libtiff.3tiff index 924d17a8..8e9ff35b 100644 --- a/external/tiff-4.0.9/man/libtiff.3tiff +++ b/external/tiff-4.1.0/man/libtiff.3tiff @@ -1,4 +1,3 @@ -.\" $Id: libtiff.3tiff,v 1.5 2016-09-25 20:05:51 bfriesen Exp $ .\" .\" Copyright (c) 1988-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. @@ -343,7 +342,7 @@ WhitePoint 318 R/W XPosition 286 R/W XResolution 282 R/W YCbCrCoefficients 529 R/W used by TIFFRGBAImage support -YCbCrPositioning 531 R/W tile/strip size calulcations +YCbCrPositioning 531 R/W tile/strip size calculations YCbCrSubsampling 530 R/W YPosition 286 R/W YResolution 283 R/W used by Group 3 codec @@ -355,7 +354,7 @@ tags whose values lie in a range outside the valid range of .SM TIFF tags. These tags are termed -.I pseud-tags +.I pseudo-tags and are used to control various codec-specific functions within the library. The table below summarizes the defined pseudo-tags. .sp @@ -409,7 +408,7 @@ The default value is a pointer to a builtin function that images packed bilevel data. .TP .B TIFFTAG_IPTCNEWSPHOTO -Tag contaings image metadata per the IPTC newsphoto spec: Headline, +Tag contains image metadata per the IPTC newsphoto spec: Headline, captioning, credit, etc... Used by most wire services. .TP .B TIFFTAG_PHOTOSHOP diff --git a/external/tiff-4.0.9/man/pal2rgb.1 b/external/tiff-4.1.0/man/pal2rgb.1 similarity index 98% rename from external/tiff-4.0.9/man/pal2rgb.1 rename to external/tiff-4.1.0/man/pal2rgb.1 index 428f93a8..772b4a7b 100644 --- a/external/tiff-4.0.9/man/pal2rgb.1 +++ b/external/tiff-4.1.0/man/pal2rgb.1 @@ -1,4 +1,3 @@ -.\" $Id: pal2rgb.1,v 1.4 2016-09-25 20:05:51 bfriesen Exp $ .\" .\" Copyright (c) 1990-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/ppm2tiff.1 b/external/tiff-4.1.0/man/ppm2tiff.1 similarity index 97% rename from external/tiff-4.0.9/man/ppm2tiff.1 rename to external/tiff-4.1.0/man/ppm2tiff.1 index 2c940fb3..12e58e2c 100644 --- a/external/tiff-4.0.9/man/ppm2tiff.1 +++ b/external/tiff-4.1.0/man/ppm2tiff.1 @@ -1,4 +1,3 @@ -.\" $Id: ppm2tiff.1,v 1.6 2016-09-25 20:05:51 bfriesen Exp $ .\" .\" Copyright (c) 1991-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/raw2tiff.1 b/external/tiff-4.1.0/man/raw2tiff.1 similarity index 98% rename from external/tiff-4.0.9/man/raw2tiff.1 rename to external/tiff-4.1.0/man/raw2tiff.1 index 184a5d10..f45569d4 100644 --- a/external/tiff-4.0.9/man/raw2tiff.1 +++ b/external/tiff-4.1.0/man/raw2tiff.1 @@ -1,4 +1,3 @@ -.\" $Id: raw2tiff.1,v 1.8 2016-09-25 20:05:51 bfriesen Exp $ .\" .\" Copyright (c) 1990-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/tiff2bw.1 b/external/tiff-4.1.0/man/tiff2bw.1 similarity index 97% rename from external/tiff-4.0.9/man/tiff2bw.1 rename to external/tiff-4.1.0/man/tiff2bw.1 index 182ebbec..4fe9942f 100644 --- a/external/tiff-4.0.9/man/tiff2bw.1 +++ b/external/tiff-4.1.0/man/tiff2bw.1 @@ -1,4 +1,3 @@ -.\" $Id: tiff2bw.1,v 1.4 2016-09-25 20:05:51 bfriesen Exp $ .\" .\" Copyright (c) 1988-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/tiff2pdf.1 b/external/tiff-4.1.0/man/tiff2pdf.1 similarity index 99% rename from external/tiff-4.0.9/man/tiff2pdf.1 rename to external/tiff-4.1.0/man/tiff2pdf.1 index de80599e..93011332 100644 --- a/external/tiff-4.0.9/man/tiff2pdf.1 +++ b/external/tiff-4.1.0/man/tiff2pdf.1 @@ -1,4 +1,3 @@ -.\" $Id: tiff2pdf.1,v 1.8 2016-09-25 20:05:51 bfriesen Exp $ .\" .\" Copyright (c) 2003 Ross Finlayson .\" diff --git a/external/tiff-4.0.9/man/tiff2ps.1 b/external/tiff-4.1.0/man/tiff2ps.1 similarity index 99% rename from external/tiff-4.0.9/man/tiff2ps.1 rename to external/tiff-4.1.0/man/tiff2ps.1 index e3b57ec5..5e2b9a85 100644 --- a/external/tiff-4.0.9/man/tiff2ps.1 +++ b/external/tiff-4.1.0/man/tiff2ps.1 @@ -1,4 +1,3 @@ -.\" $Id: tiff2ps.1,v 1.12 2016-09-25 20:05:51 bfriesen Exp $ .\" .\" Copyright (c) 1988-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/tiff2rgba.1 b/external/tiff-4.1.0/man/tiff2rgba.1 similarity index 98% rename from external/tiff-4.0.9/man/tiff2rgba.1 rename to external/tiff-4.1.0/man/tiff2rgba.1 index f0af0a1c..d9c9baae 100644 --- a/external/tiff-4.0.9/man/tiff2rgba.1 +++ b/external/tiff-4.1.0/man/tiff2rgba.1 @@ -1,4 +1,3 @@ -.\" $Id: tiff2rgba.1,v 1.5 2016-09-25 20:05:52 bfriesen Exp $ .\" .\" Copyright (c) 1988-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/tiffcmp.1 b/external/tiff-4.1.0/man/tiffcmp.1 similarity index 97% rename from external/tiff-4.0.9/man/tiffcmp.1 rename to external/tiff-4.1.0/man/tiffcmp.1 index 3d111a4d..ee83a742 100644 --- a/external/tiff-4.0.9/man/tiffcmp.1 +++ b/external/tiff-4.1.0/man/tiffcmp.1 @@ -1,4 +1,3 @@ -.\" $Id: tiffcmp.1,v 1.7 2016-09-25 20:05:52 bfriesen Exp $ .\" .\" Copyright (c) 1988-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/tiffcp.1 b/external/tiff-4.1.0/man/tiffcp.1 similarity index 99% rename from external/tiff-4.0.9/man/tiffcp.1 rename to external/tiff-4.1.0/man/tiffcp.1 index fee46395..0545686c 100644 --- a/external/tiff-4.0.9/man/tiffcp.1 +++ b/external/tiff-4.1.0/man/tiffcp.1 @@ -1,4 +1,3 @@ -.\" $Id: tiffcp.1,v 1.14 2016-09-25 20:05:52 bfriesen Exp $ .\" .\" Copyright (c) 1988-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/tiffcrop.1 b/external/tiff-4.1.0/man/tiffcrop.1 similarity index 99% rename from external/tiff-4.0.9/man/tiffcrop.1 rename to external/tiff-4.1.0/man/tiffcrop.1 index 3fa6bb67..5bd00976 100644 --- a/external/tiff-4.0.9/man/tiffcrop.1 +++ b/external/tiff-4.1.0/man/tiffcrop.1 @@ -1,4 +1,3 @@ -.\" $Id: tiffcrop.1,v 1.8 2016-09-25 20:05:52 bfriesen Exp $ .\" tiffcrop -- a port of tiffcp.c extended to include extended processing of images .\" .\" Original code: diff --git a/external/tiff-4.0.9/man/tiffdither.1 b/external/tiff-4.1.0/man/tiffdither.1 similarity index 98% rename from external/tiff-4.0.9/man/tiffdither.1 rename to external/tiff-4.1.0/man/tiffdither.1 index d5214cee..56725b2b 100644 --- a/external/tiff-4.0.9/man/tiffdither.1 +++ b/external/tiff-4.1.0/man/tiffdither.1 @@ -1,4 +1,3 @@ -.\" $Id: tiffdither.1,v 1.6 2016-09-25 20:05:52 bfriesen Exp $ .\" .\" Copyright (c) 1990-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/tiffdump.1 b/external/tiff-4.1.0/man/tiffdump.1 similarity index 97% rename from external/tiff-4.0.9/man/tiffdump.1 rename to external/tiff-4.1.0/man/tiffdump.1 index a5eeccda..07b08e3c 100644 --- a/external/tiff-4.0.9/man/tiffdump.1 +++ b/external/tiff-4.1.0/man/tiffdump.1 @@ -1,4 +1,3 @@ -.\" $Id: tiffdump.1,v 1.6 2016-09-25 20:05:52 bfriesen Exp $ .\" .\" Copyright (c) 1988-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/tiffgt.1 b/external/tiff-4.1.0/man/tiffgt.1 similarity index 99% rename from external/tiff-4.0.9/man/tiffgt.1 rename to external/tiff-4.1.0/man/tiffgt.1 index 53031018..6ef6209f 100644 --- a/external/tiff-4.0.9/man/tiffgt.1 +++ b/external/tiff-4.1.0/man/tiffgt.1 @@ -1,4 +1,3 @@ -.\" $Id: tiffgt.1,v 1.5 2016-09-25 20:05:52 bfriesen Exp $ .\" .\" Copyright (c) 1988-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/tiffinfo.1 b/external/tiff-4.1.0/man/tiffinfo.1 similarity index 97% rename from external/tiff-4.0.9/man/tiffinfo.1 rename to external/tiff-4.1.0/man/tiffinfo.1 index 89637bb2..64958a6c 100644 --- a/external/tiff-4.0.9/man/tiffinfo.1 +++ b/external/tiff-4.1.0/man/tiffinfo.1 @@ -1,4 +1,3 @@ -.\" $Id: tiffinfo.1,v 1.3 2016-09-25 20:05:52 bfriesen Exp $ .\" .\" Copyright (c) 1988-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/tiffmedian.1 b/external/tiff-4.1.0/man/tiffmedian.1 similarity index 98% rename from external/tiff-4.0.9/man/tiffmedian.1 rename to external/tiff-4.1.0/man/tiffmedian.1 index 428ca9ad..b10ba798 100644 --- a/external/tiff-4.0.9/man/tiffmedian.1 +++ b/external/tiff-4.1.0/man/tiffmedian.1 @@ -1,4 +1,3 @@ -.\" $Id: tiffmedian.1,v 1.4 2016-09-25 20:05:52 bfriesen Exp $ .\" .\" Copyright (c) 1990-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/tiffset.1 b/external/tiff-4.1.0/man/tiffset.1 similarity index 97% rename from external/tiff-4.0.9/man/tiffset.1 rename to external/tiff-4.1.0/man/tiffset.1 index d7c48fa5..513c7567 100644 --- a/external/tiff-4.0.9/man/tiffset.1 +++ b/external/tiff-4.1.0/man/tiffset.1 @@ -1,4 +1,3 @@ -.\" $Id: tiffset.1,v 1.7 2016-09-25 20:05:52 bfriesen Exp $ .\" .\" Copyright (c) 1988-1997 Sam Leffler .\" Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/man/tiffsplit.1 b/external/tiff-4.1.0/man/tiffsplit.1 similarity index 97% rename from external/tiff-4.0.9/man/tiffsplit.1 rename to external/tiff-4.1.0/man/tiffsplit.1 index f01b3f46..fe309f42 100644 --- a/external/tiff-4.0.9/man/tiffsplit.1 +++ b/external/tiff-4.1.0/man/tiffsplit.1 @@ -1,4 +1,3 @@ -.\" $Id: tiffsplit.1,v 1.7 2016-09-25 20:05:52 bfriesen Exp $ .\" .\" Copyright (c) 1992-1997 Sam Leffler .\" Copyright (c) 1992-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/nmake.opt b/external/tiff-4.1.0/nmake.opt similarity index 93% rename from external/tiff-4.0.9/nmake.opt rename to external/tiff-4.1.0/nmake.opt index ec45e779..ae544670 100644 --- a/external/tiff-4.0.9/nmake.opt +++ b/external/tiff-4.1.0/nmake.opt @@ -1,4 +1,3 @@ -# $Id: nmake.opt,v 1.20 2017-10-10 14:39:43 erouault Exp $ # # Copyright (C) 2004, Andrey Kiselev # @@ -35,13 +34,6 @@ ###### Edit the following lines to choose a feature set you need. ####### # -# -# Select WINMODE_CONSOLE to build a library which reports errors to stderr, or -# WINMODE_WINDOWED to build such that errors are reported via MessageBox(). -# -WINMODE_CONSOLE = 1 -#WINMODE_WINDOWED = 1 - # # Comment out the following lines to disable internal codecs. # @@ -160,13 +152,6 @@ DLLNAME = libtiff.dll # Set the native cpu bit order EXTRAFLAGS = -DFILLODER_LSB2MSB $(EXTRAFLAGS) -!IFDEF WINMODE_WINDOWED -EXTRAFLAGS = -DTIF_PLATFORM_WINDOWED $(EXTRAFLAGS) -LIBS = user32.lib $(LIBS) -!ELSE -EXTRAFLAGS = -DTIF_PLATFORM_CONSOLE $(EXTRAFLAGS) -!ENDIF - # Codec stuff !IFDEF CCITT_SUPPORT EXTRAFLAGS = -DCCITT_SUPPORT $(EXTRAFLAGS) diff --git a/external/tiff-4.0.9/port/CMakeLists.txt b/external/tiff-4.1.0/port/CMakeLists.txt similarity index 92% rename from external/tiff-4.0.9/port/CMakeLists.txt rename to external/tiff-4.1.0/port/CMakeLists.txt index 8b221d1d..b7eb3a29 100644 --- a/external/tiff-4.0.9/port/CMakeLists.txt +++ b/external/tiff-4.1.0/port/CMakeLists.txt @@ -28,6 +28,8 @@ set(port_optional_SOURCES getopt.c lfind.c strcasecmp.c + strtol.c + strtoll.c strtoul.c strtoull.c) @@ -45,6 +47,12 @@ endif() if(NOT HAVE_STRCASECMP) list(APPEND port_USED_FILES strcasecmp.c) endif() +if(NOT HAVE_STRTOL) + list(APPEND port_USED_FILES strtol.c) +endif() +if(NOT HAVE_STRTOLL) + list(APPEND port_USED_FILES strtoll.c) +endif() if(NOT HAVE_STRTOUL) list(APPEND port_USED_FILES strtoul.c) endif() diff --git a/external/tiff-4.0.9/port/Makefile.am b/external/tiff-4.1.0/port/Makefile.am similarity index 97% rename from external/tiff-4.0.9/port/Makefile.am rename to external/tiff-4.1.0/port/Makefile.am index 4d6e11d0..250479fe 100644 --- a/external/tiff-4.0.9/port/Makefile.am +++ b/external/tiff-4.1.0/port/Makefile.am @@ -27,7 +27,9 @@ EXTRA_DIST = \ CMakeLists.txt \ Makefile.vc \ libport.h \ - snprintf.c + snprintf.c \ + _strtol.h \ + _strtoul.h noinst_LTLIBRARIES = libport.la libport_la_SOURCES = dummy.c libport.h diff --git a/external/tiff-4.0.9/port/Makefile.in b/external/tiff-4.1.0/port/Makefile.in similarity index 89% rename from external/tiff-4.0.9/port/Makefile.in rename to external/tiff-4.1.0/port/Makefile.in index 55e09e6e..72e192b0 100644 --- a/external/tiff-4.0.9/port/Makefile.in +++ b/external/tiff-4.1.0/port/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -122,7 +122,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs +mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/libtiff/tif_config.h \ $(top_builddir)/libtiff/tiffconf.h CONFIG_CLEAN_FILES = @@ -149,7 +149,12 @@ am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/libtiff depcomp = $(SHELL) $(top_srcdir)/config/depcomp -am__depfiles_maybe = depfiles +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = $(DEPDIR)/getopt.Plo $(DEPDIR)/lfind.Plo \ + $(DEPDIR)/snprintf.Plo $(DEPDIR)/strcasecmp.Plo \ + $(DEPDIR)/strtol.Plo $(DEPDIR)/strtoll.Plo \ + $(DEPDIR)/strtoul.Plo $(DEPDIR)/strtoull.Plo \ + ./$(DEPDIR)/dummy.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @@ -196,8 +201,8 @@ am__define_uniq_tagged_files = \ ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp \ - $(top_srcdir)/config/mkinstalldirs getopt.c lfind.c snprintf.c \ - strcasecmp.c strtoul.c strtoull.c + getopt.c lfind.c snprintf.c strcasecmp.c strtol.c strtoll.c \ + strtoul.c strtoull.c DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ @@ -351,7 +356,9 @@ EXTRA_DIST = \ CMakeLists.txt \ Makefile.vc \ libport.h \ - snprintf.c + snprintf.c \ + _strtol.h \ + _strtoul.h noinst_LTLIBRARIES = libport.la libport_la_SOURCES = dummy.c libport.h @@ -377,8 +384,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -410,13 +417,21 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/getopt.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/lfind.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/snprintf.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strcasecmp.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strtoul.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strtoull.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dummy.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/getopt.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/lfind.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/snprintf.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strcasecmp.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strtol.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strtoll.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strtoul.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strtoull.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dummy.Plo@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @@ -497,7 +512,10 @@ cscopelist-am: $(am__tagged_files) distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -567,7 +585,15 @@ clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am - -rm -rf $(DEPDIR) ./$(DEPDIR) + -rm -f $(DEPDIR)/getopt.Plo + -rm -f $(DEPDIR)/lfind.Plo + -rm -f $(DEPDIR)/snprintf.Plo + -rm -f $(DEPDIR)/strcasecmp.Plo + -rm -f $(DEPDIR)/strtol.Plo + -rm -f $(DEPDIR)/strtoll.Plo + -rm -f $(DEPDIR)/strtoul.Plo + -rm -f $(DEPDIR)/strtoull.Plo + -rm -f ./$(DEPDIR)/dummy.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags @@ -613,7 +639,15 @@ install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am - -rm -rf $(DEPDIR) ./$(DEPDIR) + -rm -f $(DEPDIR)/getopt.Plo + -rm -f $(DEPDIR)/lfind.Plo + -rm -f $(DEPDIR)/snprintf.Plo + -rm -f $(DEPDIR)/strcasecmp.Plo + -rm -f $(DEPDIR)/strtol.Plo + -rm -f $(DEPDIR)/strtoll.Plo + -rm -f $(DEPDIR)/strtoul.Plo + -rm -f $(DEPDIR)/strtoull.Plo + -rm -f ./$(DEPDIR)/dummy.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic @@ -634,16 +668,16 @@ uninstall-am: .MAKE: install-am install-strip -.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ - ctags-am distclean distclean-compile distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-man install-pdf install-pdf-am \ - install-ps install-ps-am install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ +.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ + clean-generic clean-libtool clean-noinstLTLIBRARIES \ + cscopelist-am ctags ctags-am distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am diff --git a/external/tiff-4.0.9/port/Makefile.vc b/external/tiff-4.1.0/port/Makefile.vc similarity index 96% rename from external/tiff-4.0.9/port/Makefile.vc rename to external/tiff-4.1.0/port/Makefile.vc index bde48048..992d2696 100644 --- a/external/tiff-4.0.9/port/Makefile.vc +++ b/external/tiff-4.1.0/port/Makefile.vc @@ -1,4 +1,3 @@ -# $Id: Makefile.vc,v 1.5 2015-08-19 02:31:04 bfriesen Exp $ # # Copyright (C) 2004, Andrey Kiselev # diff --git a/external/tiff-4.1.0/port/_strtol.h b/external/tiff-4.1.0/port/_strtol.h new file mode 100644 index 00000000..73a10063 --- /dev/null +++ b/external/tiff-4.1.0/port/_strtol.h @@ -0,0 +1,160 @@ +/* $NetBSD: _strtol.h,v 1.11 2017/07/06 21:08:44 joerg Exp $ */ + +/*- + * Copyright (c) 1990, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * Original version ID: + * NetBSD: src/lib/libc/locale/_wcstol.h,v 1.2 2003/08/07 16:43:03 agc Exp + */ + +#include + +/* + * function template for strtol, strtoll and strtoimax. + * + * parameters: + * _FUNCNAME : function name + * __INT : return type + * __INT_MIN : lower limit of the return type + * __INT_MAX : upper limit of the return type + */ +__INT +_FUNCNAME(const char *nptr, char **endptr, int base) +{ + const char *s; + __INT acc, cutoff; + unsigned char c; + int i, neg, any, cutlim; + + assert(nptr != NULL); + /* endptr may be NULL */ + + /* check base value */ + if (base && (base < 2 || base > 36)) { + errno = EINVAL; + if (endptr != NULL) + /* LINTED interface specification */ + *endptr = (char *)(nptr); + return 0; + } + + /* + * Skip white space and pick up leading +/- sign if any. + * If base is 0, allow 0x for hex and 0 for octal, else + * assume decimal; if base is already 16, allow 0x. + */ + s = nptr; + do { + c = *s++; + } while (isspace(c)); + if (c == '-') { + neg = 1; + c = *s++; + } else { + neg = 0; + if (c == '+') + c = *s++; + } + if ((base == 0 || base == 16) && + c == '0' && (*s == 'x' || *s == 'X') && + ((s[1] >= '0' && s[1] <= '9') || + (s[1] >= 'a' && s[1] <= 'f') || + (s[1] >= 'A' && s[1] <= 'F'))) { + c = s[1]; + s += 2; + base = 16; + } else if (base == 0) + base = (c == '0' ? 8 : 10); + + /* + * Compute the cutoff value between legal numbers and illegal + * numbers. That is the largest legal value, divided by the + * base. An input number that is greater than this value, if + * followed by a legal input character, is too big. One that + * is equal to this value may be valid or not; the limit + * between valid and invalid numbers is then based on the last + * digit. For instance, if the range for longs is + * [-2147483648..2147483647] and the input base is 10, + * cutoff will be set to 214748364 and cutlim to either + * 7 (neg==0) or 8 (neg==1), meaning that if we have accumulated + * a value > 214748364, or equal but the next digit is > 7 (or 8), + * the number is too big, and we will return a range error. + * + * Set any if any `digits' consumed; make it negative to indicate + * overflow. + */ + cutoff = (__INT)(neg ? __INT_MIN : __INT_MAX); + cutlim = (int)(cutoff % base); + cutoff /= base; + if (neg) { + if (cutlim > 0) { + cutlim -= base; + cutoff += 1; + } + cutlim = -cutlim; + } + for (acc = 0, any = 0;; c = *s++) { + if (c >= '0' && c <= '9') + i = c - '0'; + else if (c >= 'a' && c <= 'z') + i = (c - 'a') + 10; + else if (c >= 'A' && c <= 'Z') + i = (c - 'A') + 10; + else + break; + if (i >= base) + break; + if (any < 0) + continue; + if (neg) { + if (acc < cutoff || (acc == cutoff && i > cutlim)) { + acc = __INT_MIN; + any = -1; + errno = ERANGE; + } else { + any = 1; + acc *= base; + acc -= i; + } + } else { + if (acc > cutoff || (acc == cutoff && i > cutlim)) { + acc = __INT_MAX; + any = -1; + errno = ERANGE; + } else { + any = 1; + acc *= base; + acc += i; + } + } + } + if (endptr != NULL) + /* LINTED interface specification */ + *endptr = (char *)(any ? s - 1 : nptr); + return(acc); +} diff --git a/external/tiff-4.0.9/port/strtoul.c b/external/tiff-4.1.0/port/_strtoul.h similarity index 57% rename from external/tiff-4.0.9/port/strtoul.c rename to external/tiff-4.1.0/port/_strtoul.h index f7a9a1a5..5cb62168 100644 --- a/external/tiff-4.0.9/port/strtoul.c +++ b/external/tiff-4.1.0/port/_strtoul.h @@ -1,6 +1,6 @@ -/* $Id: strtoul.c,v 1.2 2005/07/07 16:34:06 dron Exp $ */ +/* $NetBSD: _strtoul.h,v 1.11 2017/07/06 21:08:44 joerg Exp $ */ -/* +/*- * Copyright (c) 1990, 1993 * The Regents of the University of California. All rights reserved. * @@ -27,38 +27,49 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. + * + * Original version ID: + * NetBSD: src/lib/libc/locale/_wcstoul.h,v 1.2 2003/08/07 16:43:03 agc Exp */ -#if 0 -static char sccsid[] = "@(#)strtoul.c 8.1 (Berkeley) 6/4/93"; -__RCSID("$NetBSD: strtoul.c,v 1.16 2003/08/07 16:43:45 agc Exp $"); -#endif - -#include -#include -#include -#include +#include /* - * Convert a string to an unsigned long integer. + * function template for strtoul, strtoull and strtoumax. * - * Ignores `locale' stuff. Assumes that the upper and lower case - * alphabets and digits are each contiguous. + * parameters: + * _FUNCNAME : function name + * __UINT : return type + * __UINT_MAX : upper limit of the return type */ -unsigned long -strtoul(const char *nptr, char **endptr, int base) +__UINT +_FUNCNAME(const char *nptr, char **endptr, int base) { const char *s; - unsigned long acc, cutoff; - int c; - int neg, any, cutlim; + __UINT acc, cutoff; + unsigned char c; + int i, neg, any, cutlim; + + assert(nptr != NULL); + /* endptr may be NULL */ + + /* check base value */ + if (base && (base < 2 || base > 36)) { + errno = EINVAL; + if (endptr != NULL) + /* LINTED interface specification */ + *endptr = (char *)(nptr); + return 0; + } /* - * See strtol for comments as to the logic used. + * Skip white space and pick up leading +/- sign if any. + * If base is 0, allow 0x for hex and 0 for octal, else + * assume decimal; if base is already 16, allow 0x. */ s = nptr; do { - c = (unsigned char) *s++; + c = *s++; } while (isspace(c)); if (c == '-') { neg = 1; @@ -69,41 +80,48 @@ strtoul(const char *nptr, char **endptr, int base) c = *s++; } if ((base == 0 || base == 16) && - c == '0' && (*s == 'x' || *s == 'X')) { + c == '0' && (*s == 'x' || *s == 'X') && + ((s[1] >= '0' && s[1] <= '9') || + (s[1] >= 'a' && s[1] <= 'f') || + (s[1] >= 'A' && s[1] <= 'F'))) { c = s[1]; s += 2; base = 16; - } - if (base == 0) - base = c == '0' ? 8 : 10; + } else if (base == 0) + base = (c == '0' ? 8 : 10); - cutoff = ULONG_MAX / (unsigned long)base; - cutlim = (int)(ULONG_MAX % (unsigned long)base); - for (acc = 0, any = 0;; c = (unsigned char) *s++) { - if (isdigit(c)) - c -= '0'; - else if (isalpha(c)) - c -= isupper(c) ? 'A' - 10 : 'a' - 10; + /* + * See strtol for comments as to the logic used. + */ + cutoff = ((__UINT)__UINT_MAX / (__UINT)base); + cutlim = (int)((__UINT)__UINT_MAX % (__UINT)base); + for (acc = 0, any = 0;; c = *s++) { + if (c >= '0' && c <= '9') + i = c - '0'; + else if (c >= 'a' && c <= 'z') + i = (c - 'a') + 10; + else if (c >= 'A' && c <= 'Z') + i = (c - 'A') + 10; else break; - if (c >= base) + if (i >= base) break; if (any < 0) continue; - if (acc > cutoff || (acc == cutoff && c > cutlim)) { + if (acc > cutoff || (acc == cutoff && i > cutlim)) { + acc = __UINT_MAX; any = -1; - acc = ULONG_MAX; errno = ERANGE; } else { any = 1; - acc *= (unsigned long)base; - acc += c; + acc *= (__UINT)base; + acc += i; } } if (neg && any > 0) acc = -acc; - if (endptr != 0) + if (endptr != NULL) /* LINTED interface specification */ *endptr = (char *)(any ? s - 1 : nptr); - return (acc); + return(acc); } diff --git a/external/tiff-4.0.9/port/dummy.c b/external/tiff-4.1.0/port/dummy.c similarity index 70% rename from external/tiff-4.0.9/port/dummy.c rename to external/tiff-4.1.0/port/dummy.c index 46f93bcc..346a07ee 100644 --- a/external/tiff-4.0.9/port/dummy.c +++ b/external/tiff-4.1.0/port/dummy.c @@ -1,5 +1,3 @@ -/* $Id: dummy.c,v 1.3 2007/03/21 14:54:16 dron Exp $ */ - /* * Dummy function, just to be ensure that the library always will be created. */ diff --git a/external/tiff-4.0.9/port/getopt.c b/external/tiff-4.1.0/port/getopt.c similarity index 98% rename from external/tiff-4.0.9/port/getopt.c rename to external/tiff-4.1.0/port/getopt.c index 6eff8ee5..c7bdb116 100644 --- a/external/tiff-4.0.9/port/getopt.c +++ b/external/tiff-4.1.0/port/getopt.c @@ -1,5 +1,3 @@ -/* $Id: getopt.c,v 1.3 2009-01-22 20:53:07 fwarmerdam Exp $ */ - /* * Copyright (c) 1987, 1993, 1994 * The Regents of the University of California. All rights reserved. diff --git a/external/tiff-4.0.9/port/lfind.c b/external/tiff-4.1.0/port/lfind.c similarity index 97% rename from external/tiff-4.0.9/port/lfind.c rename to external/tiff-4.1.0/port/lfind.c index 64b261ca..00ab6495 100644 --- a/external/tiff-4.0.9/port/lfind.c +++ b/external/tiff-4.1.0/port/lfind.c @@ -1,5 +1,3 @@ -/* $Id: lfind.c,v 1.4 2007/01/15 18:40:39 mloskot Exp $ */ - /* * Copyright (c) 1989, 1993 * The Regents of the University of California. All rights reserved. diff --git a/external/tiff-4.0.9/port/libport.h b/external/tiff-4.1.0/port/libport.h similarity index 87% rename from external/tiff-4.0.9/port/libport.h rename to external/tiff-4.1.0/port/libport.h index d9b04215..ff262638 100644 --- a/external/tiff-4.0.9/port/libport.h +++ b/external/tiff-4.1.0/port/libport.h @@ -1,5 +1,3 @@ -/* $Id: libport.h,v 1.5 2015-08-19 02:31:04 bfriesen Exp $ */ - /* * Copyright (c) 2009 Frank Warmerdam * @@ -38,9 +36,18 @@ int strcasecmp(const char *s1, const char *s2); # define HAVE_GETOPT 1 #endif -#if 0 +#if HAVE_STRTOL +long strtol(const char *nptr, char **endptr, int base); +#endif +#if HAVE_STRTOLL +long long strtoll(const char *nptr, char **endptr, int base); +#endif +#if HAVE_STRTOUL unsigned long strtoul(const char *nptr, char **endptr, int base); #endif +#if HAVE_STRTOULL +unsigned long long strtoull(const char *nptr, char **endptr, int base); +#endif #if 0 void * diff --git a/external/tiff-4.0.9/port/snprintf.c b/external/tiff-4.1.0/port/snprintf.c similarity index 90% rename from external/tiff-4.0.9/port/snprintf.c rename to external/tiff-4.1.0/port/snprintf.c index 1c4ac087..3542ab75 100644 --- a/external/tiff-4.0.9/port/snprintf.c +++ b/external/tiff-4.1.0/port/snprintf.c @@ -16,7 +16,11 @@ int _TIFF_vsnprintf_f(char* str, size_t size, const char* format, va_list ap) int count = -1; if (size != 0) +#if _MSC_VER <= 1310 + count = _vsnprintf(str, size, format, ap); +#else count = _vsnprintf_s(str, size, _TRUNCATE, format, ap); +#endif if (count == -1) count = _vscprintf(format, ap); diff --git a/external/tiff-4.0.9/port/strcasecmp.c b/external/tiff-4.1.0/port/strcasecmp.c similarity index 96% rename from external/tiff-4.0.9/port/strcasecmp.c rename to external/tiff-4.1.0/port/strcasecmp.c index de7e4232..65e2b411 100644 --- a/external/tiff-4.0.9/port/strcasecmp.c +++ b/external/tiff-4.1.0/port/strcasecmp.c @@ -1,5 +1,3 @@ -/* $Id: strcasecmp.c,v 1.4 2015-06-21 01:09:09 bfriesen Exp $ */ - /* * Copyright (c) 1987, 1993 * The Regents of the University of California. All rights reserved. diff --git a/external/tiff-4.1.0/port/strtol.c b/external/tiff-4.1.0/port/strtol.c new file mode 100644 index 00000000..a355dde9 --- /dev/null +++ b/external/tiff-4.1.0/port/strtol.c @@ -0,0 +1,45 @@ +/* $NetBSD: strtol.c,v 1.18 2008/08/20 12:42:26 joerg Exp $ */ + +/*- + * Copyright (c) 2005 The DragonFly Project. All rights reserved. + * Copyright (c) 2003 Citrus Project, + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#if 0 +__RCSID("$NetBSD: strtol.c,v 1.18 2008/08/20 12:42:26 joerg Exp $"); +#endif + +#include +#include +#include +#include +#include + +#define _FUNCNAME strtol +#define __INT long +#define __INT_MIN LONG_MIN +#define __INT_MAX LONG_MAX + +#include "_strtol.h" diff --git a/external/tiff-4.1.0/port/strtoll.c b/external/tiff-4.1.0/port/strtoll.c new file mode 100644 index 00000000..4784b098 --- /dev/null +++ b/external/tiff-4.1.0/port/strtoll.c @@ -0,0 +1,44 @@ +/* $NetBSD: strtol.c,v 1.18 2008/08/20 12:42:26 joerg Exp $ */ + +/*- + * Copyright (c) 2005 The DragonFly Project. All rights reserved. + * Copyright (c) 2003 Citrus Project, + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#if 0 +__RCSID("$NetBSD: strtol.c,v 1.18 2008/08/20 12:42:26 joerg Exp $"); +#endif + +#include +#include +#include +#include + +#define _FUNCNAME strtoll +#define __INT long long +#define __INT_MIN LLONG_MIN +#define __INT_MAX LLONG_MAX + +#include "_strtol.h" diff --git a/external/tiff-4.1.0/port/strtoul.c b/external/tiff-4.1.0/port/strtoul.c new file mode 100644 index 00000000..dbd44f16 --- /dev/null +++ b/external/tiff-4.1.0/port/strtoul.c @@ -0,0 +1,44 @@ +/* $NetBSD: strtoul.c,v 1.3 2008/08/20 19:58:34 oster Exp $ */ + +/*- + * Copyright (c) 2005 The DragonFly Project. All rights reserved. + * Copyright (c) 2003 Citrus Project, + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#if 0 +__RCSID("$NetBSD: strtoul.c,v 1.3 2008/08/20 19:58:34 oster Exp $"); +#endif + +#include +#include +#include +#include +#include + +#define _FUNCNAME strtoul +#define __UINT unsigned long int +#define __UINT_MAX ULONG_MAX + +#include "_strtoul.h" diff --git a/external/tiff-4.1.0/port/strtoull.c b/external/tiff-4.1.0/port/strtoull.c new file mode 100644 index 00000000..91e4ddfb --- /dev/null +++ b/external/tiff-4.1.0/port/strtoull.c @@ -0,0 +1,44 @@ +/* $NetBSD: strtoul.c,v 1.3 2008/08/20 19:58:34 oster Exp $ */ + +/*- + * Copyright (c) 2005 The DragonFly Project. All rights reserved. + * Copyright (c) 2003 Citrus Project, + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#if 0 +__RCSID("$NetBSD: strtoul.c,v 1.3 2008/08/20 19:58:34 oster Exp $"); +#endif + +#include +#include +#include +#include +#include + +#define _FUNCNAME strtoull +#define __UINT unsigned long long int +#define __UINT_MAX ULLONG_MAX + +#include "_strtoul.h" diff --git a/external/tiff-4.0.9/test/CMakeLists.txt b/external/tiff-4.1.0/test/CMakeLists.txt similarity index 95% rename from external/tiff-4.0.9/test/CMakeLists.txt rename to external/tiff-4.1.0/test/CMakeLists.txt index 912be19c..a4216d56 100644 --- a/external/tiff-4.0.9/test/CMakeLists.txt +++ b/external/tiff-4.1.0/test/CMakeLists.txt @@ -35,6 +35,7 @@ set(TESTSCRIPTS ppm2tiff_pbm.sh ppm2tiff_pgm.sh ppm2tiff_ppm.sh + fax2tiff.sh tiffcp-g3.sh tiffcp-g3-1d.sh tiffcp-g3-1d-fill.sh @@ -44,6 +45,7 @@ set(TESTSCRIPTS tiffcp-logluv.sh tiffcp-thumbnail.sh tiffcp-lzw-compat.sh + tiffcp-lzw-scanline-decode.sh tiffdump.sh tiffinfo.sh tiffcp-split.sh @@ -120,7 +122,8 @@ set(TIFFIMAGES images/rgb-3c-16b.tiff images/rgb-3c-8b.tiff images/quad-tile.jpg.tiff - images/quad-lzw-compat.tiff) + images/quad-lzw-compat.tiff + images/lzw-single-strip.tiff) set(BMPIMAGES images/palette-1c-8b.bmp @@ -149,6 +152,7 @@ set(UNCOMPRESSEDIMAGES # files which are not currently used by the tests. set(IMAGES_EXTRA_DIST images/README.txt + images/miniswhite-1c-1b.g3 ${BMPIMAGES} ${GIFIMAGES} ${PNMIMAGES} @@ -184,6 +188,15 @@ endif() add_executable(custom_dir custom_dir.c) target_link_libraries(custom_dir tiff port) +add_executable(defer_strile_loading defer_strile_loading.c) +target_link_libraries(defer_strile_loading tiff port) + +add_executable(defer_strile_writing defer_strile_writing.c) +target_link_libraries(defer_strile_writing tiff port) + +add_executable(testtypes testtypes.c) +target_link_libraries(testtypes tiff port) + set(TEST_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/output") file(MAKE_DIRECTORY "${TEST_OUTPUT}") @@ -335,6 +348,7 @@ add_convert_test(tiffcp g32d "-c g3:2d" "images/miniswhite-1c-1b.ti add_convert_test(tiffcp g32dfill "-c g3:2d:fill" "images/miniswhite-1c-1b.tiff" FALSE) add_convert_test(tiffcp g4 "-c g4" "images/miniswhite-1c-1b.tiff" FALSE) add_convert_test(tiffcp none "-c none" "images/quad-lzw-compat.tiff" FALSE) +add_convert_test(tiffcp noner1 "-c none -r 1" "images/lzw-single-strip.tiff" FALSE) add_convert_test_multi(tiffcp tiffcp "" logluv "-c none" "-c sgilog" "" "images/logluv-3c-16b.tiff" FALSE) add_convert_test_multi(tiffcp thumbnail "" thumbnail "g3:1d" "" "" @@ -380,3 +394,7 @@ add_convert_tests(tiffcrop doubleflip "-F both" TIFFIMAGES TRU add_convert_tests(tiffcrop extract "-U px -E top -X 60 -Y 60" TIFFIMAGES TRUE) # Test extracting the first and fourth quarters from the left side. add_convert_tests(tiffcrop extractz14 "-E left -Z1:4,2:4" TIFFIMAGES TRUE) + +# test types +add_test(NAME "testtypes" + COMMAND "testtypes") diff --git a/external/tiff-4.0.9/test/Makefile.am b/external/tiff-4.1.0/test/Makefile.am similarity index 94% rename from external/tiff-4.0.9/test/Makefile.am rename to external/tiff-4.1.0/test/Makefile.am index 2052487c..90c2f3d1 100644 --- a/external/tiff-4.0.9/test/Makefile.am +++ b/external/tiff-4.1.0/test/Makefile.am @@ -34,6 +34,7 @@ TESTS_ENVIRONMENT = \ MEMCHECK="$(MEMCHECK)" EXTRA_DIST = \ + $(REFFILES) \ $(TESTSCRIPTS) \ $(IMAGES_EXTRA_DIST) \ CMakeLists.txt \ @@ -63,6 +64,7 @@ endif # Executable programs which need to be built in order to support tests check_PROGRAMS = \ ascii_tag long_tag short_tag strip_rw rewrite custom_dir \ + defer_strile_loading defer_strile_writing testtypes \ $(JPEG_DEPENDENT_CHECK_PROG) # Test scripts to execute @@ -70,6 +72,7 @@ TESTSCRIPTS = \ ppm2tiff_pbm.sh \ ppm2tiff_pgm.sh \ ppm2tiff_ppm.sh \ + fax2tiff.sh \ tiffcp-g3.sh \ tiffcp-g3-1d.sh \ tiffcp-g3-1d-fill.sh \ @@ -79,6 +82,7 @@ TESTSCRIPTS = \ tiffcp-logluv.sh \ tiffcp-thumbnail.sh \ tiffcp-lzw-compat.sh \ + tiffcp-lzw-scanline-decode.sh \ tiffdump.sh \ tiffinfo.sh \ tiffcp-split.sh \ @@ -143,6 +147,14 @@ TESTSCRIPTS = \ tiff2rgba-rgb-3c-8b.sh \ $(JPEG_DEPENDENT_TESTSCRIPTS) +# This list should contain the references files +# from the 'refs' subdirectory +REFFILES = \ + refs/o-tiff2ps-EPS1.ps \ + refs/o-tiff2ps-PS1.ps \ + refs/o-tiff2ps-PS2.ps \ + refs/o-tiff2ps-PS3.ps + # This list should contain all of the TIFF files in the 'images' # subdirectory which are intended to be used as input images for # tests. All of these files should use the extension ".tiff". @@ -158,7 +170,8 @@ TIFFIMAGES = \ images/rgb-3c-16b.tiff \ images/rgb-3c-8b.tiff \ images/quad-tile.jpg.tiff \ - images/quad-lzw-compat.tiff + images/quad-lzw-compat.tiff \ + images/lzw-single-strip.tiff PNMIMAGES = \ images/minisblack-1c-8b.pgm \ @@ -170,6 +183,7 @@ PNMIMAGES = \ # files which are not currently used by the tests. IMAGES_EXTRA_DIST = \ images/README.txt \ + images/miniswhite-1c-1b.g3 \ $(PNMIMAGES) \ $(TIFFIMAGES) @@ -189,6 +203,10 @@ raw_decode_SOURCES = raw_decode.c raw_decode_LDADD = $(LIBTIFF) custom_dir_SOURCES = custom_dir.c custom_dir_LDADD = $(LIBTIFF) +defer_strile_loading_SOURCES = defer_strile_loading.c +defer_strile_loading_LDADD = $(LIBTIFF) +defer_strile_writing_SOURCES = defer_strile_writing.c +defer_strile_writing_LDADD = $(LIBTIFF) AM_CPPFLAGS = -I$(top_srcdir)/libtiff diff --git a/external/tiff-4.0.9/test/Makefile.in b/external/tiff-4.1.0/test/Makefile.in similarity index 91% rename from external/tiff-4.0.9/test/Makefile.in rename to external/tiff-4.1.0/test/Makefile.in index 15c0147b..5a2f0607 100644 --- a/external/tiff-4.0.9/test/Makefile.in +++ b/external/tiff-4.1.0/test/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -117,7 +117,9 @@ TESTS = $(check_PROGRAMS) $(am__EXEEXT_3) XFAIL_TESTS = check_PROGRAMS = ascii_tag$(EXEEXT) long_tag$(EXEEXT) \ short_tag$(EXEEXT) strip_rw$(EXEEXT) rewrite$(EXEEXT) \ - custom_dir$(EXEEXT) $(am__EXEEXT_1) + custom_dir$(EXEEXT) defer_strile_loading$(EXEEXT) \ + defer_strile_writing$(EXEEXT) testtypes$(EXEEXT) \ + $(am__EXEEXT_1) subdir = test ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ @@ -128,7 +130,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) -mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs +mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/libtiff/tif_config.h \ $(top_builddir)/libtiff/tiffconf.h CONFIG_CLEAN_FILES = @@ -144,6 +146,12 @@ am__v_lt_1 = am_custom_dir_OBJECTS = custom_dir.$(OBJEXT) custom_dir_OBJECTS = $(am_custom_dir_OBJECTS) custom_dir_DEPENDENCIES = $(LIBTIFF) +am_defer_strile_loading_OBJECTS = defer_strile_loading.$(OBJEXT) +defer_strile_loading_OBJECTS = $(am_defer_strile_loading_OBJECTS) +defer_strile_loading_DEPENDENCIES = $(LIBTIFF) +am_defer_strile_writing_OBJECTS = defer_strile_writing.$(OBJEXT) +defer_strile_writing_OBJECTS = $(am_defer_strile_writing_OBJECTS) +defer_strile_writing_DEPENDENCIES = $(LIBTIFF) am_long_tag_OBJECTS = long_tag.$(OBJEXT) check_tag.$(OBJEXT) long_tag_OBJECTS = $(am_long_tag_OBJECTS) long_tag_DEPENDENCIES = $(LIBTIFF) @@ -160,6 +168,9 @@ am_strip_rw_OBJECTS = strip_rw.$(OBJEXT) strip.$(OBJEXT) \ test_arrays.$(OBJEXT) strip_rw_OBJECTS = $(am_strip_rw_OBJECTS) strip_rw_DEPENDENCIES = $(LIBTIFF) +testtypes_SOURCES = testtypes.c +testtypes_OBJECTS = testtypes.$(OBJEXT) +testtypes_LDADD = $(LDADD) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false @@ -174,7 +185,15 @@ am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/libtiff depcomp = $(SHELL) $(top_srcdir)/config/depcomp -am__depfiles_maybe = depfiles +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = ./$(DEPDIR)/ascii_tag.Po \ + ./$(DEPDIR)/check_tag.Po ./$(DEPDIR)/custom_dir.Po \ + ./$(DEPDIR)/defer_strile_loading.Po \ + ./$(DEPDIR)/defer_strile_writing.Po ./$(DEPDIR)/long_tag.Po \ + ./$(DEPDIR)/raw_decode.Po ./$(DEPDIR)/rewrite_tag.Po \ + ./$(DEPDIR)/short_tag.Po ./$(DEPDIR)/strip.Po \ + ./$(DEPDIR)/strip_rw.Po ./$(DEPDIR)/test_arrays.Po \ + ./$(DEPDIR)/testtypes.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @@ -195,11 +214,15 @@ am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(ascii_tag_SOURCES) $(custom_dir_SOURCES) \ - $(long_tag_SOURCES) $(raw_decode_SOURCES) $(rewrite_SOURCES) \ - $(short_tag_SOURCES) $(strip_rw_SOURCES) + $(defer_strile_loading_SOURCES) \ + $(defer_strile_writing_SOURCES) $(long_tag_SOURCES) \ + $(raw_decode_SOURCES) $(rewrite_SOURCES) $(short_tag_SOURCES) \ + $(strip_rw_SOURCES) testtypes.c DIST_SOURCES = $(ascii_tag_SOURCES) $(custom_dir_SOURCES) \ - $(long_tag_SOURCES) $(raw_decode_SOURCES) $(rewrite_SOURCES) \ - $(short_tag_SOURCES) $(strip_rw_SOURCES) + $(defer_strile_loading_SOURCES) \ + $(defer_strile_writing_SOURCES) $(long_tag_SOURCES) \ + $(raw_decode_SOURCES) $(rewrite_SOURCES) $(short_tag_SOURCES) \ + $(strip_rw_SOURCES) testtypes.c am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ @@ -411,12 +434,13 @@ RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck @HAVE_JPEG_TRUE@am__EXEEXT_2 = tiff2rgba-quad-tile.jpg.sh am__EXEEXT_3 = ppm2tiff_pbm.sh ppm2tiff_pgm.sh ppm2tiff_ppm.sh \ - tiffcp-g3.sh tiffcp-g3-1d.sh tiffcp-g3-1d-fill.sh \ + fax2tiff.sh tiffcp-g3.sh tiffcp-g3-1d.sh tiffcp-g3-1d-fill.sh \ tiffcp-g3-2d.sh tiffcp-g3-2d-fill.sh tiffcp-g4.sh \ tiffcp-logluv.sh tiffcp-thumbnail.sh tiffcp-lzw-compat.sh \ - tiffdump.sh tiffinfo.sh tiffcp-split.sh tiffcp-split-join.sh \ - tiff2ps-PS1.sh tiff2ps-PS2.sh tiff2ps-PS3.sh tiff2ps-EPS1.sh \ - tiff2pdf.sh tiffcrop-doubleflip-logluv-3c-16b.sh \ + tiffcp-lzw-scanline-decode.sh tiffdump.sh tiffinfo.sh \ + tiffcp-split.sh tiffcp-split-join.sh tiff2ps-PS1.sh \ + tiff2ps-PS2.sh tiff2ps-PS3.sh tiff2ps-EPS1.sh tiff2pdf.sh \ + tiffcrop-doubleflip-logluv-3c-16b.sh \ tiffcrop-doubleflip-minisblack-1c-16b.sh \ tiffcrop-doubleflip-minisblack-1c-8b.sh \ tiffcrop-doubleflip-minisblack-2c-8b-alpha.sh \ @@ -479,7 +503,6 @@ TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp \ - $(top_srcdir)/config/mkinstalldirs \ $(top_srcdir)/config/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ @@ -640,6 +663,7 @@ TESTS_ENVIRONMENT = \ MEMCHECK="$(MEMCHECK)" EXTRA_DIST = \ + $(REFFILES) \ $(TESTSCRIPTS) \ $(IMAGES_EXTRA_DIST) \ CMakeLists.txt \ @@ -663,6 +687,7 @@ TESTSCRIPTS = \ ppm2tiff_pbm.sh \ ppm2tiff_pgm.sh \ ppm2tiff_ppm.sh \ + fax2tiff.sh \ tiffcp-g3.sh \ tiffcp-g3-1d.sh \ tiffcp-g3-1d-fill.sh \ @@ -672,6 +697,7 @@ TESTSCRIPTS = \ tiffcp-logluv.sh \ tiffcp-thumbnail.sh \ tiffcp-lzw-compat.sh \ + tiffcp-lzw-scanline-decode.sh \ tiffdump.sh \ tiffinfo.sh \ tiffcp-split.sh \ @@ -737,6 +763,15 @@ TESTSCRIPTS = \ $(JPEG_DEPENDENT_TESTSCRIPTS) +# This list should contain the references files +# from the 'refs' subdirectory +REFFILES = \ + refs/o-tiff2ps-EPS1.ps \ + refs/o-tiff2ps-PS1.ps \ + refs/o-tiff2ps-PS2.ps \ + refs/o-tiff2ps-PS3.ps + + # This list should contain all of the TIFF files in the 'images' # subdirectory which are intended to be used as input images for # tests. All of these files should use the extension ".tiff". @@ -752,7 +787,8 @@ TIFFIMAGES = \ images/rgb-3c-16b.tiff \ images/rgb-3c-8b.tiff \ images/quad-tile.jpg.tiff \ - images/quad-lzw-compat.tiff + images/quad-lzw-compat.tiff \ + images/lzw-single-strip.tiff PNMIMAGES = \ images/minisblack-1c-8b.pgm \ @@ -765,6 +801,7 @@ PNMIMAGES = \ # files which are not currently used by the tests. IMAGES_EXTRA_DIST = \ images/README.txt \ + images/miniswhite-1c-1b.g3 \ $(PNMIMAGES) \ $(TIFFIMAGES) @@ -783,6 +820,10 @@ raw_decode_SOURCES = raw_decode.c raw_decode_LDADD = $(LIBTIFF) custom_dir_SOURCES = custom_dir.c custom_dir_LDADD = $(LIBTIFF) +defer_strile_loading_SOURCES = defer_strile_loading.c +defer_strile_loading_LDADD = $(LIBTIFF) +defer_strile_writing_SOURCES = defer_strile_writing.c +defer_strile_writing_LDADD = $(LIBTIFF) AM_CPPFLAGS = -I$(top_srcdir)/libtiff all: all-am @@ -805,8 +846,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -835,6 +876,14 @@ custom_dir$(EXEEXT): $(custom_dir_OBJECTS) $(custom_dir_DEPENDENCIES) $(EXTRA_cu @rm -f custom_dir$(EXEEXT) $(AM_V_CCLD)$(LINK) $(custom_dir_OBJECTS) $(custom_dir_LDADD) $(LIBS) +defer_strile_loading$(EXEEXT): $(defer_strile_loading_OBJECTS) $(defer_strile_loading_DEPENDENCIES) $(EXTRA_defer_strile_loading_DEPENDENCIES) + @rm -f defer_strile_loading$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(defer_strile_loading_OBJECTS) $(defer_strile_loading_LDADD) $(LIBS) + +defer_strile_writing$(EXEEXT): $(defer_strile_writing_OBJECTS) $(defer_strile_writing_DEPENDENCIES) $(EXTRA_defer_strile_writing_DEPENDENCIES) + @rm -f defer_strile_writing$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(defer_strile_writing_OBJECTS) $(defer_strile_writing_LDADD) $(LIBS) + long_tag$(EXEEXT): $(long_tag_OBJECTS) $(long_tag_DEPENDENCIES) $(EXTRA_long_tag_DEPENDENCIES) @rm -f long_tag$(EXEEXT) $(AM_V_CCLD)$(LINK) $(long_tag_OBJECTS) $(long_tag_LDADD) $(LIBS) @@ -855,22 +904,35 @@ strip_rw$(EXEEXT): $(strip_rw_OBJECTS) $(strip_rw_DEPENDENCIES) $(EXTRA_strip_rw @rm -f strip_rw$(EXEEXT) $(AM_V_CCLD)$(LINK) $(strip_rw_OBJECTS) $(strip_rw_LDADD) $(LIBS) +testtypes$(EXEEXT): $(testtypes_OBJECTS) $(testtypes_DEPENDENCIES) $(EXTRA_testtypes_DEPENDENCIES) + @rm -f testtypes$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(testtypes_OBJECTS) $(testtypes_LDADD) $(LIBS) + mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ascii_tag.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_tag.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/custom_dir.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/long_tag.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/raw_decode.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rewrite_tag.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/short_tag.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strip.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strip_rw.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_arrays.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ascii_tag.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_tag.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/custom_dir.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/defer_strile_loading.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/defer_strile_writing.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/long_tag.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/raw_decode.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rewrite_tag.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/short_tag.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strip.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strip_rw.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_arrays.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testtypes.Po@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @@ -1071,7 +1133,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS) fi; \ $$success || exit 1 -check-TESTS: +check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @@ -1134,6 +1196,27 @@ custom_dir.log: custom_dir$(EXEEXT) --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +defer_strile_loading.log: defer_strile_loading$(EXEEXT) + @p='defer_strile_loading$(EXEEXT)'; \ + b='defer_strile_loading'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +defer_strile_writing.log: defer_strile_writing$(EXEEXT) + @p='defer_strile_writing$(EXEEXT)'; \ + b='defer_strile_writing'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +testtypes.log: testtypes$(EXEEXT) + @p='testtypes$(EXEEXT)'; \ + b='testtypes'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) raw_decode.log: raw_decode$(EXEEXT) @p='raw_decode$(EXEEXT)'; \ b='raw_decode'; \ @@ -1162,6 +1245,13 @@ ppm2tiff_ppm.sh.log: ppm2tiff_ppm.sh --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +fax2tiff.sh.log: fax2tiff.sh + @p='fax2tiff.sh'; \ + b='fax2tiff.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) tiffcp-g3.sh.log: tiffcp-g3.sh @p='tiffcp-g3.sh'; \ b='tiffcp-g3.sh'; \ @@ -1225,6 +1315,13 @@ tiffcp-lzw-compat.sh.log: tiffcp-lzw-compat.sh --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +tiffcp-lzw-scanline-decode.sh.log: tiffcp-lzw-scanline-decode.sh + @p='tiffcp-lzw-scanline-decode.sh'; \ + b='tiffcp-lzw-scanline-decode.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) tiffdump.sh.log: tiffdump.sh @p='tiffdump.sh'; \ b='tiffdump.sh'; \ @@ -1681,7 +1778,10 @@ tiff2rgba-quad-tile.jpg.sh.log: tiff2rgba-quad-tile.jpg.sh @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -1757,7 +1857,19 @@ clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/ascii_tag.Po + -rm -f ./$(DEPDIR)/check_tag.Po + -rm -f ./$(DEPDIR)/custom_dir.Po + -rm -f ./$(DEPDIR)/defer_strile_loading.Po + -rm -f ./$(DEPDIR)/defer_strile_writing.Po + -rm -f ./$(DEPDIR)/long_tag.Po + -rm -f ./$(DEPDIR)/raw_decode.Po + -rm -f ./$(DEPDIR)/rewrite_tag.Po + -rm -f ./$(DEPDIR)/short_tag.Po + -rm -f ./$(DEPDIR)/strip.Po + -rm -f ./$(DEPDIR)/strip_rw.Po + -rm -f ./$(DEPDIR)/test_arrays.Po + -rm -f ./$(DEPDIR)/testtypes.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags @@ -1803,7 +1915,19 @@ install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/ascii_tag.Po + -rm -f ./$(DEPDIR)/check_tag.Po + -rm -f ./$(DEPDIR)/custom_dir.Po + -rm -f ./$(DEPDIR)/defer_strile_loading.Po + -rm -f ./$(DEPDIR)/defer_strile_writing.Po + -rm -f ./$(DEPDIR)/long_tag.Po + -rm -f ./$(DEPDIR)/raw_decode.Po + -rm -f ./$(DEPDIR)/rewrite_tag.Po + -rm -f ./$(DEPDIR)/short_tag.Po + -rm -f ./$(DEPDIR)/strip.Po + -rm -f ./$(DEPDIR)/strip_rw.Po + -rm -f ./$(DEPDIR)/test_arrays.Po + -rm -f ./$(DEPDIR)/testtypes.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic @@ -1824,16 +1948,16 @@ uninstall-am: .MAKE: check-am install-am install-strip -.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \ - clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \ - ctags ctags-am distclean distclean-compile distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-man install-pdf install-pdf-am \ - install-ps install-ps-am install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ +.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ + check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ + cscopelist-am ctags ctags-am distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am diff --git a/external/tiff-4.0.9/test/TiffSplitTest.cmake b/external/tiff-4.1.0/test/TiffSplitTest.cmake similarity index 100% rename from external/tiff-4.0.9/test/TiffSplitTest.cmake rename to external/tiff-4.1.0/test/TiffSplitTest.cmake diff --git a/external/tiff-4.0.9/test/TiffTest.cmake b/external/tiff-4.1.0/test/TiffTest.cmake similarity index 100% rename from external/tiff-4.0.9/test/TiffTest.cmake rename to external/tiff-4.1.0/test/TiffTest.cmake diff --git a/external/tiff-4.0.9/test/TiffTestCommon.cmake b/external/tiff-4.1.0/test/TiffTestCommon.cmake similarity index 100% rename from external/tiff-4.0.9/test/TiffTestCommon.cmake rename to external/tiff-4.1.0/test/TiffTestCommon.cmake diff --git a/external/tiff-4.0.9/test/ascii_tag.c b/external/tiff-4.1.0/test/ascii_tag.c similarity index 98% rename from external/tiff-4.0.9/test/ascii_tag.c rename to external/tiff-4.1.0/test/ascii_tag.c index 6337900b..9a56d31d 100644 --- a/external/tiff-4.0.9/test/ascii_tag.c +++ b/external/tiff-4.1.0/test/ascii_tag.c @@ -1,5 +1,3 @@ -/* $Id: ascii_tag.c,v 1.8 2013-12-17 14:41:57 bfriesen Exp $ */ - /* * Copyright (c) 2004, Andrey Kiselev * diff --git a/external/tiff-4.0.9/test/check_tag.c b/external/tiff-4.1.0/test/check_tag.c similarity index 97% rename from external/tiff-4.0.9/test/check_tag.c rename to external/tiff-4.1.0/test/check_tag.c index 43011800..5750d683 100644 --- a/external/tiff-4.0.9/test/check_tag.c +++ b/external/tiff-4.1.0/test/check_tag.c @@ -1,5 +1,3 @@ -/* $Id: check_tag.c,v 1.3 2008/04/15 14:19:37 dron Exp $ */ - /* * Copyright (c) 2004, Andrey Kiselev * diff --git a/external/tiff-4.0.9/test/common.sh b/external/tiff-4.1.0/test/common.sh similarity index 97% rename from external/tiff-4.0.9/test/common.sh rename to external/tiff-4.1.0/test/common.sh index 6b1380dd..5bebcd37 100644 --- a/external/tiff-4.0.9/test/common.sh +++ b/external/tiff-4.1.0/test/common.sh @@ -7,6 +7,7 @@ SRCDIR=`cd $SRCDIR && pwd` TOPSRCDIR=`cd $srcdir/.. && pwd` TOOLS=`cd ../tools && pwd` IMAGES="${SRCDIR}/images" +REFS="${SRCDIR}/refs" # Aliases for built tools FAX2PS=${TOOLS}/fax2ps @@ -41,6 +42,7 @@ IMG_RGB_3C_16B=${IMAGES}/rgb-3c-16b.tiff IMG_RGB_3C_8B=${IMAGES}/rgb-3c-8b.tiff IMG_MINISBLACK_2C_8B_ALPHA=${IMAGES}/minisblack-2c-8b-alpha.tiff IMG_QUAD_LZW_COMPAT=${IMAGES}/quad-lzw-compat.tiff +IMG_LZW_SINGLE_STROP=${IMAGES}/lzw-single-strip.tiff IMG_MINISWHITE_1C_1B_PBM=${IMAGES}/miniswhite-1c-1b.pbm IMG_MINISBLACK_1C_8B_PGM=${IMAGES}/minisblack-1c-8b.pgm diff --git a/external/tiff-4.0.9/test/custom_dir.c b/external/tiff-4.1.0/test/custom_dir.c similarity index 99% rename from external/tiff-4.0.9/test/custom_dir.c rename to external/tiff-4.1.0/test/custom_dir.c index acf55ce5..3b3ad279 100644 --- a/external/tiff-4.0.9/test/custom_dir.c +++ b/external/tiff-4.1.0/test/custom_dir.c @@ -1,5 +1,3 @@ -/* $Id: custom_dir.c,v 1.3 2013-12-17 14:41:58 bfriesen Exp $ */ - /* * Copyright (c) 2012, Frank Warmerdam * diff --git a/external/tiff-4.1.0/test/defer_strile_loading.c b/external/tiff-4.1.0/test/defer_strile_loading.c new file mode 100644 index 00000000..b444c01f --- /dev/null +++ b/external/tiff-4.1.0/test/defer_strile_loading.c @@ -0,0 +1,311 @@ +/* + * Copyright (c) 2019, Even Rouault + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the names of + * Sam Leffler and Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Sam Leffler and Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +/* + * TIFF Library + * + * Module to test 'D' and 'O' open flags + */ + +#include "tif_config.h" + +#include +#include +#include + +#ifdef HAVE_UNISTD_H +# include +#endif + +#include "tiffio.h" +#include "tifftest.h" + +int test(int classictif, int height, int tiled) +{ + const char* filename = "defer_strile_loading.tif"; + TIFF* tif; + int i; + int ret = 0; + FILE* f; + + (void)ret; + + tif = TIFFOpen(filename, classictif ? "wDO" : "w8DO"); /* O should be ignored in write mode */ + if(!tif) + { + fprintf(stderr, "cannot create %s\n", filename); + return 1; + } + ret = TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_NONE); + assert(ret); + ret = TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, 1); + assert(ret); + ret = TIFFSetField(tif, TIFFTAG_IMAGELENGTH, height); + assert(ret); + ret = TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 8); + assert(ret); + ret = TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 1); + assert(ret); + ret = TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); + assert(ret); + if( tiled ) + { + int j; + ret = TIFFSetField(tif, TIFFTAG_TILEWIDTH, 16); + assert( ret ); + ret = TIFFSetField(tif, TIFFTAG_TILELENGTH, 16); + assert( ret ); + for( j = 0; j < (height+15) / 16; j++ ) + { + unsigned char tilebuffer[256]; + memset(tilebuffer, (unsigned char)j, 256); + ret = TIFFWriteEncodedTile( tif, j, tilebuffer, 256 ); + assert(ret == 256); + } + } + else + { + ret = TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, 1); + assert(ret); + for( i = 0; i < height; i++ ) + { + unsigned char c = (unsigned char)i; + ret = TIFFWriteEncodedStrip( tif, i, &c, 1 ); + assert(ret == 1); + + if( i == 1 && height > 100000 ) + i = height - 2; + } + } + TIFFClose(tif); + + f = fopen(filename, "rb"); + if( !f ) + return 1; + + for( i = 0; i < 2; i++ ) + { + tif = TIFFOpen(filename, i == 0 ? "rD" : "rO"); + if(!tif) + { + fprintf(stderr, "cannot open %s\n", filename); + fclose(f); + return 1; + } + if( tiled ) + { + int j; + for( j = 0; j < (height+15) / 16; j++ ) + { + int retry; + unsigned char expected_c = (unsigned char)j; + + for( retry = 0; retry < 2; retry++ ) + { + unsigned char tilebuffer[256]; + memset(tilebuffer,0, 256); + ret = TIFFReadEncodedTile( tif, j, tilebuffer, 256 ); + assert(ret == 256); + if( tilebuffer[0] != expected_c || + tilebuffer[255] != expected_c ) + { + fprintf(stderr, "unexpected value at tile %d: %d %d\n", + j, tilebuffer[0], tilebuffer[255]); + TIFFClose(tif); + fclose(f); + return 1; + } + } + + { + int err = 0; + int offset, size; + unsigned char inputbuffer[256]; + unsigned char tilebuffer[256]; + + offset = TIFFGetStrileOffsetWithErr(tif, j, &err); + assert(offset != 0); + assert(err == 0); + + size = TIFFGetStrileByteCountWithErr(tif, j, &err); + assert(size == 256); + assert(err == 0); + + fseek(f, offset, SEEK_SET); + fread(inputbuffer, 256, 1, f); + + memset(tilebuffer,0, 256); + ret = TIFFReadFromUserBuffer(tif, j, + inputbuffer, 256, + tilebuffer, 256 ); + assert(ret == 1); + if( tilebuffer[0] != expected_c || + tilebuffer[255] != expected_c ) + { + fprintf(stderr, "unexpected value at tile %d: %d %d\n", + j, tilebuffer[0], tilebuffer[255]); + TIFFClose(tif); + fclose(f); + return 1; + } + } + } + } + else + { + int j; + for( j = 0; j < height; j++ ) + { + int retry; + unsigned char expected_c = (unsigned char)j; + for( retry = 0; retry < 2; retry++ ) + { + unsigned char c = 0; + ret = TIFFReadEncodedStrip( tif, j, &c, 1 ); + assert(ret == 1); + if( c != expected_c ) + { + fprintf(stderr, "unexpected value at line %d: %d\n", + j, c); + TIFFClose(tif); + fclose(f); + return 1; + } + } + + { + int err = 0; + int offset, size; + unsigned char inputbuffer[1]; + unsigned char tilebuffer[1]; + + offset = TIFFGetStrileOffsetWithErr(tif, j, &err); + assert(offset != 0); + assert(err == 0); + + size = TIFFGetStrileByteCountWithErr(tif, j, &err); + assert(size == 1); + assert(err == 0); + + fseek(f, offset, SEEK_SET); + fread(inputbuffer, 1, 1, f); + + memset(tilebuffer,0, 1); + ret = TIFFReadFromUserBuffer(tif, j, + inputbuffer, 1, + tilebuffer, 1 ); + assert(ret == 1); + if( tilebuffer[0] != expected_c ) + { + fprintf(stderr, "unexpected value at line %d: %d\n", + j, tilebuffer[0]); + TIFFClose(tif); + fclose(f); + return 1; + } + } + + if( j == 1 && height > 100000 ) + j = height - 2; + } + + if( height > 100000 ) + { + /* Missing strip */ + int err = 0; + ret = TIFFGetStrileOffsetWithErr(tif, 2, &err); + assert(ret == 0); + assert(err == 0); + + ret = TIFFGetStrileByteCountWithErr(tif, 2, &err); + assert(ret == 0); + assert(err == 0); + + } + } + + { + int err = 0; + ret = TIFFGetStrileOffsetWithErr(tif, 0xFFFFFFFFU, &err); + assert(ret == 0); + assert(err == 1); + + ret = TIFFGetStrileByteCountWithErr(tif, 0xFFFFFFFFU, &err); + assert(ret == 0); + assert(err == 1); + } + + { + toff_t* offsets = NULL; + toff_t* bytecounts = NULL; + ret = TIFFGetField( tif, + tiled ? TIFFTAG_TILEOFFSETS : TIFFTAG_STRIPOFFSETS, &offsets ); + assert(ret); + assert(offsets); + ret = TIFFGetField( tif, + tiled ? TIFFTAG_TILEBYTECOUNTS : TIFFTAG_STRIPBYTECOUNTS, &bytecounts ); + assert(ret); + assert(bytecounts); + if( tiled ) + { + assert(bytecounts[0] == 256); + } + else + { + assert(bytecounts[0] == 1); + if( height > 1 && height <= 100000) + { + assert(offsets[1] == offsets[0] + 1); + assert(offsets[height - 1] == offsets[0] + height - 1); + } + assert(bytecounts[height - 1] == 1); + } + } + + TIFFClose(tif); + } + fclose(f); + + unlink(filename); + return 0; +} + +int +main() +{ + int is_classic; + for( is_classic = 1; is_classic >= 0; is_classic-- ) + { + int tiled; + for( tiled = 0; tiled <= 1; tiled ++ ) + { + if( test(is_classic, 1, tiled) ) + return 1; + if( test(is_classic, 8192, tiled) ) + return 1; + } + if( test(is_classic, 2000000, 0) ) + return 1; + } + return 0; +} diff --git a/external/tiff-4.1.0/test/defer_strile_writing.c b/external/tiff-4.1.0/test/defer_strile_writing.c new file mode 100644 index 00000000..4e358567 --- /dev/null +++ b/external/tiff-4.1.0/test/defer_strile_writing.c @@ -0,0 +1,239 @@ +/* + * Copyright (c) 2019, Even Rouault + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the names of + * Sam Leffler and Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Sam Leffler and Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +/* + * TIFF Library + * + * Module to test TIFFDeferStrileArrayWriting and TIFFForceStrileArrayWriting + */ + +#include "tif_config.h" + +#include +#include +#include + +#ifdef HAVE_UNISTD_H +# include +#endif + +#include "tiffio.h" + +int test(const char* mode, int tiled, int height) +{ + const char* filename = "defer_strile_writing.tif"; + TIFF* tif; + int i; + int ret = 0; + (void)ret; + + tif = TIFFOpen(filename, mode); + if(!tif) + { + fprintf(stderr, "cannot create %s\n", filename); + return 1; + } + ret = TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_NONE); + assert(ret); + ret = TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, 1); + assert(ret); + ret = TIFFSetField(tif, TIFFTAG_IMAGELENGTH, height); + assert(ret); + ret = TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 8); + assert(ret); + ret = TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 1); + assert(ret); + ret = TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); + assert(ret); + + if( tiled ) + { + ret = TIFFSetField(tif, TIFFTAG_TILEWIDTH, 16); + assert( ret ); + ret = TIFFSetField(tif, TIFFTAG_TILELENGTH, 16); + assert( ret ); + } + else + { + ret = TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, 1); + assert(ret); + } + + ret = TIFFDeferStrileArrayWriting(tif); + assert(ret); + + ret = TIFFWriteCheck( tif, tiled, "test" ); + assert(ret); + + ret = TIFFWriteDirectory( tif ); + assert(ret); + + /* Create other directory */ + TIFFFreeDirectory( tif ); + TIFFCreateDirectory( tif ); + + ret = TIFFSetField( tif, TIFFTAG_SUBFILETYPE, FILETYPE_PAGE ); + assert(ret); + ret = TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_NONE); + assert(ret); + ret = TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, 1); + assert(ret); + ret = TIFFSetField(tif, TIFFTAG_IMAGELENGTH, 1); + assert(ret); + ret = TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 8); + assert(ret); + ret = TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 1); + assert(ret); + ret = TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); + assert(ret); + ret = TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, 1); + assert(ret); + + ret = TIFFDeferStrileArrayWriting(tif); + assert(ret); + + ret = TIFFWriteCheck( tif, 0, "test" ); + assert(ret); + + ret = TIFFWriteDirectory( tif ); + assert(ret); + + /* Force writing of strile arrays */ + ret = TIFFSetDirectory( tif, 0 ); + assert(ret); + + ret = TIFFForceStrileArrayWriting(tif); + assert(ret); + + ret = TIFFSetDirectory( tif, 1 ); + assert(ret); + + ret = TIFFForceStrileArrayWriting(tif); + assert(ret); + + /* Now write data on frist directory */ + ret = TIFFSetDirectory( tif, 0 ); + assert(ret); + + if( tiled ) + { + int j; + for( j = 0; j < (height+15) / 16; j++ ) + { + unsigned char tilebuffer[256]; + memset(tilebuffer, (unsigned char)j, 256); + ret = TIFFWriteEncodedTile( tif, j, tilebuffer, 256 ); + assert(ret == 256); + } + } + else + { + for( i = 0; i < height; i++ ) + { + unsigned char c = (unsigned char)i; + ret = TIFFWriteEncodedStrip( tif, i, &c, 1 ); + assert(ret == 1); + + if( i == 1 && height > 100000 ) + i = height - 2; + } + } + + TIFFClose(tif); + + tif = TIFFOpen(filename, "r"); + if(!tif) + { + fprintf(stderr, "cannot open %s\n", filename); + return 1; + } + if( tiled ) + { + int j; + for( j = 0; j < (height+15) / 16; j++ ) + { + int retry; + for( retry = 0; retry < 2; retry++ ) + { + unsigned char tilebuffer[256]; + unsigned char expected_c = (unsigned char)j; + memset(tilebuffer,0, 256); + ret = TIFFReadEncodedTile( tif, j, tilebuffer, 256 ); + assert(ret == 256); + if( tilebuffer[0] != expected_c || + tilebuffer[255] != expected_c ) + { + fprintf(stderr, "unexpected value at tile %d: %d %d\n", + j, tilebuffer[0], tilebuffer[255]); + TIFFClose(tif); + return 1; + } + } + } + } + else + { + int j; + for( j = 0; j < height; j++ ) + { + int retry; + for( retry = 0; retry < 2; retry++ ) + { + unsigned char c = 0; + unsigned char expected_c = (unsigned char)j; + ret = TIFFReadEncodedStrip( tif, j, &c, 1 ); + assert(ret == 1); + if( c != expected_c ) + { + fprintf(stderr, "unexpected value at line %d: %d\n", + j, c); + TIFFClose(tif); + return 1; + } + } + } + } + + TIFFClose(tif); + + unlink(filename); + return 0; +} + +int +main() +{ + int tiled; + for( tiled = 0; tiled <= 1; tiled ++ ) + { + if( test("w", tiled, 1) ) + return 1; + if( test("w", tiled, 10) ) + return 1; + if( test("w8", tiled, 1) ) + return 1; + if( test("wD", tiled, 1) ) + return 1; + } + return 0; +} diff --git a/external/tiff-4.1.0/test/fax2tiff.sh b/external/tiff-4.1.0/test/fax2tiff.sh new file mode 100755 index 00000000..8806a647 --- /dev/null +++ b/external/tiff-4.1.0/test/fax2tiff.sh @@ -0,0 +1,17 @@ +#!/bin/sh +# +# Basic sanity check for fax2tiff +# +. ${srcdir:-.}/common.sh +infile="${IMAGES}/miniswhite-1c-1b.g3" +outfile="o-fax2tiff.tiff" +rm -f $outfile +echo "$MEMCHECK ${FAX2TIFF} -M -o $outfile $infile" +eval $MEMCHECK ${FAX2TIFF} -M -o $outfile $infile +status=$? +if [ $status != 0 ] ; then + echo "Returned failed status $status!" + echo "Output (if any) is in \"${outfile}\"." + exit $status +fi +f_tiffinfo_validate $outfile diff --git a/external/tiff-4.0.9/test/images/README.txt b/external/tiff-4.1.0/test/images/README.txt similarity index 94% rename from external/tiff-4.0.9/test/images/README.txt rename to external/tiff-4.1.0/test/images/README.txt index 17f6292e..b6447d8e 100644 --- a/external/tiff-4.0.9/test/images/README.txt +++ b/external/tiff-4.1.0/test/images/README.txt @@ -27,3 +27,6 @@ PNM files: minisblack-1c-8b.pgm miniswhite-1c-1b.pbm rgb-3c-8b.ppm + +G3 Fax files : + miniswhite-1c-1b.g3 diff --git a/external/tiff-4.0.9/test/images/logluv-3c-16b.tiff b/external/tiff-4.1.0/test/images/logluv-3c-16b.tiff similarity index 100% rename from external/tiff-4.0.9/test/images/logluv-3c-16b.tiff rename to external/tiff-4.1.0/test/images/logluv-3c-16b.tiff diff --git a/external/tiff-4.1.0/test/images/lzw-single-strip.tiff b/external/tiff-4.1.0/test/images/lzw-single-strip.tiff new file mode 100644 index 0000000000000000000000000000000000000000..0ac27c6d82d2f45551fb1e1f1e547ba3210556f5 GIT binary patch literal 76264 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 G@BaZA+Ye6w literal 0 HcmV?d00001 diff --git a/external/tiff-4.0.9/test/images/miniswhite-1c-1b.pbm b/external/tiff-4.1.0/test/images/miniswhite-1c-1b.pbm similarity index 100% rename from external/tiff-4.0.9/test/images/miniswhite-1c-1b.pbm rename to external/tiff-4.1.0/test/images/miniswhite-1c-1b.pbm diff --git a/external/tiff-4.0.9/test/images/miniswhite-1c-1b.tiff b/external/tiff-4.1.0/test/images/miniswhite-1c-1b.tiff similarity index 100% rename from external/tiff-4.0.9/test/images/miniswhite-1c-1b.tiff rename to external/tiff-4.1.0/test/images/miniswhite-1c-1b.tiff diff --git a/external/tiff-4.0.9/test/images/palette-1c-1b.tiff b/external/tiff-4.1.0/test/images/palette-1c-1b.tiff similarity index 100% rename from external/tiff-4.0.9/test/images/palette-1c-1b.tiff rename to external/tiff-4.1.0/test/images/palette-1c-1b.tiff diff --git a/external/tiff-4.0.9/test/images/palette-1c-4b.tiff b/external/tiff-4.1.0/test/images/palette-1c-4b.tiff similarity index 100% rename from external/tiff-4.0.9/test/images/palette-1c-4b.tiff rename to external/tiff-4.1.0/test/images/palette-1c-4b.tiff diff --git a/external/tiff-4.0.9/test/images/palette-1c-8b.tiff b/external/tiff-4.1.0/test/images/palette-1c-8b.tiff similarity index 100% rename from external/tiff-4.0.9/test/images/palette-1c-8b.tiff rename to external/tiff-4.1.0/test/images/palette-1c-8b.tiff diff --git a/external/tiff-4.0.9/test/images/quad-lzw-compat.tiff b/external/tiff-4.1.0/test/images/quad-lzw-compat.tiff similarity index 100% rename from external/tiff-4.0.9/test/images/quad-lzw-compat.tiff rename to external/tiff-4.1.0/test/images/quad-lzw-compat.tiff diff --git a/external/tiff-4.0.9/test/images/quad-tile.jpg.tiff b/external/tiff-4.1.0/test/images/quad-tile.jpg.tiff similarity index 100% rename from external/tiff-4.0.9/test/images/quad-tile.jpg.tiff rename to external/tiff-4.1.0/test/images/quad-tile.jpg.tiff diff --git a/external/tiff-4.0.9/test/images/rgb-3c-16b.tiff b/external/tiff-4.1.0/test/images/rgb-3c-16b.tiff similarity index 100% rename from external/tiff-4.0.9/test/images/rgb-3c-16b.tiff rename to external/tiff-4.1.0/test/images/rgb-3c-16b.tiff diff --git a/external/tiff-4.0.9/test/images/rgb-3c-8b.ppm b/external/tiff-4.1.0/test/images/rgb-3c-8b.ppm similarity index 100% rename from external/tiff-4.0.9/test/images/rgb-3c-8b.ppm rename to external/tiff-4.1.0/test/images/rgb-3c-8b.ppm diff --git a/external/tiff-4.0.9/test/images/rgb-3c-8b.tiff b/external/tiff-4.1.0/test/images/rgb-3c-8b.tiff similarity index 100% rename from external/tiff-4.0.9/test/images/rgb-3c-8b.tiff rename to external/tiff-4.1.0/test/images/rgb-3c-8b.tiff diff --git a/external/tiff-4.0.9/test/long_tag.c b/external/tiff-4.1.0/test/long_tag.c similarity index 98% rename from external/tiff-4.0.9/test/long_tag.c rename to external/tiff-4.1.0/test/long_tag.c index ab1440af..4bfdf805 100644 --- a/external/tiff-4.0.9/test/long_tag.c +++ b/external/tiff-4.1.0/test/long_tag.c @@ -1,5 +1,3 @@ -/* $Id: long_tag.c,v 1.5 2013-12-17 14:41:58 bfriesen Exp $ */ - /* * Copyright (c) 2004, Andrey Kiselev * diff --git a/external/tiff-4.0.9/test/ppm2tiff_pbm.sh b/external/tiff-4.1.0/test/ppm2tiff_pbm.sh similarity index 100% rename from external/tiff-4.0.9/test/ppm2tiff_pbm.sh rename to external/tiff-4.1.0/test/ppm2tiff_pbm.sh diff --git a/external/tiff-4.0.9/test/ppm2tiff_pgm.sh b/external/tiff-4.1.0/test/ppm2tiff_pgm.sh similarity index 100% rename from external/tiff-4.0.9/test/ppm2tiff_pgm.sh rename to external/tiff-4.1.0/test/ppm2tiff_pgm.sh diff --git a/external/tiff-4.0.9/test/ppm2tiff_ppm.sh b/external/tiff-4.1.0/test/ppm2tiff_ppm.sh similarity index 100% rename from external/tiff-4.0.9/test/ppm2tiff_ppm.sh rename to external/tiff-4.1.0/test/ppm2tiff_ppm.sh diff --git a/external/tiff-4.0.9/test/raw_decode.c b/external/tiff-4.1.0/test/raw_decode.c similarity index 99% rename from external/tiff-4.0.9/test/raw_decode.c rename to external/tiff-4.1.0/test/raw_decode.c index f81aa059..a2fca03a 100644 --- a/external/tiff-4.0.9/test/raw_decode.c +++ b/external/tiff-4.1.0/test/raw_decode.c @@ -1,5 +1,3 @@ -/* $Id: raw_decode.c,v 1.7 2015-08-16 20:08:21 bfriesen Exp $ */ - /* * Copyright (c) 2012, Frank Warmerdam * diff --git a/external/tiff-4.1.0/test/refs/o-tiff2ps-EPS1.ps b/external/tiff-4.1.0/test/refs/o-tiff2ps-EPS1.ps new file mode 100644 index 0000000000000000000000000000000000000000..9d9da8a28fa50ac25e21d0229d2fae394894dbbd GIT binary patch literal 6599 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 E2N6I@s{jB1 literal 0 HcmV?d00001 diff --git a/external/tiff-4.1.0/test/refs/o-tiff2ps-PS2.ps b/external/tiff-4.1.0/test/refs/o-tiff2ps-PS2.ps new file mode 100644 index 0000000000000000000000000000000000000000..e7fe4339a59d78ab296d02af2c44d3043b6c249b GIT binary patch literal 4912 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 JN9u!y=idMoaxMS> literal 0 HcmV?d00001 diff --git a/external/tiff-4.1.0/test/refs/o-tiff2ps-PS3.ps b/external/tiff-4.1.0/test/refs/o-tiff2ps-PS3.ps new file mode 100644 index 0000000000000000000000000000000000000000..6ec22b9b947993b0547e8dc2ce5fdcbbfbfa0d52 GIT binary patch literal 4912 zcmZ`-cblq8^8VjXL4%3`^Pr46=7>3`F(LwrpfudQclNpa*|!>J&e{Ei^E^kT-m14k zS6BDoL&Hg=d^S&VBo&Q&e7>qBA8pghQnq%vBp(<=Q_a@pEOplm4gW*cY&nvUB8gL! zX#7}crcpcEpfz=5s{F7hDoG{M*;FbUk5kEb;vE!grsUjZ!v@7;ma6LV(a2OZ8<2se zDVmX`;uHy?VmiiIGn9(?rz@fodu@INB;D>Dt5nK|W3=^G`~#WDKdx9*TN{@GVo< z;Y%_fe^It|G_VdX0F(ceR4PR!UJBSb{r3ZbK}&Kh3qp86bZ7YwO_He?iFBfU$&@17 z)KNE&XX;@-{ukp}`{Oqwc{rZ%%PIT-?eCBjoBHQV{5PdtzM0O>0|L_tM1ErFsLRyf z@C1(FTf4|QmR~h`)#O#bEEtjUk_cffAnv0LE1IRC-e(|r5E}yize|&#&YEOXCsOVI z$aF*2E*f|LktO{3xuwqX<)=ojB`h9=<^QOcC!dF8V?$HdBu&PY`$z;oRZIa~D0m8m z|6%7YvnK(4_d6ud{~d-~ACHe3n%JI5miDkIx3i$erlJ28^~7rK+BL1?U&M=K>ZXMs zM@jbllk!3JWywRuwEG_0ux;)?30*X(daOLDw%Y<iRdZix+SB|MZZ=>3Oj zz!JV_+XlFOn51{1iyhLykdzzJ2FzVcvLPp?V?mSt%EbeKXBf*SLOn5gKc+s@ZP4FGHAXWL@_N|yf^l(*2C@4j(+_D#KKdq}@TllRNVi$@DT)}P`3w{4g z*U~HJC`id7Vyp5UfUx+qA9droQnCYnRF$5HZFMY!l4xaS0?rl(q*3Q8Y-1Y~Ezo`7 zss{3p&$r#hn&S~)bGElUipZxfLbb>m3i*B)eN4D|som}a0D2Ht=`gzETX8*QAG7l- z;JKP^0T*AroJKxz{`kDHO1z#6jA(&II`ZZcRV*w}9`k62y4zB1N((*5*&W_dx4Vrr zyq6j>u)*~k3NtXuXU}kP97J~8)cImr=`8znid)PNha+iv(aLtad0ekV-|4U^CNU0$ zh2AJGrqDKFa2>Xb`S^M(OZ=u67S27{Gi}aN=&@QBtx9cwh*?(Ni}<1AzaMkM(Awa7 z<(g#$FNs=rzm@sn&CwC6k2qM5##^(pd9OSMb-pHsongi^ZRDO6kvn=<>bzyxmdf%^ zzR$34Vw>*9o=*DIcx(gj{Yv?8V!HFeX4c(aa25;gX}9KhtD!A=?sa~o`XR1%A+NwX z7TG6W4t1OgjF~ikFwbk{`MhEw_bD#~E7vM2`euR&&u3yV<!uwAAQJN@zo2t=Q=E`hrBVp8M-K`&&Krbit_^Lt4#6(dC)Q+?JfiU77AERZ@7;&b ziz-t#_b3!+K^rj(gl1`G?<=k?^RrDi5oZRn&|@gDLr85byP_Pr8B(OsL(yQp5AjH2 zM1KbAVsx(s8kN%0L8;U23>#37A$sE-2X@`iV0S(G=V-xBBEZEY_K03z+upZ(LNwAR z11;%1^d#!DI~1KuQrJ|dVA=k4TPX z^tm$n*T8l;Xf?-Jp5x&AQWH64qVpFXY2A00XjUACceJ%wu&^*& zXGp;6R!8-sW%c8<2Z!un29Tu2*304iBh87WYNaolFjh}J*xx~WTBj{6(!No{T5R+o z84g7N{5EYGi}XF(xhBhPahUhG?E?shv)iu7Jn>tsDnC=f6G>p?0%);FC9!`{I#{K1 zDNTT&`p6Z%{F2X2WaH$$JzIA}AoW7Q33uq9IsI%xAWb!-I;aJ;M<~&4-PF80#W5f1 zZPkm(F$7o<Zed2#d{+X1n5)3e)ZQJclR#K~dM2&?tU$3@$Dp3X=&$kMRHr1;)i6s-Wu?tIUA z-thhc4*cqwT_#Jbc+LtpW-~V~IQ6b%n~hN1@%QSU=UGU@s9JCeP|=)1yBh7k+*$0)0OG7^P&|eo=qhLqzCb1cW5w_rBKPJpQTzqR)5j)wqvR`FkwAs$^ zeaW9Ob>KodePArv?q%LsjZ zB0V4zuGX0##ALW(8;PBg^X=OUlU}F$oyO3-pBYkOu zk;*lJD=}XDa4Gw9VRbE6L-q9<3)6{0xZvQRIUh4AZMvqK?!_UleUJdq#J=9Ao>N+U zA<}j}fNQo-ew+AuSMGePuUpxC;RN;i0IsQUf#gSlr=I97=T~uh1+Fsb7~;g&&#ktqA|%>`3j2fe z(capu=j^hN2p30MG6Y=lTjVf#8{fz4b`MVa`IC%1!quqNTKjvmd|eKd766EJWSAq# zm)3G8J6&k$nH$%O3r4r@PrqA{RN%VZe2|K`fZu^btQy{&;|11ATnrhw>Kj1W0}1$` z^z-a;{2T{{>OyG1@2o#o2ly~X+~=31`L-xINgvsVXC+0F(;RPb3w#_Y(8>) zN46BYYt0?=4tCz63*6`1Zc7cnwcY(_!Z3OVCtzW4-iW-Am23FLB_6yyjAB5nh+aOJ zw@eJy7TovvS;Xf8&%7GnEuY0Ij9vgxm?YEECZ_tu}SoM0Aw(e#; z^fE!U157AlBJh%f-~4+28^~p$TL{4RJ_0zShE31h8Og92=BDxOr4=x7y3j3=Lna6p zsXOdPV#2fO4(3cw*fWDx9Aw@dqPJWeN6WPfPUle4gHlq%hM6rDUx+Zh?6Kgx%uq06 z=aIL@sqm30VK1v+VG!&iaA}#=K{=qkfV7FB=f+YD&NP~P|9VMA3hJHwhZ_IU8qo_YyfWL72}6cRw*m zcXI4yJVZ*SZRY^cjLu2ghp$P5WS*9pRSlo>w0n2?LeX2Ii<7HX<2JOJ!M6~FeC+PC z^hkQ7Qzm5oNSU;SQ(aw@wDhI?uYw2OI(UA)_Q9$NuZG|cUU=nY9pP_y>-((-yj~)2 JN9u!y=id^CaxVY? literal 0 HcmV?d00001 diff --git a/external/tiff-4.0.9/test/rewrite_tag.c b/external/tiff-4.1.0/test/rewrite_tag.c similarity index 90% rename from external/tiff-4.0.9/test/rewrite_tag.c rename to external/tiff-4.1.0/test/rewrite_tag.c index 5db3e4ba..1708b024 100644 --- a/external/tiff-4.0.9/test/rewrite_tag.c +++ b/external/tiff-4.1.0/test/rewrite_tag.c @@ -1,5 +1,3 @@ -/* $Id: rewrite_tag.c,v 1.9 2015-08-23 14:23:00 bfriesen Exp $ */ - /* * Copyright (c) 2007, Frank Warmerdam * @@ -32,6 +30,7 @@ #include "tif_config.h" #include +#include #ifdef HAVE_UNISTD_H # include @@ -40,7 +39,6 @@ #include "tiffio.h" #include "tiffiop.h" -const uint32 width = 10; const uint32 length = 40; const uint32 rows_per_strip = 1; @@ -51,6 +49,7 @@ int test_packbits() int i; unsigned char buf[10] = {0,0,0,0,0,0,0,0,0,0}; + uint32 width = 10; int length = 20; const char *filename = "test_packbits.tif"; @@ -138,17 +137,20 @@ int test_packbits() /************************************************************************/ /* rewrite_test() */ /************************************************************************/ -int rewrite_test( const char *filename, int length, int bigtiff, +int rewrite_test( const char *filename, uint32 width, int length, int bigtiff, uint64 base_value ) { TIFF *tif; int i; - unsigned char buf[10] = {5,6,7,8,9,10,11,12,13,14}; + unsigned char *buf; uint64 *rowoffset, *rowbytes; uint64 *upd_rowoffset; uint64 *upd_bytecount; + buf = calloc(1, width); + assert(buf); + /* Test whether we can write tags. */ if( bigtiff ) tif = TIFFOpen(filename, "w8"); @@ -157,6 +159,7 @@ int rewrite_test( const char *filename, int length, int bigtiff, if (!tif) { fprintf (stderr, "Can't create test TIFF file %s.\n", filename); + free(buf); return 1; } @@ -204,6 +207,7 @@ int rewrite_test( const char *filename, int length, int bigtiff, tif = TIFFOpen(filename, "r+"); if (!tif) { fprintf (stderr, "Can't open test TIFF file %s.\n", filename); + free(buf); return 1; } @@ -221,7 +225,7 @@ int rewrite_test( const char *filename, int length, int bigtiff, upd_rowoffset = (uint64 *) _TIFFmalloc(sizeof(uint64) * length); for( i = 0; i < length; i++ ) - upd_rowoffset[i] = base_value + i*10; + upd_rowoffset[i] = base_value + i*width; if( !_TIFFRewriteField( tif, TIFFTAG_STRIPOFFSETS, TIFF_LONG8, length, upd_rowoffset ) ) @@ -234,7 +238,7 @@ int rewrite_test( const char *filename, int length, int bigtiff, upd_bytecount = (uint64 *) _TIFFmalloc(sizeof(uint64) * length); for( i = 0; i < length; i++ ) - upd_bytecount[i] = 100 + i*10; + upd_bytecount[i] = 100 + i*width; if( !_TIFFRewriteField( tif, TIFFTAG_STRIPBYTECOUNTS, TIFF_LONG8, length, upd_bytecount ) ) @@ -252,6 +256,7 @@ int rewrite_test( const char *filename, int length, int bigtiff, tif = TIFFOpen(filename, "r"); if (!tif) { fprintf (stderr, "Can't open test TIFF file %s.\n", filename); + free(buf); return 1; } @@ -263,7 +268,7 @@ int rewrite_test( const char *filename, int length, int bigtiff, for( i = 0; i < length; i++ ) { - uint64 expect = base_value + i*10; + uint64 expect = base_value + i*width; if( rowoffset[i] != expect ) { @@ -286,7 +291,7 @@ int rewrite_test( const char *filename, int length, int bigtiff, for( i = 0; i < length; i++ ) { - uint64 expect = 100 + i*10; + uint64 expect = 100 + i*width; if( rowbytes[i] != expect ) { @@ -302,6 +307,7 @@ int rewrite_test( const char *filename, int length, int bigtiff, } TIFFClose( tif ); + free(buf); /* All tests passed; delete file and exit with success status. */ unlink(filename); @@ -310,6 +316,7 @@ int rewrite_test( const char *filename, int length, int bigtiff, failure: /* Something goes wrong; close file and return unsuccessful status. */ TIFFClose(tif); + free(buf); /* unlink(filename); */ return 1; @@ -327,16 +334,20 @@ main(void) failure |= test_packbits(); /* test fairly normal use */ - failure |= rewrite_test( "rewrite1.tif", 10, 0, 100 ); - failure |= rewrite_test( "rewrite2.tif", 10, 1, 100 ); + failure |= rewrite_test( "rewrite1.tif", 10, 10, 0, 100 ); + failure |= rewrite_test( "rewrite2.tif", 10, 10, 1, 100 ); /* test case of fitting all in directory entry */ - failure |= rewrite_test( "rewrite3.tif", 1, 0, 100 ); - failure |= rewrite_test( "rewrite4.tif", 1, 1, 100 ); + failure |= rewrite_test( "rewrite3.tif", 10, 1, 0, 100 ); + failure |= rewrite_test( "rewrite4.tif", 10, 1, 1, 100 ); /* test with very large values that don't fit in 4bytes (bigtiff only) */ - failure |= rewrite_test( "rewrite5.tif", 1000, 1, 0x6000000000ULL ); - failure |= rewrite_test( "rewrite6.tif", 1, 1, 0x6000000000ULL ); + failure |= rewrite_test( "rewrite5.tif", 10, 1000, 1, 0x6000000000ULL ); + failure |= rewrite_test( "rewrite6.tif", 10, 1, 1, 0x6000000000ULL ); + + /* StripByteCounts on LONG */ + failure |= rewrite_test( "rewrite7.tif", 65536, 1, 0, 100 ); + failure |= rewrite_test( "rewrite8.tif", 65536, 2, 0, 100 ); return failure; } diff --git a/external/tiff-4.0.9/test/short_tag.c b/external/tiff-4.1.0/test/short_tag.c similarity index 98% rename from external/tiff-4.0.9/test/short_tag.c rename to external/tiff-4.1.0/test/short_tag.c index efc7da5b..75e7f5d5 100644 --- a/external/tiff-4.0.9/test/short_tag.c +++ b/external/tiff-4.1.0/test/short_tag.c @@ -1,5 +1,3 @@ -/* $Id: short_tag.c,v 1.9 2013-12-17 14:41:58 bfriesen Exp $ */ - /* * Copyright (c) 2004, Andrey Kiselev * diff --git a/external/tiff-4.0.9/test/strip.c b/external/tiff-4.1.0/test/strip.c similarity index 99% rename from external/tiff-4.0.9/test/strip.c rename to external/tiff-4.1.0/test/strip.c index 59422262..f2cb7735 100644 --- a/external/tiff-4.0.9/test/strip.c +++ b/external/tiff-4.1.0/test/strip.c @@ -1,5 +1,3 @@ -/* $Id: strip.c,v 1.5 2013-12-17 14:41:58 bfriesen Exp $ */ - /* * Copyright (c) 2004, Andrey Kiselev * diff --git a/external/tiff-4.0.9/test/strip_rw.c b/external/tiff-4.1.0/test/strip_rw.c similarity index 98% rename from external/tiff-4.0.9/test/strip_rw.c rename to external/tiff-4.1.0/test/strip_rw.c index 5247c0b3..bcf7d735 100644 --- a/external/tiff-4.0.9/test/strip_rw.c +++ b/external/tiff-4.1.0/test/strip_rw.c @@ -1,5 +1,3 @@ -/* $Id: strip_rw.c,v 1.6 2008/03/28 01:42:07 bfriesen Exp $ */ - /* * Copyright (c) 2004, Andrey Kiselev * diff --git a/external/tiff-4.0.9/test/test_arrays.c b/external/tiff-4.1.0/test/test_arrays.c similarity index 99% rename from external/tiff-4.0.9/test/test_arrays.c rename to external/tiff-4.1.0/test/test_arrays.c index 83767662..226e9d0c 100644 --- a/external/tiff-4.0.9/test/test_arrays.c +++ b/external/tiff-4.1.0/test/test_arrays.c @@ -1,5 +1,3 @@ -/* $Id: test_arrays.c,v 1.3 2006/03/23 14:54:02 dron Exp $ */ - /* * Copyright (c) 2004, Andrey Kiselev * diff --git a/external/tiff-4.0.9/test/test_arrays.h b/external/tiff-4.1.0/test/test_arrays.h similarity index 96% rename from external/tiff-4.0.9/test/test_arrays.h rename to external/tiff-4.1.0/test/test_arrays.h index 5131b231..62e1d33c 100644 --- a/external/tiff-4.0.9/test/test_arrays.h +++ b/external/tiff-4.1.0/test/test_arrays.h @@ -1,5 +1,3 @@ -/* $Id: test_arrays.h,v 1.3 2006/03/23 14:54:02 dron Exp $ */ - /* * Copyright (c) 2004, Andrey Kiselev * diff --git a/external/tiff-4.1.0/test/testtypes.c b/external/tiff-4.1.0/test/testtypes.c new file mode 100644 index 00000000..a36d21e5 --- /dev/null +++ b/external/tiff-4.1.0/test/testtypes.c @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2019, Thomas Bernard + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the names of + * Sam Leffler and Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Sam Leffler and Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +/* + * TIFF Library + * + * Module to test ASCII tags read/write functions. + */ + +#include "tif_config.h" + +#include + +#include "tiffio.h" + +#define CHECK_TYPE(t, s) \ + if (sizeof(t) != s) { \ + fprintf(stderr, "sizeof(" # t ")=%d, it should be %d\n", (int)sizeof(t), (int)s); \ + return 1; \ + } + +int +main() +{ + CHECK_TYPE(TIFF_INT8_T, 1) + CHECK_TYPE(TIFF_INT16_T, 2) + CHECK_TYPE(TIFF_INT32_T, 4) + CHECK_TYPE(TIFF_INT64_T, 8) + CHECK_TYPE(TIFF_UINT8_T, 1) + CHECK_TYPE(TIFF_UINT16_T, 2) + CHECK_TYPE(TIFF_UINT32_T, 4) + CHECK_TYPE(TIFF_UINT64_T, 8) + CHECK_TYPE(TIFF_SIZE_T, sizeof(size_t)) + CHECK_TYPE(TIFF_SSIZE_T, sizeof(size_t)) + return 0; +} + +/* vim: set ts=8 sts=8 sw=8 noet: */ diff --git a/external/tiff-4.0.9/test/tiff2bw-palette-1c-8b.sh b/external/tiff-4.1.0/test/tiff2bw-palette-1c-8b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiff2bw-palette-1c-8b.sh rename to external/tiff-4.1.0/test/tiff2bw-palette-1c-8b.sh diff --git a/external/tiff-4.0.9/test/tiff2bw-quad-lzw-compat.sh b/external/tiff-4.1.0/test/tiff2bw-quad-lzw-compat.sh similarity index 100% rename from external/tiff-4.0.9/test/tiff2bw-quad-lzw-compat.sh rename to external/tiff-4.1.0/test/tiff2bw-quad-lzw-compat.sh diff --git a/external/tiff-4.0.9/test/tiff2bw-rgb-3c-8b.sh b/external/tiff-4.1.0/test/tiff2bw-rgb-3c-8b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiff2bw-rgb-3c-8b.sh rename to external/tiff-4.1.0/test/tiff2bw-rgb-3c-8b.sh diff --git a/external/tiff-4.0.9/test/tiff2pdf.sh b/external/tiff-4.1.0/test/tiff2pdf.sh similarity index 100% rename from external/tiff-4.0.9/test/tiff2pdf.sh rename to external/tiff-4.1.0/test/tiff2pdf.sh diff --git a/external/tiff-4.1.0/test/tiff2ps-EPS1.sh b/external/tiff-4.1.0/test/tiff2ps-EPS1.sh new file mode 100755 index 00000000..b1dc82e7 --- /dev/null +++ b/external/tiff-4.1.0/test/tiff2ps-EPS1.sh @@ -0,0 +1,8 @@ +#!/bin/sh +# +# Basic sanity check for tiffps with PostScript Level 1 encapsulated output +# +PSFILE=o-tiff2ps-EPS1.ps +. ${srcdir:-.}/common.sh +f_test_stdout "${TIFF2PS} -e -1" "${IMG_MINISWHITE_1C_1B}" "${PSFILE}" +diff -I '%%\(CreationDate\|Title\):*' -u "${REFS}/${PSFILE}" "${PSFILE}" || exit 1 diff --git a/external/tiff-4.1.0/test/tiff2ps-PS1.sh b/external/tiff-4.1.0/test/tiff2ps-PS1.sh new file mode 100755 index 00000000..73171b98 --- /dev/null +++ b/external/tiff-4.1.0/test/tiff2ps-PS1.sh @@ -0,0 +1,8 @@ +#!/bin/sh +# +# Basic sanity check for tiffps with PostScript Level 1 output +# +PSFILE="o-tiff2ps-PS1.ps" +. ${srcdir:-.}/common.sh +f_test_stdout "${TIFF2PS} -a -p -1" "${IMG_MINISWHITE_1C_1B}" "${PSFILE}" +diff -I '%%\(CreationDate\|Title\):*' -u "${REFS}/${PSFILE}" "${PSFILE}" || exit 1 diff --git a/external/tiff-4.1.0/test/tiff2ps-PS2.sh b/external/tiff-4.1.0/test/tiff2ps-PS2.sh new file mode 100755 index 00000000..9d3a521d --- /dev/null +++ b/external/tiff-4.1.0/test/tiff2ps-PS2.sh @@ -0,0 +1,8 @@ +#!/bin/sh +# +# Basic sanity check for tiffps with PostScript Level 2 output +# +PSFILE=o-tiff2ps-PS2.ps +. ${srcdir:-.}/common.sh +f_test_stdout "${TIFF2PS} -a -p -2" "${IMG_MINISWHITE_1C_1B}" "${PSFILE}" +diff -I '%%\(CreationDate\|Title\):*' -u "${REFS}/${PSFILE}" "${PSFILE}" || exit 1 diff --git a/external/tiff-4.1.0/test/tiff2ps-PS3.sh b/external/tiff-4.1.0/test/tiff2ps-PS3.sh new file mode 100755 index 00000000..eb55b9a0 --- /dev/null +++ b/external/tiff-4.1.0/test/tiff2ps-PS3.sh @@ -0,0 +1,8 @@ +#!/bin/sh +# +# Basic sanity check for tiffps with PostScript Level 3 output +# +PSFILE=o-tiff2ps-PS3.ps +. ${srcdir:-.}/common.sh +f_test_stdout "${TIFF2PS} -a -p -3" "${IMG_MINISWHITE_1C_1B}" "${PSFILE}" +diff -I '%%\(CreationDate\|Title\):*' -u "${REFS}/${PSFILE}" "${PSFILE}" || exit 1 diff --git a/external/tiff-4.0.9/test/tiff2rgba-logluv-3c-16b.sh b/external/tiff-4.1.0/test/tiff2rgba-logluv-3c-16b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiff2rgba-logluv-3c-16b.sh rename to external/tiff-4.1.0/test/tiff2rgba-logluv-3c-16b.sh diff --git a/external/tiff-4.0.9/test/tiff2rgba-minisblack-1c-16b.sh b/external/tiff-4.1.0/test/tiff2rgba-minisblack-1c-16b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiff2rgba-minisblack-1c-16b.sh rename to external/tiff-4.1.0/test/tiff2rgba-minisblack-1c-16b.sh diff --git a/external/tiff-4.0.9/test/tiff2rgba-minisblack-1c-8b.sh b/external/tiff-4.1.0/test/tiff2rgba-minisblack-1c-8b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiff2rgba-minisblack-1c-8b.sh rename to external/tiff-4.1.0/test/tiff2rgba-minisblack-1c-8b.sh diff --git a/external/tiff-4.0.9/test/tiff2rgba-minisblack-2c-8b-alpha.sh b/external/tiff-4.1.0/test/tiff2rgba-minisblack-2c-8b-alpha.sh similarity index 100% rename from external/tiff-4.0.9/test/tiff2rgba-minisblack-2c-8b-alpha.sh rename to external/tiff-4.1.0/test/tiff2rgba-minisblack-2c-8b-alpha.sh diff --git a/external/tiff-4.0.9/test/tiff2rgba-miniswhite-1c-1b.sh b/external/tiff-4.1.0/test/tiff2rgba-miniswhite-1c-1b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiff2rgba-miniswhite-1c-1b.sh rename to external/tiff-4.1.0/test/tiff2rgba-miniswhite-1c-1b.sh diff --git a/external/tiff-4.0.9/test/tiff2rgba-palette-1c-1b.sh b/external/tiff-4.1.0/test/tiff2rgba-palette-1c-1b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiff2rgba-palette-1c-1b.sh rename to external/tiff-4.1.0/test/tiff2rgba-palette-1c-1b.sh diff --git a/external/tiff-4.0.9/test/tiff2rgba-palette-1c-4b.sh b/external/tiff-4.1.0/test/tiff2rgba-palette-1c-4b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiff2rgba-palette-1c-4b.sh rename to external/tiff-4.1.0/test/tiff2rgba-palette-1c-4b.sh diff --git a/external/tiff-4.0.9/test/tiff2rgba-palette-1c-8b.sh b/external/tiff-4.1.0/test/tiff2rgba-palette-1c-8b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiff2rgba-palette-1c-8b.sh rename to external/tiff-4.1.0/test/tiff2rgba-palette-1c-8b.sh diff --git a/external/tiff-4.0.9/test/tiff2rgba-quad-tile.jpg.sh b/external/tiff-4.1.0/test/tiff2rgba-quad-tile.jpg.sh similarity index 100% rename from external/tiff-4.0.9/test/tiff2rgba-quad-tile.jpg.sh rename to external/tiff-4.1.0/test/tiff2rgba-quad-tile.jpg.sh diff --git a/external/tiff-4.0.9/test/tiff2rgba-rgb-3c-16b.sh b/external/tiff-4.1.0/test/tiff2rgba-rgb-3c-16b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiff2rgba-rgb-3c-16b.sh rename to external/tiff-4.1.0/test/tiff2rgba-rgb-3c-16b.sh diff --git a/external/tiff-4.0.9/test/tiff2rgba-rgb-3c-8b.sh b/external/tiff-4.1.0/test/tiff2rgba-rgb-3c-8b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiff2rgba-rgb-3c-8b.sh rename to external/tiff-4.1.0/test/tiff2rgba-rgb-3c-8b.sh diff --git a/external/tiff-4.0.9/test/tiffcp-g3-1d-fill.sh b/external/tiff-4.1.0/test/tiffcp-g3-1d-fill.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcp-g3-1d-fill.sh rename to external/tiff-4.1.0/test/tiffcp-g3-1d-fill.sh diff --git a/external/tiff-4.0.9/test/tiffcp-g3-1d.sh b/external/tiff-4.1.0/test/tiffcp-g3-1d.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcp-g3-1d.sh rename to external/tiff-4.1.0/test/tiffcp-g3-1d.sh diff --git a/external/tiff-4.0.9/test/tiffcp-g3-2d-fill.sh b/external/tiff-4.1.0/test/tiffcp-g3-2d-fill.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcp-g3-2d-fill.sh rename to external/tiff-4.1.0/test/tiffcp-g3-2d-fill.sh diff --git a/external/tiff-4.0.9/test/tiffcp-g3-2d.sh b/external/tiff-4.1.0/test/tiffcp-g3-2d.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcp-g3-2d.sh rename to external/tiff-4.1.0/test/tiffcp-g3-2d.sh diff --git a/external/tiff-4.0.9/test/tiffcp-g3.sh b/external/tiff-4.1.0/test/tiffcp-g3.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcp-g3.sh rename to external/tiff-4.1.0/test/tiffcp-g3.sh diff --git a/external/tiff-4.0.9/test/tiffcp-g4.sh b/external/tiff-4.1.0/test/tiffcp-g4.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcp-g4.sh rename to external/tiff-4.1.0/test/tiffcp-g4.sh diff --git a/external/tiff-4.0.9/test/tiffcp-logluv.sh b/external/tiff-4.1.0/test/tiffcp-logluv.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcp-logluv.sh rename to external/tiff-4.1.0/test/tiffcp-logluv.sh diff --git a/external/tiff-4.0.9/test/tiffcp-lzw-compat.sh b/external/tiff-4.1.0/test/tiffcp-lzw-compat.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcp-lzw-compat.sh rename to external/tiff-4.1.0/test/tiffcp-lzw-compat.sh diff --git a/external/tiff-4.1.0/test/tiffcp-lzw-scanline-decode.sh b/external/tiff-4.1.0/test/tiffcp-lzw-scanline-decode.sh new file mode 100755 index 00000000..11654d19 --- /dev/null +++ b/external/tiff-4.1.0/test/tiffcp-lzw-scanline-decode.sh @@ -0,0 +1,6 @@ +#!/bin/sh +# +# Basic sanity check for tiffcp with LZW decompression +# +. ${srcdir:-.}/common.sh +f_test_convert "${TIFFCP} -c none -r 1" "${IMG_LZW_SINGLE_STROP}" "o-tiffcp-lzw-scanline-decode.tiff" \ No newline at end of file diff --git a/external/tiff-4.0.9/test/tiffcp-split-join.sh b/external/tiff-4.1.0/test/tiffcp-split-join.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcp-split-join.sh rename to external/tiff-4.1.0/test/tiffcp-split-join.sh diff --git a/external/tiff-4.0.9/test/tiffcp-split.sh b/external/tiff-4.1.0/test/tiffcp-split.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcp-split.sh rename to external/tiff-4.1.0/test/tiffcp-split.sh diff --git a/external/tiff-4.0.9/test/tiffcp-thumbnail.sh b/external/tiff-4.1.0/test/tiffcp-thumbnail.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcp-thumbnail.sh rename to external/tiff-4.1.0/test/tiffcp-thumbnail.sh diff --git a/external/tiff-4.0.9/test/tiffcrop-R90-logluv-3c-16b.sh b/external/tiff-4.1.0/test/tiffcrop-R90-logluv-3c-16b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcrop-R90-logluv-3c-16b.sh rename to external/tiff-4.1.0/test/tiffcrop-R90-logluv-3c-16b.sh diff --git a/external/tiff-4.0.9/test/tiffcrop-R90-minisblack-1c-16b.sh b/external/tiff-4.1.0/test/tiffcrop-R90-minisblack-1c-16b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcrop-R90-minisblack-1c-16b.sh rename to external/tiff-4.1.0/test/tiffcrop-R90-minisblack-1c-16b.sh diff --git a/external/tiff-4.0.9/test/tiffcrop-R90-minisblack-1c-8b.sh b/external/tiff-4.1.0/test/tiffcrop-R90-minisblack-1c-8b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcrop-R90-minisblack-1c-8b.sh rename to external/tiff-4.1.0/test/tiffcrop-R90-minisblack-1c-8b.sh diff --git a/external/tiff-4.0.9/test/tiffcrop-R90-minisblack-2c-8b-alpha.sh b/external/tiff-4.1.0/test/tiffcrop-R90-minisblack-2c-8b-alpha.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcrop-R90-minisblack-2c-8b-alpha.sh rename to external/tiff-4.1.0/test/tiffcrop-R90-minisblack-2c-8b-alpha.sh diff --git a/external/tiff-4.0.9/test/tiffcrop-R90-miniswhite-1c-1b.sh b/external/tiff-4.1.0/test/tiffcrop-R90-miniswhite-1c-1b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcrop-R90-miniswhite-1c-1b.sh rename to external/tiff-4.1.0/test/tiffcrop-R90-miniswhite-1c-1b.sh diff --git a/external/tiff-4.0.9/test/tiffcrop-R90-palette-1c-1b.sh b/external/tiff-4.1.0/test/tiffcrop-R90-palette-1c-1b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcrop-R90-palette-1c-1b.sh rename to external/tiff-4.1.0/test/tiffcrop-R90-palette-1c-1b.sh diff --git a/external/tiff-4.0.9/test/tiffcrop-R90-palette-1c-4b.sh b/external/tiff-4.1.0/test/tiffcrop-R90-palette-1c-4b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcrop-R90-palette-1c-4b.sh rename to external/tiff-4.1.0/test/tiffcrop-R90-palette-1c-4b.sh diff --git a/external/tiff-4.0.9/test/tiffcrop-R90-palette-1c-8b.sh b/external/tiff-4.1.0/test/tiffcrop-R90-palette-1c-8b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcrop-R90-palette-1c-8b.sh rename to external/tiff-4.1.0/test/tiffcrop-R90-palette-1c-8b.sh diff --git a/external/tiff-4.0.9/test/tiffcrop-R90-rgb-3c-16b.sh b/external/tiff-4.1.0/test/tiffcrop-R90-rgb-3c-16b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcrop-R90-rgb-3c-16b.sh rename to external/tiff-4.1.0/test/tiffcrop-R90-rgb-3c-16b.sh diff --git a/external/tiff-4.0.9/test/tiffcrop-R90-rgb-3c-8b.sh b/external/tiff-4.1.0/test/tiffcrop-R90-rgb-3c-8b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcrop-R90-rgb-3c-8b.sh rename to external/tiff-4.1.0/test/tiffcrop-R90-rgb-3c-8b.sh diff --git a/external/tiff-4.0.9/test/tiffcrop-doubleflip-logluv-3c-16b.sh b/external/tiff-4.1.0/test/tiffcrop-doubleflip-logluv-3c-16b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcrop-doubleflip-logluv-3c-16b.sh rename to external/tiff-4.1.0/test/tiffcrop-doubleflip-logluv-3c-16b.sh diff --git a/external/tiff-4.0.9/test/tiffcrop-doubleflip-minisblack-1c-16b.sh b/external/tiff-4.1.0/test/tiffcrop-doubleflip-minisblack-1c-16b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcrop-doubleflip-minisblack-1c-16b.sh rename to external/tiff-4.1.0/test/tiffcrop-doubleflip-minisblack-1c-16b.sh diff --git a/external/tiff-4.0.9/test/tiffcrop-doubleflip-minisblack-1c-8b.sh b/external/tiff-4.1.0/test/tiffcrop-doubleflip-minisblack-1c-8b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcrop-doubleflip-minisblack-1c-8b.sh rename to external/tiff-4.1.0/test/tiffcrop-doubleflip-minisblack-1c-8b.sh diff --git a/external/tiff-4.0.9/test/tiffcrop-doubleflip-minisblack-2c-8b-alpha.sh b/external/tiff-4.1.0/test/tiffcrop-doubleflip-minisblack-2c-8b-alpha.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcrop-doubleflip-minisblack-2c-8b-alpha.sh rename to external/tiff-4.1.0/test/tiffcrop-doubleflip-minisblack-2c-8b-alpha.sh diff --git a/external/tiff-4.0.9/test/tiffcrop-doubleflip-miniswhite-1c-1b.sh b/external/tiff-4.1.0/test/tiffcrop-doubleflip-miniswhite-1c-1b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcrop-doubleflip-miniswhite-1c-1b.sh rename to external/tiff-4.1.0/test/tiffcrop-doubleflip-miniswhite-1c-1b.sh diff --git a/external/tiff-4.0.9/test/tiffcrop-doubleflip-palette-1c-1b.sh b/external/tiff-4.1.0/test/tiffcrop-doubleflip-palette-1c-1b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcrop-doubleflip-palette-1c-1b.sh rename to external/tiff-4.1.0/test/tiffcrop-doubleflip-palette-1c-1b.sh diff --git a/external/tiff-4.0.9/test/tiffcrop-doubleflip-palette-1c-4b.sh b/external/tiff-4.1.0/test/tiffcrop-doubleflip-palette-1c-4b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcrop-doubleflip-palette-1c-4b.sh rename to external/tiff-4.1.0/test/tiffcrop-doubleflip-palette-1c-4b.sh diff --git a/external/tiff-4.0.9/test/tiffcrop-doubleflip-palette-1c-8b.sh b/external/tiff-4.1.0/test/tiffcrop-doubleflip-palette-1c-8b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcrop-doubleflip-palette-1c-8b.sh rename to external/tiff-4.1.0/test/tiffcrop-doubleflip-palette-1c-8b.sh diff --git a/external/tiff-4.0.9/test/tiffcrop-doubleflip-rgb-3c-16b.sh b/external/tiff-4.1.0/test/tiffcrop-doubleflip-rgb-3c-16b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcrop-doubleflip-rgb-3c-16b.sh rename to external/tiff-4.1.0/test/tiffcrop-doubleflip-rgb-3c-16b.sh diff --git a/external/tiff-4.0.9/test/tiffcrop-doubleflip-rgb-3c-8b.sh b/external/tiff-4.1.0/test/tiffcrop-doubleflip-rgb-3c-8b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcrop-doubleflip-rgb-3c-8b.sh rename to external/tiff-4.1.0/test/tiffcrop-doubleflip-rgb-3c-8b.sh diff --git a/external/tiff-4.0.9/test/tiffcrop-extract-logluv-3c-16b.sh b/external/tiff-4.1.0/test/tiffcrop-extract-logluv-3c-16b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcrop-extract-logluv-3c-16b.sh rename to external/tiff-4.1.0/test/tiffcrop-extract-logluv-3c-16b.sh diff --git a/external/tiff-4.0.9/test/tiffcrop-extract-minisblack-1c-16b.sh b/external/tiff-4.1.0/test/tiffcrop-extract-minisblack-1c-16b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcrop-extract-minisblack-1c-16b.sh rename to external/tiff-4.1.0/test/tiffcrop-extract-minisblack-1c-16b.sh diff --git a/external/tiff-4.0.9/test/tiffcrop-extract-minisblack-1c-8b.sh b/external/tiff-4.1.0/test/tiffcrop-extract-minisblack-1c-8b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcrop-extract-minisblack-1c-8b.sh rename to external/tiff-4.1.0/test/tiffcrop-extract-minisblack-1c-8b.sh diff --git a/external/tiff-4.0.9/test/tiffcrop-extract-minisblack-2c-8b-alpha.sh b/external/tiff-4.1.0/test/tiffcrop-extract-minisblack-2c-8b-alpha.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcrop-extract-minisblack-2c-8b-alpha.sh rename to external/tiff-4.1.0/test/tiffcrop-extract-minisblack-2c-8b-alpha.sh diff --git a/external/tiff-4.0.9/test/tiffcrop-extract-miniswhite-1c-1b.sh b/external/tiff-4.1.0/test/tiffcrop-extract-miniswhite-1c-1b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcrop-extract-miniswhite-1c-1b.sh rename to external/tiff-4.1.0/test/tiffcrop-extract-miniswhite-1c-1b.sh diff --git a/external/tiff-4.0.9/test/tiffcrop-extract-palette-1c-1b.sh b/external/tiff-4.1.0/test/tiffcrop-extract-palette-1c-1b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcrop-extract-palette-1c-1b.sh rename to external/tiff-4.1.0/test/tiffcrop-extract-palette-1c-1b.sh diff --git a/external/tiff-4.0.9/test/tiffcrop-extract-palette-1c-4b.sh b/external/tiff-4.1.0/test/tiffcrop-extract-palette-1c-4b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcrop-extract-palette-1c-4b.sh rename to external/tiff-4.1.0/test/tiffcrop-extract-palette-1c-4b.sh diff --git a/external/tiff-4.0.9/test/tiffcrop-extract-palette-1c-8b.sh b/external/tiff-4.1.0/test/tiffcrop-extract-palette-1c-8b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcrop-extract-palette-1c-8b.sh rename to external/tiff-4.1.0/test/tiffcrop-extract-palette-1c-8b.sh diff --git a/external/tiff-4.0.9/test/tiffcrop-extract-rgb-3c-16b.sh b/external/tiff-4.1.0/test/tiffcrop-extract-rgb-3c-16b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcrop-extract-rgb-3c-16b.sh rename to external/tiff-4.1.0/test/tiffcrop-extract-rgb-3c-16b.sh diff --git a/external/tiff-4.0.9/test/tiffcrop-extract-rgb-3c-8b.sh b/external/tiff-4.1.0/test/tiffcrop-extract-rgb-3c-8b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcrop-extract-rgb-3c-8b.sh rename to external/tiff-4.1.0/test/tiffcrop-extract-rgb-3c-8b.sh diff --git a/external/tiff-4.0.9/test/tiffcrop-extractz14-logluv-3c-16b.sh b/external/tiff-4.1.0/test/tiffcrop-extractz14-logluv-3c-16b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcrop-extractz14-logluv-3c-16b.sh rename to external/tiff-4.1.0/test/tiffcrop-extractz14-logluv-3c-16b.sh diff --git a/external/tiff-4.0.9/test/tiffcrop-extractz14-minisblack-1c-16b.sh b/external/tiff-4.1.0/test/tiffcrop-extractz14-minisblack-1c-16b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcrop-extractz14-minisblack-1c-16b.sh rename to external/tiff-4.1.0/test/tiffcrop-extractz14-minisblack-1c-16b.sh diff --git a/external/tiff-4.0.9/test/tiffcrop-extractz14-minisblack-1c-8b.sh b/external/tiff-4.1.0/test/tiffcrop-extractz14-minisblack-1c-8b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcrop-extractz14-minisblack-1c-8b.sh rename to external/tiff-4.1.0/test/tiffcrop-extractz14-minisblack-1c-8b.sh diff --git a/external/tiff-4.0.9/test/tiffcrop-extractz14-minisblack-2c-8b-alpha.sh b/external/tiff-4.1.0/test/tiffcrop-extractz14-minisblack-2c-8b-alpha.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcrop-extractz14-minisblack-2c-8b-alpha.sh rename to external/tiff-4.1.0/test/tiffcrop-extractz14-minisblack-2c-8b-alpha.sh diff --git a/external/tiff-4.0.9/test/tiffcrop-extractz14-miniswhite-1c-1b.sh b/external/tiff-4.1.0/test/tiffcrop-extractz14-miniswhite-1c-1b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcrop-extractz14-miniswhite-1c-1b.sh rename to external/tiff-4.1.0/test/tiffcrop-extractz14-miniswhite-1c-1b.sh diff --git a/external/tiff-4.0.9/test/tiffcrop-extractz14-palette-1c-1b.sh b/external/tiff-4.1.0/test/tiffcrop-extractz14-palette-1c-1b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcrop-extractz14-palette-1c-1b.sh rename to external/tiff-4.1.0/test/tiffcrop-extractz14-palette-1c-1b.sh diff --git a/external/tiff-4.0.9/test/tiffcrop-extractz14-palette-1c-4b.sh b/external/tiff-4.1.0/test/tiffcrop-extractz14-palette-1c-4b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcrop-extractz14-palette-1c-4b.sh rename to external/tiff-4.1.0/test/tiffcrop-extractz14-palette-1c-4b.sh diff --git a/external/tiff-4.0.9/test/tiffcrop-extractz14-palette-1c-8b.sh b/external/tiff-4.1.0/test/tiffcrop-extractz14-palette-1c-8b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcrop-extractz14-palette-1c-8b.sh rename to external/tiff-4.1.0/test/tiffcrop-extractz14-palette-1c-8b.sh diff --git a/external/tiff-4.0.9/test/tiffcrop-extractz14-rgb-3c-16b.sh b/external/tiff-4.1.0/test/tiffcrop-extractz14-rgb-3c-16b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcrop-extractz14-rgb-3c-16b.sh rename to external/tiff-4.1.0/test/tiffcrop-extractz14-rgb-3c-16b.sh diff --git a/external/tiff-4.0.9/test/tiffcrop-extractz14-rgb-3c-8b.sh b/external/tiff-4.1.0/test/tiffcrop-extractz14-rgb-3c-8b.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffcrop-extractz14-rgb-3c-8b.sh rename to external/tiff-4.1.0/test/tiffcrop-extractz14-rgb-3c-8b.sh diff --git a/external/tiff-4.0.9/test/tiffdump.sh b/external/tiff-4.1.0/test/tiffdump.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffdump.sh rename to external/tiff-4.1.0/test/tiffdump.sh diff --git a/external/tiff-4.0.9/test/tiffinfo.sh b/external/tiff-4.1.0/test/tiffinfo.sh similarity index 100% rename from external/tiff-4.0.9/test/tiffinfo.sh rename to external/tiff-4.1.0/test/tiffinfo.sh diff --git a/external/tiff-4.0.9/test/tifftest.h b/external/tiff-4.1.0/test/tifftest.h similarity index 96% rename from external/tiff-4.0.9/test/tifftest.h rename to external/tiff-4.1.0/test/tifftest.h index 33052064..391b0f64 100644 --- a/external/tiff-4.0.9/test/tifftest.h +++ b/external/tiff-4.1.0/test/tifftest.h @@ -1,5 +1,3 @@ -/* $Id: tifftest.h,v 1.1 2008/04/15 14:18:36 dron Exp $ */ - /* * Copyright (c) 2008, Andrey Kiselev * diff --git a/external/tiff-4.0.9/tools/CMakeLists.txt b/external/tiff-4.1.0/tools/CMakeLists.txt similarity index 97% rename from external/tiff-4.0.9/tools/CMakeLists.txt rename to external/tiff-4.1.0/tools/CMakeLists.txt index 331f83c0..886d4549 100644 --- a/external/tiff-4.0.9/tools/CMakeLists.txt +++ b/external/tiff-4.1.0/tools/CMakeLists.txt @@ -118,7 +118,7 @@ if(HAVE_OPENGL) endif() add_executable(tiffgt tiffgt.c) - target_link_libraries(tiffgt tiff ${GLUT_LIBRARIES} ${OPENGL_LIBRARIES}) + target_link_libraries(tiffgt tiff port ${GLUT_LIBRARIES} ${OPENGL_LIBRARIES}) install(TARGETS tiffgt RUNTIME DESTINATION "${CMAKE_INSTALL_FULL_BINDIR}") diff --git a/external/tiff-4.0.9/tools/Makefile.am b/external/tiff-4.1.0/tools/Makefile.am similarity index 100% rename from external/tiff-4.0.9/tools/Makefile.am rename to external/tiff-4.1.0/tools/Makefile.am diff --git a/external/tiff-4.0.9/tools/Makefile.in b/external/tiff-4.1.0/tools/Makefile.in similarity index 91% rename from external/tiff-4.0.9/tools/Makefile.in rename to external/tiff-4.1.0/tools/Makefile.in index d7d56040..7ec4ed62 100644 --- a/external/tiff-4.0.9/tools/Makefile.in +++ b/external/tiff-4.1.0/tools/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -132,7 +132,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs +mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/libtiff/tif_config.h \ $(top_builddir)/libtiff/tiffconf.h CONFIG_CLEAN_FILES = @@ -226,7 +226,18 @@ am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/libtiff depcomp = $(SHELL) $(top_srcdir)/config/depcomp -am__depfiles_maybe = depfiles +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = ./$(DEPDIR)/fax2ps.Po ./$(DEPDIR)/fax2tiff.Po \ + ./$(DEPDIR)/pal2rgb.Po ./$(DEPDIR)/ppm2tiff.Po \ + ./$(DEPDIR)/raw2tiff.Po ./$(DEPDIR)/rgb2ycbcr.Po \ + ./$(DEPDIR)/thumbnail.Po ./$(DEPDIR)/tiff2bw.Po \ + ./$(DEPDIR)/tiff2pdf.Po ./$(DEPDIR)/tiff2ps.Po \ + ./$(DEPDIR)/tiff2rgba.Po ./$(DEPDIR)/tiffcmp.Po \ + ./$(DEPDIR)/tiffcp.Po ./$(DEPDIR)/tiffcrop.Po \ + ./$(DEPDIR)/tiffdither.Po ./$(DEPDIR)/tiffdump.Po \ + ./$(DEPDIR)/tiffgt-tiffgt.Po ./$(DEPDIR)/tiffinfo.Po \ + ./$(DEPDIR)/tiffmedian.Po ./$(DEPDIR)/tiffset.Po \ + ./$(DEPDIR)/tiffsplit.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @@ -285,8 +296,7 @@ am__define_uniq_tagged_files = \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags -am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp \ - $(top_srcdir)/config/mkinstalldirs +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ @@ -508,8 +518,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -669,27 +679,33 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fax2ps.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fax2tiff.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pal2rgb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppm2tiff.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/raw2tiff.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rgb2ycbcr.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/thumbnail.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiff2bw.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiff2pdf.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiff2ps.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiff2rgba.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffcmp.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffcp.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffcrop.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffdither.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffdump.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffgt-tiffgt.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffinfo.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffmedian.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffset.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffsplit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fax2ps.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fax2tiff.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pal2rgb.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppm2tiff.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/raw2tiff.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rgb2ycbcr.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/thumbnail.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiff2bw.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiff2pdf.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiff2ps.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiff2rgba.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffcmp.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffcp.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffcrop.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffdither.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffdump.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffgt-tiffgt.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffinfo.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffmedian.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffset.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffsplit.Po@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @@ -784,7 +800,10 @@ cscopelist-am: $(am__tagged_files) distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -858,7 +877,27 @@ clean-am: clean-binPROGRAMS clean-checkPROGRAMS clean-generic \ clean-libtool mostlyclean-am distclean: distclean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/fax2ps.Po + -rm -f ./$(DEPDIR)/fax2tiff.Po + -rm -f ./$(DEPDIR)/pal2rgb.Po + -rm -f ./$(DEPDIR)/ppm2tiff.Po + -rm -f ./$(DEPDIR)/raw2tiff.Po + -rm -f ./$(DEPDIR)/rgb2ycbcr.Po + -rm -f ./$(DEPDIR)/thumbnail.Po + -rm -f ./$(DEPDIR)/tiff2bw.Po + -rm -f ./$(DEPDIR)/tiff2pdf.Po + -rm -f ./$(DEPDIR)/tiff2ps.Po + -rm -f ./$(DEPDIR)/tiff2rgba.Po + -rm -f ./$(DEPDIR)/tiffcmp.Po + -rm -f ./$(DEPDIR)/tiffcp.Po + -rm -f ./$(DEPDIR)/tiffcrop.Po + -rm -f ./$(DEPDIR)/tiffdither.Po + -rm -f ./$(DEPDIR)/tiffdump.Po + -rm -f ./$(DEPDIR)/tiffgt-tiffgt.Po + -rm -f ./$(DEPDIR)/tiffinfo.Po + -rm -f ./$(DEPDIR)/tiffmedian.Po + -rm -f ./$(DEPDIR)/tiffset.Po + -rm -f ./$(DEPDIR)/tiffsplit.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags @@ -904,7 +943,27 @@ install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/fax2ps.Po + -rm -f ./$(DEPDIR)/fax2tiff.Po + -rm -f ./$(DEPDIR)/pal2rgb.Po + -rm -f ./$(DEPDIR)/ppm2tiff.Po + -rm -f ./$(DEPDIR)/raw2tiff.Po + -rm -f ./$(DEPDIR)/rgb2ycbcr.Po + -rm -f ./$(DEPDIR)/thumbnail.Po + -rm -f ./$(DEPDIR)/tiff2bw.Po + -rm -f ./$(DEPDIR)/tiff2pdf.Po + -rm -f ./$(DEPDIR)/tiff2ps.Po + -rm -f ./$(DEPDIR)/tiff2rgba.Po + -rm -f ./$(DEPDIR)/tiffcmp.Po + -rm -f ./$(DEPDIR)/tiffcp.Po + -rm -f ./$(DEPDIR)/tiffcrop.Po + -rm -f ./$(DEPDIR)/tiffdither.Po + -rm -f ./$(DEPDIR)/tiffdump.Po + -rm -f ./$(DEPDIR)/tiffgt-tiffgt.Po + -rm -f ./$(DEPDIR)/tiffinfo.Po + -rm -f ./$(DEPDIR)/tiffmedian.Po + -rm -f ./$(DEPDIR)/tiffset.Po + -rm -f ./$(DEPDIR)/tiffsplit.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic @@ -925,7 +984,7 @@ uninstall-am: uninstall-binPROGRAMS .MAKE: check-am install-am install-strip -.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ +.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-binPROGRAMS clean-checkPROGRAMS clean-generic \ clean-libtool cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ diff --git a/external/tiff-4.0.9/tools/Makefile.vc b/external/tiff-4.1.0/tools/Makefile.vc similarity index 96% rename from external/tiff-4.0.9/tools/Makefile.vc rename to external/tiff-4.1.0/tools/Makefile.vc index 646c7677..453db43e 100644 --- a/external/tiff-4.0.9/tools/Makefile.vc +++ b/external/tiff-4.1.0/tools/Makefile.vc @@ -1,4 +1,3 @@ -# $Id: Makefile.vc,v 1.16 2016-06-05 19:54:03 bfriesen Exp $ # # Copyright (C) 2004, Andrey Kiselev # diff --git a/external/tiff-4.0.9/tools/fax2ps.c b/external/tiff-4.1.0/tools/fax2ps.c similarity index 99% rename from external/tiff-4.0.9/tools/fax2ps.c rename to external/tiff-4.1.0/tools/fax2ps.c index c4953315..274b29e4 100644 --- a/external/tiff-4.0.9/tools/fax2ps.c +++ b/external/tiff-4.1.0/tools/fax2ps.c @@ -1,5 +1,3 @@ -/* $Id: fax2ps.c,v 1.31 2015-09-06 18:24:27 bfriesen Exp $" */ - /* * Copyright (c) 1991-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/tools/fax2tiff.c b/external/tiff-4.1.0/tools/fax2tiff.c similarity index 96% rename from external/tiff-4.0.9/tools/fax2tiff.c rename to external/tiff-4.1.0/tools/fax2tiff.c index f23374e0..21223131 100644 --- a/external/tiff-4.0.9/tools/fax2tiff.c +++ b/external/tiff-4.1.0/tools/fax2tiff.c @@ -1,5 +1,3 @@ -/* $Id: fax2tiff.c,v 1.28 2017-10-29 18:28:45 bfriesen Exp $ */ - /* * Copyright (c) 1990-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. @@ -76,14 +74,10 @@ static void usage(void); Struct to carry client data. Note that it does not appear that the client data is actually used in this program. */ -typedef struct _FAX_Client_Data +typedef union _FAX_Client_Data { -#if defined(_WIN32) && defined(USE_WIN32_FILEIO) - intptr_t fh; /* Operating system file handle */ -#else - int fd; /* Integer file descriptor */ -#endif - + thandle_t fh; /* Operating system file handle */ + int fd; /* Integer file descriptor */ } FAX_Client_Data; int @@ -91,7 +85,7 @@ main(int argc, char* argv[]) { FILE *in; TIFF *out = NULL; - FAX_Client_Data client_data; + FAX_Client_Data client_data; TIFFErrorHandler whandler = NULL; int compression_in = COMPRESSION_CCITTFAX3; int compression_out = COMPRESSION_CCITTFAX3; @@ -282,11 +276,11 @@ main(int argc, char* argv[]) continue; } #if defined(_WIN32) && defined(USE_WIN32_FILEIO) - client_data.fh = _get_osfhandle(fileno(in)); + client_data.fh = (thandle_t)_get_osfhandle(fileno(in)); #else - client_data.fd = fileno(in); + client_data.fd = fileno(in); #endif - TIFFSetClientdata(faxTIFF, (thandle_t) &client_data); + TIFFSetClientdata(faxTIFF, client_data.fh); TIFFSetFileName(faxTIFF, (const char*)argv[optind]); TIFFSetField(out, TIFFTAG_IMAGEWIDTH, xsize); TIFFSetField(out, TIFFTAG_BITSPERSAMPLE, 1); diff --git a/external/tiff-4.0.9/tools/pal2rgb.c b/external/tiff-4.1.0/tools/pal2rgb.c similarity index 94% rename from external/tiff-4.0.9/tools/pal2rgb.c rename to external/tiff-4.1.0/tools/pal2rgb.c index 01e9dab9..9492f1cf 100644 --- a/external/tiff-4.0.9/tools/pal2rgb.c +++ b/external/tiff-4.1.0/tools/pal2rgb.c @@ -1,5 +1,3 @@ -/* $Id: pal2rgb.c,v 1.15 2015-06-21 01:09:10 bfriesen Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. @@ -120,12 +118,14 @@ main(int argc, char* argv[]) shortv != PHOTOMETRIC_PALETTE) { fprintf(stderr, "%s: Expecting a palette image.\n", argv[optind]); + (void) TIFFClose(in); return (-1); } if (!TIFFGetField(in, TIFFTAG_COLORMAP, &rmap, &gmap, &bmap)) { fprintf(stderr, "%s: No colormap (not a valid palette image).\n", argv[optind]); + (void) TIFFClose(in); return (-1); } bitspersample = 0; @@ -133,11 +133,14 @@ main(int argc, char* argv[]) if (bitspersample != 8) { fprintf(stderr, "%s: Sorry, can only handle 8-bit images.\n", argv[optind]); + (void) TIFFClose(in); return (-1); } out = TIFFOpen(argv[optind+1], "w"); - if (out == NULL) + if (out == NULL) { + (void) TIFFClose(in); return (-2); + } cpTags(in, out); TIFFGetField(in, TIFFTAG_IMAGEWIDTH, &imagewidth); TIFFGetField(in, TIFFTAG_IMAGELENGTH, &imagelength); @@ -184,8 +187,21 @@ main(int argc, char* argv[]) { unsigned char *ibuf, *obuf; register unsigned char* pp; register uint32 x; - ibuf = (unsigned char*)_TIFFmalloc(TIFFScanlineSize(in)); - obuf = (unsigned char*)_TIFFmalloc(TIFFScanlineSize(out)); + tmsize_t tss_in = TIFFScanlineSize(in); + tmsize_t tss_out = TIFFScanlineSize(out); + if (tss_out / tss_in < 3) { + /* + * BUG 2750: The following code does not know about chroma + * subsampling of JPEG data. It assumes that the output buffer is 3x + * the length of the input buffer due to exploding the palette into + * RGB tuples. If this assumption is incorrect, it could lead to a + * buffer overflow. Go ahead and fail now to prevent that. + */ + fprintf(stderr, "Could not determine correct image size for output. Exiting.\n"); + return -1; + } + ibuf = (unsigned char*)_TIFFmalloc(tss_in); + obuf = (unsigned char*)_TIFFmalloc(tss_out); switch (config) { case PLANARCONFIG_CONTIG: for (row = 0; row < imagelength; row++) { diff --git a/external/tiff-4.0.9/tools/ppm2tiff.c b/external/tiff-4.1.0/tools/ppm2tiff.c similarity index 98% rename from external/tiff-4.0.9/tools/ppm2tiff.c rename to external/tiff-4.1.0/tools/ppm2tiff.c index 81ffa3db..2b275618 100644 --- a/external/tiff-4.0.9/tools/ppm2tiff.c +++ b/external/tiff-4.1.0/tools/ppm2tiff.c @@ -1,5 +1,3 @@ -/* $Id: ppm2tiff.c,v 1.19 2015-06-21 01:09:10 bfriesen Exp $ */ - /* * Copyright (c) 1991-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. @@ -50,7 +48,7 @@ #include "tiffio.h" #ifndef HAVE_GETOPT -extern int getopt(int, char**, char*); +extern int getopt(int argc, char * const argv[], const char *optstring); #endif #define streq(a,b) (strcmp(a,b) == 0) @@ -285,6 +283,8 @@ main(int argc, char* argv[]) if (TIFFWriteScanline(out, buf, row, 0) < 0) break; } + if (in != stdin) + fclose(in); (void) TIFFClose(out); if (buf) _TIFFfree(buf); diff --git a/external/tiff-4.0.9/tools/raw2tiff.c b/external/tiff-4.1.0/tools/raw2tiff.c similarity index 99% rename from external/tiff-4.0.9/tools/raw2tiff.c rename to external/tiff-4.1.0/tools/raw2tiff.c index 083e9ee7..ab36ff4e 100644 --- a/external/tiff-4.0.9/tools/raw2tiff.c +++ b/external/tiff-4.1.0/tools/raw2tiff.c @@ -1,5 +1,4 @@ -/* $Id: raw2tiff.c,v 1.29 2017-01-14 13:12:33 erouault Exp $ - * +/* * Project: libtiff tools * Purpose: Convert raw byte sequences in TIFF images * Author: Andrey Kiselev, dron@ak4719.spb.edu @@ -61,7 +60,7 @@ #include "tiffio.h" #ifndef HAVE_GETOPT -extern int getopt(int, char**, char*); +extern int getopt(int argc, char * const argv[], const char *optstring); #endif #ifndef O_BINARY diff --git a/external/tiff-4.0.9/tools/rgb2ycbcr.c b/external/tiff-4.1.0/tools/rgb2ycbcr.c similarity index 99% rename from external/tiff-4.0.9/tools/rgb2ycbcr.c rename to external/tiff-4.1.0/tools/rgb2ycbcr.c index 7a9d705e..cf5f956f 100644 --- a/external/tiff-4.0.9/tools/rgb2ycbcr.c +++ b/external/tiff-4.1.0/tools/rgb2ycbcr.c @@ -1,5 +1,3 @@ -/* $Id: rgb2ycbcr.c,v 1.17 2016-08-15 21:26:56 erouault Exp $ */ - /* * Copyright (c) 1991-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/tools/thumbnail.c b/external/tiff-4.1.0/tools/thumbnail.c similarity index 97% rename from external/tiff-4.0.9/tools/thumbnail.c rename to external/tiff-4.1.0/tools/thumbnail.c index ab6a1d28..169a6369 100644 --- a/external/tiff-4.0.9/tools/thumbnail.c +++ b/external/tiff-4.1.0/tools/thumbnail.c @@ -1,5 +1,3 @@ -/* $Id: thumbnail.c,v 1.21 2015-06-21 01:09:10 bfriesen Exp $ */ - /* * Copyright (c) 1994-1997 Sam Leffler * Copyright (c) 1994-1997 Silicon Graphics, Inc. @@ -42,7 +40,7 @@ #include "tiffio.h" #ifndef HAVE_GETOPT -extern int getopt(int, char**, char*); +extern int getopt(int argc, char * const argv[], const char *optstring); #endif #define streq(a,b) (strcmp(a,b) == 0) @@ -527,15 +525,15 @@ setrow(uint8* row, uint32 nrows, const uint8* rows[]) default: for (i = fw; i > 8; i--) acc += bits[*src++]; - /* fall thru... */ - case 8: acc += bits[*src++]; - case 7: acc += bits[*src++]; - case 6: acc += bits[*src++]; - case 5: acc += bits[*src++]; - case 4: acc += bits[*src++]; - case 3: acc += bits[*src++]; - case 2: acc += bits[*src++]; - case 1: acc += bits[*src++]; + /* fall through... */ + case 8: acc += bits[*src++]; /* fall through */ + case 7: acc += bits[*src++]; /* fall through */ + case 6: acc += bits[*src++]; /* fall through */ + case 5: acc += bits[*src++]; /* fall through */ + case 4: acc += bits[*src++]; /* fall through */ + case 3: acc += bits[*src++]; /* fall through */ + case 2: acc += bits[*src++]; /* fall through */ + case 1: acc += bits[*src++]; /* fall through */ case 0: break; } acc += bits[*src & mask1]; diff --git a/external/tiff-4.0.9/tools/tiff2bw.c b/external/tiff-4.1.0/tools/tiff2bw.c similarity index 94% rename from external/tiff-4.0.9/tools/tiff2bw.c rename to external/tiff-4.1.0/tools/tiff2bw.c index 0c530157..dbc697b0 100644 --- a/external/tiff-4.0.9/tools/tiff2bw.c +++ b/external/tiff-4.1.0/tools/tiff2bw.c @@ -1,5 +1,3 @@ -/* $Id: tiff2bw.c,v 1.21 2017-11-01 13:41:58 bfriesen Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. @@ -40,9 +38,7 @@ #endif #include "tiffio.h" - -#define streq(a,b) (strcmp((a),(b)) == 0) -#define strneq(a,b,n) (strncmp(a,b,n) == 0) +#include "tiffiop.h" /* x% weighting -> fraction of full color */ #define PCT(x) (((x)*256+50)/100) @@ -223,6 +219,11 @@ main(int argc, char* argv[]) TIFFSetField(out, TIFFTAG_IMAGEDESCRIPTION, thing); TIFFSetField(out, TIFFTAG_SOFTWARE, "tiff2bw"); outbuf = (unsigned char *)_TIFFmalloc(TIFFScanlineSize(out)); + if( !outbuf ) + { + fprintf(stderr, "Out of memory\n"); + goto tiff2bw_error; + } TIFFSetField(out, TIFFTAG_ROWSPERSTRIP, TIFFDefaultStripSize(out, rowsperstrip)); @@ -246,6 +247,11 @@ main(int argc, char* argv[]) #undef CVT } inbuf = (unsigned char *)_TIFFmalloc(TIFFScanlineSize(in)); + if( !inbuf ) + { + fprintf(stderr, "Out of memory\n"); + goto tiff2bw_error; + } for (row = 0; row < h; row++) { if (TIFFReadScanline(in, inbuf, row, 0) < 0) break; @@ -256,6 +262,11 @@ main(int argc, char* argv[]) break; case pack(PHOTOMETRIC_RGB, PLANARCONFIG_CONTIG): inbuf = (unsigned char *)_TIFFmalloc(TIFFScanlineSize(in)); + if( !inbuf ) + { + fprintf(stderr, "Out of memory\n"); + goto tiff2bw_error; + } for (row = 0; row < h; row++) { if (TIFFReadScanline(in, inbuf, row, 0) < 0) break; @@ -265,8 +276,16 @@ main(int argc, char* argv[]) } break; case pack(PHOTOMETRIC_RGB, PLANARCONFIG_SEPARATE): + { + tmsize_t inbufsize; rowsize = TIFFScanlineSize(in); - inbuf = (unsigned char *)_TIFFmalloc(3*rowsize); + inbufsize = TIFFSafeMultiply(tmsize_t, 3, rowsize); + inbuf = (unsigned char *)_TIFFmalloc(inbufsize); + if( !inbuf ) + { + fprintf(stderr, "Out of memory\n"); + goto tiff2bw_error; + } for (row = 0; row < h; row++) { for (s = 0; s < 3; s++) if (TIFFReadScanline(in, @@ -278,6 +297,7 @@ main(int argc, char* argv[]) break; } break; + } } #undef pack if (inbuf) diff --git a/external/tiff-4.0.9/tools/tiff2pdf.c b/external/tiff-4.1.0/tools/tiff2pdf.c similarity index 98% rename from external/tiff-4.0.9/tools/tiff2pdf.c rename to external/tiff-4.1.0/tools/tiff2pdf.c index bd23c9e5..779c1662 100644 --- a/external/tiff-4.0.9/tools/tiff2pdf.c +++ b/external/tiff-4.1.0/tools/tiff2pdf.c @@ -1,4 +1,4 @@ -/* $Id: tiff2pdf.c,v 1.103 2017-10-29 18:50:41 bfriesen Exp $ +/* * * tiff2pdf - converts a TIFF image to a PDF document * @@ -54,7 +54,7 @@ #include "tiffio.h" #ifndef HAVE_GETOPT -extern int getopt(int, char**, char*); +extern int getopt(int argc, char * const argv[], const char *optstring); #endif #ifndef EXIT_SUCCESS @@ -1292,10 +1292,10 @@ int t2p_cmp_t2p_page(const void* e1, const void* e2){ void t2p_read_tiff_data(T2P* t2p, TIFF* input){ int i=0; - uint16* r; - uint16* g; - uint16* b; - uint16* a; + uint16* r = NULL; + uint16* g = NULL; + uint16* b = NULL; + uint16* a = NULL; uint16 xuint16; uint16* xuint16p; float* xfloatp; @@ -1522,12 +1522,19 @@ void t2p_read_tiff_data(T2P* t2p, TIFF* input){ t2p->pdf_palettesize=0x0001<tiff_bitspersample; if(!TIFFGetField(input, TIFFTAG_COLORMAP, &r, &g, &b)){ TIFFError( - TIFF2PDF_MODULE, - "Palettized image %s has no color map", + TIFF2PDF_MODULE, + "Palettized image %s has no color map", TIFFFileName(input)); t2p->t2p_error = T2P_ERR_ERROR; return; - } + } + if(r == NULL || g == NULL || b == NULL){ + TIFFError( + TIFF2PDF_MODULE, + "Error getting 3 components from color map"); + t2p->t2p_error = T2P_ERR_ERROR; + return; + } if(t2p->pdf_palette != NULL){ _TIFFfree(t2p->pdf_palette); t2p->pdf_palette=NULL; @@ -1591,12 +1598,19 @@ void t2p_read_tiff_data(T2P* t2p, TIFF* input){ t2p->pdf_palettesize=0x0001<tiff_bitspersample; if(!TIFFGetField(input, TIFFTAG_COLORMAP, &r, &g, &b, &a)){ TIFFError( - TIFF2PDF_MODULE, - "Palettized image %s has no color map", + TIFF2PDF_MODULE, + "Palettized image %s has no color map", TIFFFileName(input)); t2p->t2p_error = T2P_ERR_ERROR; return; - } + } + if(r == NULL || g == NULL || b == NULL || a == NULL){ + TIFFError( + TIFF2PDF_MODULE, + "Error getting 4 components from color map"); + t2p->t2p_error = T2P_ERR_ERROR; + return; + } if(t2p->pdf_palette != NULL){ _TIFFfree(t2p->pdf_palette); t2p->pdf_palette=NULL; @@ -3020,6 +3034,7 @@ tsize_t t2p_readwrite_pdf_image_tile(T2P* t2p, TIFF* input, TIFF* output, ttile_ "for t2p_readwrite_pdf_image_tile, %s", (unsigned long) t2p->tiff_datasize, TIFFFileName(input)); + _TIFFfree(buffer); t2p->t2p_error = T2P_ERR_ERROR; return(0); } @@ -3103,19 +3118,26 @@ tsize_t t2p_readwrite_pdf_image_tile(T2P* t2p, TIFF* input, TIFF* output, ttile_ if(t2p->pdf_sample & T2P_SAMPLE_LAB_SIGNED_TO_UNSIGNED){ t2p->tiff_datasize=t2p_sample_lab_signed_to_unsigned( - (tdata_t)buffer, + (tdata_t)buffer, t2p->tiff_tiles[t2p->pdf_page].tiles_tilewidth *t2p->tiff_tiles[t2p->pdf_page].tiles_tilelength); } } if(t2p_tile_is_right_edge(t2p->tiff_tiles[t2p->pdf_page], tile) != 0){ - t2p_tile_collapse_left( - buffer, - TIFFTileRowSize(input), - t2p->tiff_tiles[t2p->pdf_page].tiles_tilewidth, - t2p->tiff_tiles[t2p->pdf_page].tiles_edgetilewidth, - t2p->tiff_tiles[t2p->pdf_page].tiles_tilelength); + if ((uint64)t2p->tiff_datasize < (uint64)TIFFTileRowSize(input) * (uint64)t2p->tiff_tiles[t2p->pdf_page].tiles_tilelength) { + /* we don't know how to handle PLANARCONFIG_CONTIG, PHOTOMETRIC_YCBCR with 3 samples per pixel */ + TIFFWarning( + TIFF2PDF_MODULE, + "Don't know how to collapse tile to the left"); + } else { + t2p_tile_collapse_left( + buffer, + TIFFTileRowSize(input), + t2p->tiff_tiles[t2p->pdf_page].tiles_tilewidth, + t2p->tiff_tiles[t2p->pdf_page].tiles_edgetilewidth, + t2p->tiff_tiles[t2p->pdf_page].tiles_tilelength); + } } @@ -3746,12 +3768,13 @@ tsize_t t2p_sample_rgbaa_to_rgb(tdata_t data, uint32 samplecount) { uint32 i; - - /* For the 3 first samples, there is overlapping between souce and - destination, so use memmove(). - See http://bugzilla.maptools.org/show_bug.cgi?id=2577 */ - for(i = 0; i < 3 && i < samplecount; i++) - memmove((uint8*)data + i * 3, (uint8*)data + i * 4, 3); + + /* For the 3 first samples, there is overlap between source and + * destination, so use memmove(). + * See http://bugzilla.maptools.org/show_bug.cgi?id=2577 + */ + for(i = 0; i < 3 && i < samplecount; i++) + memmove((uint8*)data + i * 3, (uint8*)data + i * 4, 3); for(; i < samplecount; i++) memcpy((uint8*)data + i * 3, (uint8*)data + i * 4, 3); @@ -4250,13 +4273,13 @@ void t2p_pdf_currenttime(T2P* t2p) currenttime = localtime(&timenow); snprintf(t2p->pdf_datetime, sizeof(t2p->pdf_datetime), - "D:%.4d%.2d%.2d%.2d%.2d%.2d", - (currenttime->tm_year + 1900) % 65536, - (currenttime->tm_mon + 1) % 256, - (currenttime->tm_mday) % 256, - (currenttime->tm_hour) % 256, - (currenttime->tm_min) % 256, - (currenttime->tm_sec) % 256); + "D:%.4u%.2u%.2u%.2u%.2u%.2u", + TIFFmin((unsigned) currenttime->tm_year + 1900U,9999U), + TIFFmin((unsigned) currenttime->tm_mon + 1U,12U), /* 0-11 + 1 */ + TIFFmin((unsigned) currenttime->tm_mday,31U), /* 1-31 */ + TIFFmin((unsigned) currenttime->tm_hour,23U), /* 0-23 */ + TIFFmin((unsigned) currenttime->tm_min,59U), /* 0-59 */ + TIFFmin((unsigned) (currenttime->tm_sec),60U)); /* 0-60 */ return; } diff --git a/external/tiff-4.0.9/tools/tiff2ps.c b/external/tiff-4.1.0/tools/tiff2ps.c similarity index 99% rename from external/tiff-4.0.9/tools/tiff2ps.c rename to external/tiff-4.1.0/tools/tiff2ps.c index f1f0b372..5874aba6 100644 --- a/external/tiff-4.0.9/tools/tiff2ps.c +++ b/external/tiff-4.1.0/tools/tiff2ps.c @@ -1,5 +1,3 @@ -/* $Id: tiff2ps.c,v 1.56 2017-04-27 15:46:22 erouault Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. @@ -63,7 +61,7 @@ * if not specified on the command line. * Add new command line option to specify document creator * as an alterntive to the string "tiff2ps" following model - * of patch submitted by Thomas Jarosch for specifiying a + * of patch submitted by Thomas Jarosch for specifying a * document title which is also supported now. * * 2009-Feb-11 @@ -73,7 +71,7 @@ * or landscape) if -h or -w is specified. Rotation is in * degrees counterclockwise since that is how Postscript does * it. The auto opption rotates the image 90 degrees ccw to - * produce landscape if that is a better fit than portait. + * produce landscape if that is a better fit than portrait. * * Cleaned up code in TIFF2PS and broke into smaller functions * to simplify rotations. @@ -520,7 +518,7 @@ checkImage(TIFF* tif) "PhotometricInterpretation=YCbCr"); return (0); } - /* fall thru... */ + /* fall through... */ case PHOTOMETRIC_RGB: if (alpha && bitspersample != 8) { TIFFError(filename, @@ -528,7 +526,7 @@ checkImage(TIFF* tif) bitspersample); return (0); } - /* fall thru... */ + /* fall through... */ case PHOTOMETRIC_SEPARATED: case PHOTOMETRIC_PALETTE: case PHOTOMETRIC_MINISBLACK: @@ -552,7 +550,7 @@ checkImage(TIFF* tif) bitspersample = 8; break; case PHOTOMETRIC_CIELAB: - /* fall thru... */ + /* fall through... */ default: TIFFError(filename, "Can not handle image with PhotometricInterpretation=%d", @@ -684,8 +682,8 @@ isCCITTCompression(TIFF* tif) static tsize_t tf_bytesperrow; static tsize_t ps_bytesperrow; -static tsize_t tf_rowsperstrip; -static tsize_t tf_numberstrips; +static uint32 tf_rowsperstrip; +static uint32 tf_numberstrips; static char *hex = "0123456789abcdef"; /* @@ -1800,7 +1798,7 @@ PS_Lvl2ImageDict(FILE* fd, TIFF* tif, uint32 w, uint32 h) int use_rawdata; uint32 tile_width, tile_height; uint16 predictor, minsamplevalue, maxsamplevalue; - int repeat_count; + uint32 repeat_count; char im_h[64], im_x[64], im_y[64]; char * imageOp = "image"; @@ -1852,7 +1850,7 @@ PS_Lvl2ImageDict(FILE* fd, TIFF* tif, uint32 w, uint32 h) fputs("{ % exec\n", fd); if (repeat_count > 1) - fprintf(fd, "%d { %% repeat\n", repeat_count); + fprintf(fd, "%u { %% repeat\n", repeat_count); /* * Output filter options and image dictionary. @@ -2266,7 +2264,7 @@ PS_Lvl2page(FILE* fd, TIFF* tif, uint32 w, uint32 h) if (alpha) { int adjust, i, j = 0; int ncomps = samplesperpixel - extrasamples; - for (i = 0; i < byte_count; i+=samplesperpixel) { + for (i = 0; (i + ncomps) < byte_count; i+=samplesperpixel) { adjust = 255 - buf_data[i + ncomps]; switch (ncomps) { case 1: @@ -2446,9 +2444,9 @@ PSDataColorContig(FILE* fd, TIFF* tif, uint32 w, uint32 h, int nc) unsigned char *cp, c; (void) w; - if( es <= 0 ) + if( es < 0 ) { - TIFFError(filename, "Inconsistent value of es: %d", es); + TIFFError(filename, "Inconsistent value of es: %d (samplesperpixel=%u, nc=%d)", es, samplesperpixel, nc); return; } tf_buf = (unsigned char *) _TIFFmalloc(tf_bytesperrow); @@ -2470,7 +2468,7 @@ PSDataColorContig(FILE* fd, TIFF* tif, uint32 w, uint32 h, int nc) if (alpha) { int adjust; cc = 0; - for (; cc < tf_bytesperrow; cc += samplesperpixel) { + for (; (cc + nc) <= tf_bytesperrow; cc += samplesperpixel) { DOBREAK(breaklen, nc, fd); /* * For images with alpha, matte against @@ -2489,7 +2487,7 @@ PSDataColorContig(FILE* fd, TIFF* tif, uint32 w, uint32 h, int nc) } } else { cc = 0; - for (; cc < tf_bytesperrow; cc += samplesperpixel) { + for (; (cc + nc) <= tf_bytesperrow; cc += samplesperpixel) { DOBREAK(breaklen, nc, fd); switch (nc) { case 4: c = *cp++; PUTHEX(c,fd); @@ -2768,7 +2766,7 @@ PSRawDataBW(FILE* fd, TIFF* tif, uint32 w, uint32 h) bufsize = (uint32) bc[0]; - for ( s = 0; ++s < (tstrip_t)tf_numberstrips; ) { + for ( s = 0; ++s < tf_numberstrips; ) { if ( bc[s] > bufsize ) bufsize = (uint32) bc[s]; } @@ -2801,7 +2799,7 @@ PSRawDataBW(FILE* fd, TIFF* tif, uint32 w, uint32 h) } #endif - for (s = 0; s < (tstrip_t) tf_numberstrips; s++) { + for (s = 0; s < tf_numberstrips; s++) { cc = TIFFReadRawStrip(tif, s, tf_buf, (tmsize_t) bc[s]); if (cc < 0) { TIFFError(filename, "Can't read strip"); @@ -2968,10 +2966,10 @@ tsize_t Ascii85EncodeBlock( uint8 * ascii85_p, unsigned f_eod, const uint8 * raw for ( ; raw_l > 3; raw_l -= 4 ) { - val32 = *(++raw_p) << 24; - val32 += *(++raw_p) << 16; - val32 += *(++raw_p) << 8; - val32 += *(++raw_p); + val32 = (uint32)*(++raw_p) << 24; + val32 += (uint32)*(++raw_p) << 16; + val32 += (uint32)*(++raw_p) << 8; + val32 += (uint32)*(++raw_p); if ( val32 == 0 ) /* Special case */ { diff --git a/external/tiff-4.0.9/tools/tiff2rgba.c b/external/tiff-4.1.0/tools/tiff2rgba.c similarity index 99% rename from external/tiff-4.0.9/tools/tiff2rgba.c rename to external/tiff-4.1.0/tools/tiff2rgba.c index 4de96aec..2eb6f6c4 100644 --- a/external/tiff-4.0.9/tools/tiff2rgba.c +++ b/external/tiff-4.1.0/tools/tiff2rgba.c @@ -1,5 +1,3 @@ -/* $Id: tiff2rgba.c,v 1.22 2016-08-15 20:06:41 erouault Exp $ */ - /* * Copyright (c) 1991-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/tools/tiffcmp.c b/external/tiff-4.1.0/tools/tiffcmp.c similarity index 98% rename from external/tiff-4.0.9/tools/tiffcmp.c rename to external/tiff-4.1.0/tools/tiffcmp.c index 1a008a30..7b764883 100644 --- a/external/tiff-4.0.9/tools/tiffcmp.c +++ b/external/tiff-4.1.0/tools/tiffcmp.c @@ -1,5 +1,3 @@ -/* $Id: tiffcmp.c,v 1.18 2015-06-21 01:09:10 bfriesen Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. @@ -42,7 +40,7 @@ #include "tiffio.h" #ifndef HAVE_GETOPT -extern int getopt(int, char**, char*); +extern int getopt(int argc, char * const argv[], const char *optstring); #endif static int stopondiff = 1; @@ -438,7 +436,8 @@ PrintIntDiff(uint32 row, int sample, uint32 pix, uint32 w1, uint32 w2) { int32 mask1, mask2, s; - mask1 = ~((-1) << bitspersample); + /* mask1 should have the n lowest bits set, where n == bitspersample */ + mask1 = ((int32)1 << bitspersample) - 1; s = (8 - bitspersample); mask2 = mask1 << s; for (; mask2 && pix < imagewidth; diff --git a/external/tiff-4.0.9/tools/tiffcp.c b/external/tiff-4.1.0/tools/tiffcp.c similarity index 97% rename from external/tiff-4.0.9/tools/tiffcp.c rename to external/tiff-4.1.0/tools/tiffcp.c index 489459a7..84d81488 100644 --- a/external/tiff-4.0.9/tools/tiffcp.c +++ b/external/tiff-4.1.0/tools/tiffcp.c @@ -1,5 +1,3 @@ -/* $Id: tiffcp.c,v 1.61 2017-01-11 19:26:14 erouault Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. @@ -43,6 +41,7 @@ #include #include #include +#include #include @@ -53,7 +52,7 @@ #include "tiffio.h" #ifndef HAVE_GETOPT -extern int getopt(int, char**, char*); +extern int getopt(int argc, char * const argv[], const char *optstring); #endif #if defined(VMS) @@ -391,6 +390,12 @@ processCompressOptions(char* opt) } else if (strneq(opt, "lzma", 4)) { processZIPOptions(opt); defcompression = COMPRESSION_LZMA; + } else if (strneq(opt, "zstd", 4)) { + processZIPOptions(opt); + defcompression = COMPRESSION_ZSTD; + } else if (strneq(opt, "webp", 4)) { + processZIPOptions(opt); + defcompression = COMPRESSION_WEBP; } else if (strneq(opt, "jbig", 4)) { defcompression = COMPRESSION_JBIG; } else if (strneq(opt, "sgilog", 6)) { @@ -429,6 +434,8 @@ char* stuff[] = { " -c lzw[:opts] compress output with Lempel-Ziv & Welch encoding", " -c zip[:opts] compress output with deflate encoding", " -c lzma[:opts] compress output with LZMA2 encoding", +" -c zstd[:opts] compress output with ZSTD encoding", +" -c webp[:opts] compress output with WEBP encoding", " -c jpeg[:opts] compress output with JPEG encoding", " -c jbig compress output with ISO JBIG encoding", " -c packbits compress output with packbits encoding", @@ -448,7 +455,7 @@ char* stuff[] = { " r output color image as RGB rather than YCbCr", "For example, -c jpeg:r:50 to get JPEG-encoded RGB data with 50% comp. quality", "", -"LZW, Deflate (ZIP) and LZMA2 options:", +"LZW, Deflate (ZIP), LZMA2, ZSTD and WEBP options:", " # set predictor value", " p# set compression level (preset)", "For example, -c lzw:2 to get LZW-encoded data with horizontal differencing,", @@ -655,7 +662,7 @@ tiffcp(TIFF* in, TIFF* out) case ORIENTATION_RIGHTBOT: /* XXX */ TIFFWarning(TIFFFileName(in), "using bottom-left orientation"); orientation = ORIENTATION_BOTLEFT; - /* fall thru... */ + /* fall through... */ case ORIENTATION_LEFTBOT: /* XXX */ case ORIENTATION_BOTLEFT: break; @@ -664,7 +671,7 @@ tiffcp(TIFF* in, TIFF* out) default: TIFFWarning(TIFFFileName(in), "using top-left orientation"); orientation = ORIENTATION_TOPLEFT; - /* fall thru... */ + /* fall through... */ case ORIENTATION_LEFTTOP: /* XXX */ case ORIENTATION_TOPLEFT: break; @@ -733,6 +740,8 @@ tiffcp(TIFF* in, TIFF* out) case COMPRESSION_ADOBE_DEFLATE: case COMPRESSION_DEFLATE: case COMPRESSION_LZMA: + case COMPRESSION_ZSTD: + case COMPRESSION_WEBP: if (predictor != (uint16)-1) TIFFSetField(out, TIFFTAG_PREDICTOR, predictor); else @@ -743,6 +752,15 @@ tiffcp(TIFF* in, TIFF* out) TIFFSetField(out, TIFFTAG_ZIPQUALITY, preset); else if (compression == COMPRESSION_LZMA) TIFFSetField(out, TIFFTAG_LZMAPRESET, preset); + else if (compression == COMPRESSION_ZSTD) + TIFFSetField(out, TIFFTAG_ZSTD_LEVEL, preset); + else if (compression == COMPRESSION_WEBP) { + if (preset == 100) { + TIFFSetField(out, TIFFTAG_WEBP_LOSSLESS, TRUE); + } else { + TIFFSetField(out, TIFFTAG_WEBP_LEVEL, preset); + } + } } break; case COMPRESSION_CCITTFAX3: @@ -1391,7 +1409,7 @@ DECLAREreadFunc(readSeparateTilesIntoBuffer) int status = 1; uint32 imagew = TIFFRasterScanlineSize(in); uint32 tilew = TIFFTileRowSize(in); - int iskew = imagew - tilew*spp; + int iskew; tsize_t tilesize = TIFFTileSize(in); tdata_t tilebuf; uint8* bufp = (uint8*) buf; @@ -1399,6 +1417,12 @@ DECLAREreadFunc(readSeparateTilesIntoBuffer) uint32 row; uint16 bps = 0, bytes_per_sample; + if (spp > (INT_MAX / tilew)) + { + TIFFError(TIFFFileName(in), "Error, cannot handle that much samples per tile row (Tile Width * Samples/Pixel)"); + return 0; + } + iskew = imagew - tilew*spp; tilebuf = _TIFFmalloc(tilesize); if (tilebuf == 0) return 0; diff --git a/external/tiff-4.0.9/tools/tiffcrop.c b/external/tiff-4.1.0/tools/tiffcrop.c similarity index 99% rename from external/tiff-4.0.9/tools/tiffcrop.c rename to external/tiff-4.1.0/tools/tiffcrop.c index c60cb389..7b3c9e78 100644 --- a/external/tiff-4.0.9/tools/tiffcrop.c +++ b/external/tiff-4.1.0/tools/tiffcrop.c @@ -1,5 +1,3 @@ -/* $Id: tiffcrop.c,v 1.50 2017-01-11 12:51:59 erouault Exp $ */ - /* tiffcrop.c -- a port of tiffcp.c extended to include manipulations of * the image data through additional options listed below * @@ -27,7 +25,7 @@ * ON ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE * OR PERFORMANCE OF THIS SOFTWARE. * - * Some portions of the current code are derived from tiffcp, primarly in + * Some portions of the current code are derived from tiffcp, primarily in * the areas of lowlevel reading and writing of TAGS, scanlines and tiles though * some of the original functions have been extended to support arbitrary bit * depths. These functions are presented at the top of this file. @@ -150,11 +148,6 @@ extern int getopt(int argc, char * const argv[], const char *optstring); #define TIFF_UINT32_MAX 0xFFFFFFFFU -#ifndef streq -#define streq(a,b) (strcmp((a),(b)) == 0) -#endif -#define strneq(a,b,n) (strncmp((a),(b),(n)) == 0) - #define TRUE 1 #define FALSE 0 @@ -1687,7 +1680,7 @@ void process_command_opts (int argc, char *argv[], char *mp, char *mode, uint32 *defconfig = PLANARCONFIG_CONTIG; else { - TIFFError ("Unkown planar configuration", "%s", optarg); + TIFFError ("Unknown planar configuration", "%s", optarg); TIFFError ("For valid options type", "tiffcrop -h"); exit (-1); } @@ -2110,28 +2103,30 @@ void process_command_opts (int argc, char *argv[], char *mp, char *mode, uint32 * autoindex is set to non-zero. Update page and file counters * so TIFFTAG PAGENUM will be correct in image. */ -static int +static int update_output_file (TIFF **tiffout, char *mode, int autoindex, char *outname, unsigned int *page) { static int findex = 0; /* file sequence indicator */ + size_t basename_len; char *sep; - char filenum[16]; char export_ext[16]; char exportname[PATH_MAX]; if (autoindex && (*tiffout != NULL)) - { + { /* Close any export file that was previously opened */ TIFFClose (*tiffout); *tiffout = NULL; } - strcpy (export_ext, ".tiff"); - memset (exportname, '\0', PATH_MAX); + memcpy (export_ext, ".tiff", 6); + memset (exportname, '\0', sizeof(exportname)); - /* Leave room for page number portion of the new filename */ - strncpy (exportname, outname, PATH_MAX - 16); + /* Leave room for page number portion of the new filename : + * hyphen + 6 digits + dot + 4 extension characters + null terminator */ + #define FILENUM_MAX_LENGTH (1+6+1+4+1) + strncpy (exportname, outname, sizeof(exportname) - FILENUM_MAX_LENGTH); if (*tiffout == NULL) /* This is a new export file */ { if (autoindex) @@ -2143,21 +2138,21 @@ update_output_file (TIFF **tiffout, char *mode, int autoindex, *sep = '\0'; } else - strncpy (export_ext, ".tiff", 5); + memcpy (export_ext, ".tiff", 5); export_ext[5] = '\0'; + basename_len = strlen(exportname); /* MAX_EXPORT_PAGES limited to 6 digits to prevent string overflow of pathname */ if (findex > MAX_EXPORT_PAGES) - { - TIFFError("update_output_file", "Maximum of %d pages per file exceeded", MAX_EXPORT_PAGES); + { + TIFFError("update_output_file", "Maximum of %d pages per file exceeded", MAX_EXPORT_PAGES); return 1; } - snprintf(filenum, sizeof(filenum), "-%03d%s", findex, export_ext); - filenum[14] = '\0'; - strncat (exportname, filenum, 15); + /* We previously assured that there will be space left */ + snprintf(exportname + basename_len, sizeof(exportname) - basename_len, "-%03d%.5s", findex, export_ext); } - exportname[PATH_MAX - 1] = '\0'; + exportname[sizeof(exportname) - 1] = '\0'; *tiffout = TIFFOpen(exportname, mode); if (*tiffout == NULL) @@ -2165,11 +2160,11 @@ update_output_file (TIFF **tiffout, char *mode, int autoindex, TIFFError("update_output_file", "Unable to open output file %s", exportname); return 1; } - *page = 0; + *page = 0; return 0; } - else + else (*page)++; return 0; @@ -2214,8 +2209,9 @@ main(int argc, char* argv[]) unsigned int total_pages = 0; unsigned int total_images = 0; unsigned int end_of_input = FALSE; - int seg, length; - char temp_filename[PATH_MAX + 1]; + int seg; + size_t length; + char temp_filename[PATH_MAX + 16]; /* Extra space keeps the compiler from complaining */ little_endian = *((unsigned char *)&little_endian) & '1'; @@ -2314,8 +2310,8 @@ main(int argc, char* argv[]) if (dump.infile != NULL) fclose (dump.infile); - /* dump.infilename is guaranteed to be NUL termimated and have 20 bytes - fewer than PATH_MAX */ + /* dump.infilename is guaranteed to be NUL terminated and have 20 bytes + fewer than PATH_MAX */ snprintf(temp_filename, sizeof(temp_filename), "%s-read-%03d.%s", dump.infilename, dump_images, (dump.format == DUMP_TEXT) ? "txt" : "raw"); @@ -2333,7 +2329,7 @@ main(int argc, char* argv[]) if (dump.outfile != NULL) fclose (dump.outfile); - /* dump.outfilename is guaranteed to be NUL termimated and have 20 bytes + /* dump.outfilename is guaranteed to be NUL terminated and have 20 bytes fewer than PATH_MAX */ snprintf(temp_filename, sizeof(temp_filename), "%s-write-%03d.%s", dump.outfilename, dump_images, @@ -6783,12 +6779,12 @@ extractImageSection(struct image_data *image, struct pageseg *section, #endif bytebuff1 = bytebuff2 = 0; - if (shift1 == 0) /* the region is byte and sample alligned */ + if (shift1 == 0) /* the region is byte and sample aligned */ { _TIFFmemcpy (sect_buff + dst_offset, src_buff + offset1, full_bytes); #ifdef DEVELMODE - TIFFError ("", " Alligned data src offset1: %8d, Dst offset: %8d\n", offset1, dst_offset); + TIFFError ("", " Aligned data src offset1: %8d, Dst offset: %8d\n", offset1, dst_offset); sprintf(&bitarray[18], "\n"); sprintf(&bitarray[19], "\t"); for (j = 20, k = 7; j < 28; j++, k--) @@ -7731,7 +7727,7 @@ createCroppedImage(struct image_data *image, struct crop_mask *crop, * original code assumes we are always copying all samples. * Use of global variables for config, compression and others * should be replaced by addition to the crop_mask struct (which - * will be renamed to proc_opts indicating that is controlls + * will be renamed to proc_opts indicating that is controls * user supplied processing options, not just cropping) and * then passed in as an argument. */ @@ -8426,7 +8422,7 @@ rotateImage(uint16 rotation, struct image_data *image, uint32 *img_width, ibuff = *ibuff_ptr; switch (rotation) { - case 180: if ((bps % 8) == 0) /* byte alligned data */ + case 180: if ((bps % 8) == 0) /* byte aligned data */ { src = ibuff; pix_offset = (spp * bps) / 8; @@ -9066,8 +9062,9 @@ mirrorImage(uint16 spp, uint16 bps, uint16 mirror, uint32 width, uint32 length, _TIFFfree(line_buff); if (mirror == MIRROR_VERT) break; + /* Fall through */ case MIRROR_HORIZ : - if ((bps % 8) == 0) /* byte alligned data */ + if ((bps % 8) == 0) /* byte aligned data */ { for (row = 0; row < length; row++) { @@ -9147,7 +9144,6 @@ static int invertImage(uint16 photometric, uint16 spp, uint16 bps, uint32 width, uint32 length, unsigned char *work_buff) { uint32 row, col; - unsigned char bytebuff1, bytebuff2, bytebuff3, bytebuff4; unsigned char *src; uint16 *src_uint16; uint32 *src_uint32; @@ -9177,7 +9173,7 @@ invertImage(uint16 photometric, uint16 spp, uint16 bps, uint32 width, uint32 len for (row = 0; row < length; row++) for (col = 0; col < width; col++) { - *src_uint32 = (uint32)0xFFFFFFFF - *src_uint32; + *src_uint32 = ~(*src_uint32); src_uint32++; } break; @@ -9185,39 +9181,15 @@ invertImage(uint16 photometric, uint16 spp, uint16 bps, uint32 width, uint32 len for (row = 0; row < length; row++) for (col = 0; col < width; col++) { - *src_uint16 = (uint16)0xFFFF - *src_uint16; + *src_uint16 = ~(*src_uint16); src_uint16++; } break; - case 8: for (row = 0; row < length; row++) - for (col = 0; col < width; col++) - { - *src = (uint8)255 - *src; - src++; - } - break; - case 4: for (row = 0; row < length; row++) - for (col = 0; col < width; col++) - { - bytebuff1 = 16 - (uint8)(*src & 240 >> 4); - bytebuff2 = 16 - (*src & 15); - *src = bytebuff1 << 4 & bytebuff2; - src++; - } - break; - case 2: for (row = 0; row < length; row++) - for (col = 0; col < width; col++) - { - bytebuff1 = 4 - (uint8)(*src & 192 >> 6); - bytebuff2 = 4 - (uint8)(*src & 48 >> 4); - bytebuff3 = 4 - (uint8)(*src & 12 >> 2); - bytebuff4 = 4 - (uint8)(*src & 3); - *src = (bytebuff1 << 6) || (bytebuff2 << 4) || (bytebuff3 << 2) || bytebuff4; - src++; - } - break; + case 8: + case 4: + case 2: case 1: for (row = 0; row < length; row++) - for (col = 0; col < width; col += 8 /(spp * bps)) + for (col = 0; col < width; col += 8 / bps) { *src = ~(*src); src++; diff --git a/external/tiff-4.0.9/tools/tiffdither.c b/external/tiff-4.1.0/tools/tiffdither.c similarity index 99% rename from external/tiff-4.0.9/tools/tiffdither.c rename to external/tiff-4.1.0/tools/tiffdither.c index 247553cd..3fd7f81a 100644 --- a/external/tiff-4.0.9/tools/tiffdither.c +++ b/external/tiff-4.1.0/tools/tiffdither.c @@ -1,5 +1,3 @@ -/* $Id: tiffdither.c,v 1.16 2015-06-21 01:09:11 bfriesen Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. diff --git a/external/tiff-4.0.9/tools/tiffdump.c b/external/tiff-4.1.0/tools/tiffdump.c similarity index 99% rename from external/tiff-4.0.9/tools/tiffdump.c rename to external/tiff-4.1.0/tools/tiffdump.c index 3de0062b..4cdcda0c 100644 --- a/external/tiff-4.0.9/tools/tiffdump.c +++ b/external/tiff-4.1.0/tools/tiffdump.c @@ -1,5 +1,3 @@ -/* $Id: tiffdump.c,v 1.35 2016-11-19 15:42:46 bfriesen Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. @@ -53,7 +51,7 @@ #endif #ifndef HAVE_GETOPT -extern int getopt(int, char**, char*); +extern int getopt(int argc, char * const argv[], const char *optstring); #endif #include "tiffio.h" diff --git a/external/tiff-4.0.9/tools/tiffgt.c b/external/tiff-4.1.0/tools/tiffgt.c similarity index 99% rename from external/tiff-4.0.9/tools/tiffgt.c rename to external/tiff-4.1.0/tools/tiffgt.c index 35a23ccf..2f11b0ca 100644 --- a/external/tiff-4.0.9/tools/tiffgt.c +++ b/external/tiff-4.1.0/tools/tiffgt.c @@ -1,5 +1,3 @@ -/* $Id: tiffgt.c,v 1.15 2015-09-06 20:42:20 bfriesen Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. @@ -29,11 +27,16 @@ #include #include #include +#if HAVE_UNISTD_H #include +#endif #ifdef HAVE_OPENGL_GL_H # include #else +# ifdef _WIN32 +# include +# endif # include #endif #ifdef HAVE_GLUT_GLUT_H @@ -46,7 +49,7 @@ #include "tiffiop.h" #ifndef HAVE_GETOPT -extern int getopt(int, char**, char*); +extern int getopt(int argc, char * const argv[], const char *optstring); #endif static uint32 width = 0, height = 0; /* window width & height */ diff --git a/external/tiff-4.0.9/tools/tiffinfo.c b/external/tiff-4.1.0/tools/tiffinfo.c similarity index 99% rename from external/tiff-4.0.9/tools/tiffinfo.c rename to external/tiff-4.1.0/tools/tiffinfo.c index 4d58055d..049e3a34 100644 --- a/external/tiff-4.0.9/tools/tiffinfo.c +++ b/external/tiff-4.1.0/tools/tiffinfo.c @@ -1,5 +1,3 @@ -/* $Id: tiffinfo.c,v 1.26 2016-12-03 14:18:49 erouault Exp $ */ - /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. @@ -86,7 +84,7 @@ main(int argc, char* argv[]) break; case 'd': showdata++; - /* fall thru... */ + /* fall through... */ case 'D': readdata++; break; diff --git a/external/tiff-4.0.9/tools/tiffmedian.c b/external/tiff-4.1.0/tools/tiffmedian.c similarity index 99% rename from external/tiff-4.0.9/tools/tiffmedian.c rename to external/tiff-4.1.0/tools/tiffmedian.c index f0c892e4..bd0d1561 100644 --- a/external/tiff-4.0.9/tools/tiffmedian.c +++ b/external/tiff-4.1.0/tools/tiffmedian.c @@ -1,5 +1,3 @@ -/* $Id: tiffmedian.c,v 1.13 2015-06-21 01:09:11 bfriesen Exp $ */ - /* * Apply median cut on an image. * diff --git a/external/tiff-4.0.9/tools/tiffset.c b/external/tiff-4.1.0/tools/tiffset.c similarity index 92% rename from external/tiff-4.0.9/tools/tiffset.c rename to external/tiff-4.1.0/tools/tiffset.c index 894c9f1f..7ecc401b 100644 --- a/external/tiff-4.0.9/tools/tiffset.c +++ b/external/tiff-4.1.0/tools/tiffset.c @@ -1,6 +1,4 @@ /****************************************************************************** - * $Id: tiffset.c,v 1.19 2017-10-01 17:38:12 erouault Exp $ - * * Project: libtiff tools * Purpose: Mainline for setting metadata in existing TIFF files. * Author: Frank Warmerdam, warmerdam@pobox.com @@ -29,6 +27,7 @@ ****************************************************************************** */ +#include "tif_config.h" #include #include @@ -189,6 +188,9 @@ main(int argc, char* argv[]) size = 4; break; + case TIFF_LONG8: + case TIFF_SLONG8: + case TIFF_IFD8: case TIFF_DOUBLE: size = 8; break; @@ -225,7 +227,16 @@ main(int argc, char* argv[]) case TIFF_SLONG: case TIFF_IFD: for (i = 0; i < wc; i++) - ((uint32 *)array)[i] = atol(argv[arg_index+i]); + ((int32 *)array)[i] = atol(argv[arg_index+i]); + break; + case TIFF_LONG8: + for (i = 0; i < wc; i++) + ((uint64 *)array)[i] = strtoll(argv[arg_index+i], (char **)NULL, 10); + break; + case TIFF_SLONG8: + case TIFF_IFD8: + for (i = 0; i < wc; i++) + ((int64 *)array)[i] = strtoll(argv[arg_index+i], (char **)NULL, 10); break; case TIFF_DOUBLE: for (i = 0; i < wc; i++) @@ -276,6 +287,12 @@ main(int argc, char* argv[]) ret = TIFFSetField(tiff, TIFFFieldTag(fip), atol(argv[arg_index++])); break; + case TIFF_LONG8: + case TIFF_SLONG8: + case TIFF_IFD8: + ret = TIFFSetField(tiff, TIFFFieldTag(fip), + strtoll(argv[arg_index++], (char **)NULL, 10)); + break; case TIFF_DOUBLE: ret = TIFFSetField(tiff, TIFFFieldTag(fip), atof(argv[arg_index++])); diff --git a/external/tiff-4.0.9/tools/tiffsplit.c b/external/tiff-4.1.0/tools/tiffsplit.c similarity index 98% rename from external/tiff-4.0.9/tools/tiffsplit.c rename to external/tiff-4.1.0/tools/tiffsplit.c index c4fa2478..c8b7f2dd 100644 --- a/external/tiff-4.0.9/tools/tiffsplit.c +++ b/external/tiff-4.1.0/tools/tiffsplit.c @@ -1,5 +1,3 @@ -/* $Id: tiffsplit.c,v 1.23 2015-05-28 13:10:26 bfriesen Exp $ */ - /* * Copyright (c) 1992-1997 Sam Leffler * Copyright (c) 1992-1997 Silicon Graphics, Inc. @@ -33,7 +31,7 @@ #include "tiffio.h" #ifndef HAVE_GETOPT -extern int getopt(int, char**, char*); +extern int getopt(int argc, char * const argv[], const char *optstring); #endif #define CopyField(tag, v) \

  • fix a bug.

    -Thanks to MapTools.org, libtiff now uses -bugzilla to track bugs. All bugs filed in the older bugzilla at +The project is using +GitLab issues since October 2019. +Previously, the project used MapTools.org +bugzilla to track bugs: remaining tickets in that bugzilla instance have been +migrated to GitLab issues. All bugs filed in a older bugzilla at bugzilla.remotesensing.org (pre April 2008) have unfortunately been lost.

    If you think you've discovered a bug, please first check to see if it is -already known by looking at the list of already reported bugs. You can do so -by visiting the buglist at -http://bugzilla.maptools.org/buglist.cgi?product=libtiff. Also verify that -the problem is still reproducable with the current development software +already known by looking at the list of already reported bugs. Also verify that +the problem is still reproducible with the current development software from CVS.

    If you'd like to enter a new bug, you can do so at -http://bugzilla.maptools.org/enter_bug.cgi?product=libtiff. +https://gitlab.com/libtiff/libtiff/issues/new.

    If you'd like to inform us about some kind of security issue that should not be disclosed for a period of time, then you can contact maintainers directly. @@ -37,12 +38,12 @@