Hello community, here is the log from the commit of package freeimage for openSUSE:Factory checked in at 2016-01-01 19:47:10 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/freeimage (Old) and /work/SRC/openSUSE:Factory/.freeimage.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "freeimage" Changes: -------- --- /work/SRC/openSUSE:Factory/freeimage/freeimage.changes 2015-11-13 23:35:28.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.freeimage.new/freeimage.changes 2016-01-01 19:47:23.000000000 +0100 @@ -1,0 +2,93 @@ +Tue Dec 8 17:02:21 UTC 2015 - [email protected] + +- Update to version 3.17.0 + * FreeImage now uses LibPNG 1.6.16 + * FreeImage now uses LibWebP 0.4.2 (GIT patch 2015-03-03) + * FreeImage now uses LibRaw 0.17-Alpha1 + * FreeImage now uses LibTIFF 4.0.4 (CVS patch 2015-01-26) + * FreeImage now uses OpenEXR 2.2.0 + * removed VS 2003 project files : this IDE is no longer supported + because of its outdated C++ compiler + * added FreeImage_ConvertFromRawBitsEx + * added RAW_UNPROCESSED load flag to the RAW plugin + * added FreeImage_SetMetadataKeyValue + * added support for metadata writing to the JPEG-JXR plugin + * added VS 2013 project files + * added support for PNG tIME metadata (read/write, handle as + Exif-TIFF DateTime) + * added explicit definition of endianness and color order in + compiler options + * added FIQ_LFPQUANT quantizer algorithm + * added support for input 32-bit dib in Wu quantizer + * added FreeImage_ConvertToRGBAF and updated conversions in + FreeImage_ConvertToType + * added FreeImage_ConvertToRGBA16 and updated conversions in + FreeImage_ConvertToType + * added FreeImage_CreateView + * added FreeImage_RescaleRect + * added FreeImage_GetMemorySize + * ICO plugin: improved support for Vista icons + * fixed a rounding error in RGB to greyscale conversion formula + * fixed Makefile.fip so that it installs symlinks + * fixed a potential memory access violation in PluginHDR Save function + * fixed a bug in FreeImage_LookupSVGColor ("green" color was not found) + * fixed TARGA signature validation for TARGA versions < 2.0 + * fixed FreeImage_GetScanLine not working with very large images on x64 + platforms + * improved PluginTIFF compatibility with LibTIFF 4 + * fixed a segfault occuring on a corrupted animated GIF + * improved memory allocation in PluginRAW + * fixed loading/saving of TIFF containing a GPS IFD inside the Exif-TIFF + metadata segment (the solution is to ignore the tag) + * fixed a bug in FreeImage_JPEGCrop*/_JPEGTransform* functions occuring + when using the same source / destination filename + * fixed a bug with output image quality in PluginJP2::Save & + PluginJ2K::Save functions (regression from FI 3.15.4) + * improved RAW file format detection + * fixed FreeImage_GetFileType behavior with ANI file formats + * improved Exif reader so as to handle Exif IFD with a suspicious offset + (can occur with maker notes) + * fixed a memory leak in PluginPNG:Save occuring when dealing with invalid + PNG files + * fixed PNG plugin handling of 16-bit grayscale + 16-bit alpha images + * fixed PNG plugin handling of 16-bit grayscale + tRNS chunk images + * fixed PNG plugin handling of 24-bit RGB + tRNS chunk images + * fixed PNG plugin handling of 1-,4-bit greyscale/palettized + tRNS + chunk images + * fixed invalid directory delimiter in include statement (mingw-w64) + in Source/LibJXR/image/sys/strcodec.h + * fixed Invalid condition for defining _byteswap_ulong (mingw-w64) + in Source/LibJXR/image/sys/strcodec.c + * fixed FreeImage_Get*Mask not returning 0 for greyscale images + * fixed loading of external plugins when using UNICODE directory + names to store plugins + * fixed loading of JXR files when using memory streams + * added Dist/ directory creation in Makefiles (in case it is not + already present) +- For changes from previous versions, please read the Whatnew.txt file +- Remove some obsolete patches + * use_system_libs.patch + * use_system_libs_openjpeg.patch + * use_system_libs_libpng15.patch + * use_system_libs_libpng14.patch + * libraw_types.patch +- Update makefiles_fixes.patch +- Add patches from Fedora + * unbundle.patch + * CVE-2015-0852.patch +- Use download Url as source +- Add dependencies + * jxrlib-devel + * libjpeg-devel + * openjpeg2-devel instead of openjpeg-devel + * pkgconfig(libpng) + * pkgconfig(libraw) instead of libraw-devel + * pkgconfig(libmng) + * pkgconfig(libtiff-4) + * pkgconfig(libwebp) + * pkgconfig(OpenEXR) + * pkgconfig(zlib) instead of zlib-devel + * unzip +- Drop support for SLE11; doesn't build anyway + +------------------------------------------------------------------- Old: ---- FreeImage3154.tar.bz2 libraw_types.patch use_system_libs.patch use_system_libs_libpng14.patch use_system_libs_libpng15.patch use_system_libs_openjpeg.patch New: ---- CVE-2015-0852.patch FreeImage3170.zip unbundle.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ freeimage.spec ++++++ --- /var/tmp/diff_new_pack.UUtaaR/_old 2016-01-01 19:47:24.000000000 +0100 +++ /var/tmp/diff_new_pack.UUtaaR/_new 2016-01-01 19:47:24.000000000 +0100 @@ -1,7 +1,7 @@ # # spec file for package freeimage # -# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,45 +17,41 @@ %define so_ver 3 +%define tarver 3170 Name: freeimage -Version: 3.15.4 +Version: 3.17.0 Release: 0 Summary: Multi-format Image Decoder Library License: GPL-2.0 or GPL-3.0 Group: System/Libraries Url: http://freeimage.sourceforge.net/ -# repacked from http://downloads.sourceforge.net/freeimage/FreeImage3154.zip -Source0: FreeImage3154.tar.bz2 -# PATCH-FIX-OPENSUSE makefiles_fixes.patch [email protected] -- Fix CFLAGS and CXXFLAGS, removed -s (strip) option, add missing symlinks for libfreeimageplus, remove root user from install -Patch0: makefiles_fixes.patch +Source0: http://downloads.sourceforge.net/freeimage/FreeImage%{tarver}.zip +# PATCH-FIX-OPENSUSE unbundle.patch [email protected] -- Use system libraries instead of bundled ones +Patch0: unbundle.patch # PATCH-FIX-OPENSUSE doxygen.patch [email protected] -- Fix documentation building (Based on patch from Fedora) Patch1: doxygen.patch -# PATCH-FIX-OPENSUSE use_system_libs.patch [email protected] -- Use system libraries, except libjpeg and libtiff (the package uses some internal headers of these). -Patch2: use_system_libs.patch -# PATCH-FIX-OPENSUSE use_system_libs_openjpeg.patch [email protected] -- Use system libraries (openjpeg) -Patch3: use_system_libs_openjpeg.patch -# PATCH-FIX-OPENSUSE use_system_libs_libpng15.patch [email protected] -- Use system libraries (libpng15) -Patch4: use_system_libs_libpng15.patch -# PATCH-FIX-OPENSUSE use_system_libs_libpng14.patch [email protected] -- Use system libraries (libpng14) -Patch5: use_system_libs_libpng14.patch -# PATCH-FIX-OPENSUSE don't define conflicting types when libraw is used [email protected] -Patch6: libraw_types.patch -BuildRequires: OpenEXR-devel +# PATCH-FIX-UPSTREAM CVE-2015-0852.patch -- Multiple integer underflows in PluginPCX.cpp in FreeImage 3.17.0 and earlier +Patch2: CVE-2015-0852.patch +# PATCH-FIX-OPENSUSE makefiles_fixes.patch [email protected] -- Fix CFLAGS and CXXFLAGS, removed -s (strip) option, add missing symlinks for libfreeimageplus, remove root user from install +Patch3: makefiles_fixes.patch BuildRequires: doxygen BuildRequires: gcc-c++ -BuildRequires: libpng-devel -%if 0%{?suse_version} == 1140 -BuildRequires: libraw-devel -BuildRequires: libraw-devel-static +BuildRequires: jxrlib-devel +BuildRequires: libjpeg-devel +BuildRequires: openjpeg2-devel +BuildRequires: pkgconfig(libpng) +BuildRequires: pkgconfig(libraw) +%if 0%{?suse_version} >= 1320 +BuildRequires: pkgconfig(libmng) %else -BuildRequires: libraw-devel +BuildRequires: libmng-devel %endif -%if 0%{?suse_version} > 1210 -BuildRequires: openjpeg-devel -%endif -BuildRequires: zlib-devel -BuildRoot: %{_tmppath}/%{name}-%{version}-build +BuildRequires: unzip +BuildRequires: pkgconfig(OpenEXR) +BuildRequires: pkgconfig(libtiff-4) +BuildRequires: pkgconfig(libwebp) +BuildRequires: pkgconfig(zlib) %description FreeImage is an Open Source library project for developers who would like to @@ -101,24 +97,23 @@ %patch0 -p1 %patch1 %patch2 -p1 -%if 0%{?suse_version} > 1210 %patch3 -p1 -%endif -%if 0%{?suse_version} > 1220 -%patch4 -p1 -%else -%patch5 -p1 -%endif -%patch6 -p1 -# Remove bundled libs (except of LibJPEG/ and LibTIFF4/) to make sure these don't get used during compile -rm -rf Source/LibPNG/ Source/LibRawLite/ Source/OpenEXR/ Source/ZLib/ -%if 0%{?suse_version} > 1210 -rm -rf Source/LibOpenJPEG/ -%endif +# Remove bundled libs to make sure these don't get used during compile +rm -rf Source/LibPNG/ Source/LibRawLite/ Source/OpenEXR/ Source/ZLib/ Source/LibOpenJPEG/ Source/LibJPEG/ -# Fix "wrong-file-end-of-line-encoding" rpmlint warning -sed -i 's/\r$//' license-fi.txt license-gplv2.txt license-gplv3.txt Whatsnew.txt +# clear files which cannot be built due to dependencies on private headers +# (see also unbundle patch) +# It disables the G3 Fax Loader and the JPEG lossless transformations plugins +> Source/FreeImage/PluginG3.cpp +> Source/FreeImageToolkit/JPEGTransform.cpp + +# sanitize encodings / line endings +for file in `find . -type f -name '*.c' -or -name '*.cpp' -or -name '*.h' -or -name '*.txt' -or -name Makefile`; do + iconv --from=ISO-8859-15 --to=UTF-8 $file > $file.new && \ + sed -i 's|\r||g' $file.new && \ + touch -r $file $file.new && mv $file.new $file +done %build sh ./gensrclist.sh ++++++ CVE-2015-0852.patch ++++++ diff -rupN FreeImage/Source/FreeImage/PluginPCX.cpp FreeImage-new/Source/FreeImage/PluginPCX.cpp --- FreeImage/Source/FreeImage/PluginPCX.cpp 2015-03-02 02:07:08.000000000 +0100 +++ FreeImage-new/Source/FreeImage/PluginPCX.cpp 2015-09-05 02:44:55.429436425 +0200 @@ -30,7 +30,7 @@ // Constants + headers // ---------------------------------------------------------- -#define IO_BUF_SIZE 2048 +#define PCX_IO_BUF_SIZE 2048 // ---------------------------------------------------------- @@ -120,17 +120,17 @@ readline(FreeImageIO &io, fi_handle hand while (length--) { if (count == 0) { - if (*ReadPos >= IO_BUF_SIZE - 1 ) { - if (*ReadPos == IO_BUF_SIZE - 1) { + if (*ReadPos >= PCX_IO_BUF_SIZE - 1 ) { + if (*ReadPos == PCX_IO_BUF_SIZE - 1) { // we still have one BYTE, copy it to the start pos - *ReadBuf = ReadBuf[IO_BUF_SIZE - 1]; + *ReadBuf = ReadBuf[PCX_IO_BUF_SIZE - 1]; - io.read_proc(ReadBuf + 1, 1, IO_BUF_SIZE - 1, handle); + io.read_proc(ReadBuf + 1, 1, PCX_IO_BUF_SIZE - 1, handle); } else { // read the complete buffer - io.read_proc(ReadBuf, 1, IO_BUF_SIZE, handle); + io.read_proc(ReadBuf, 1, PCX_IO_BUF_SIZE, handle); } *ReadPos = 0; @@ -346,19 +346,9 @@ Load(FreeImageIO *io, fi_handle handle, BOOL header_only = (flags & FIF_LOAD_NOPIXELS) == FIF_LOAD_NOPIXELS; try { - // check PCX identifier - - long start_pos = io->tell_proc(handle); - BOOL validated = pcx_validate(io, handle); - io->seek_proc(handle, start_pos, SEEK_SET); - if(!validated) { - throw FI_MSG_ERROR_MAGIC_NUMBER; - } - - // process the header - PCXHEADER header; + // process the header if(io->read_proc(&header, sizeof(PCXHEADER), 1, handle) != 1) { throw FI_MSG_ERROR_PARSING; } @@ -366,20 +356,38 @@ Load(FreeImageIO *io, fi_handle handle, SwapHeader(&header); #endif - // allocate a new DIB + // process the window + const WORD *window = header.window; // left, upper, right,lower pixel coord. + const int left = window[0]; + const int top = window[1]; + const int right = window[2]; + const int bottom = window[3]; - unsigned width = header.window[2] - header.window[0] + 1; - unsigned height = header.window[3] - header.window[1] + 1; - unsigned bitcount = header.bpp * header.planes; - - if (bitcount == 24) { - dib = FreeImage_AllocateHeader(header_only, width, height, bitcount, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK); - } else { - dib = FreeImage_AllocateHeader(header_only, width, height, bitcount); + // check image size + if((left >= right) || (top >= bottom)) { + throw FI_MSG_ERROR_PARSING; } - // if the dib couldn't be allocated, throw an error + const unsigned width = right - left + 1; + const unsigned height = bottom - top + 1; + const unsigned bitcount = header.bpp * header.planes; + // allocate a new dib + switch(bitcount) { + case 1: + case 4: + case 8: + dib = FreeImage_AllocateHeader(header_only, width, height, bitcount); + break; + case 24: + dib = FreeImage_AllocateHeader(header_only, width, height, bitcount, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK); + break; + default: + throw FI_MSG_ERROR_DIB_MEMORY; + break; + } + + // if the dib couldn't be allocated, throw an error if (!dib) { throw FI_MSG_ERROR_DIB_MEMORY; } @@ -426,19 +434,23 @@ Load(FreeImageIO *io, fi_handle handle, if (palette_id == 0x0C) { BYTE *cmap = (BYTE*)malloc(768 * sizeof(BYTE)); - io->read_proc(cmap, 768, 1, handle); - pal = FreeImage_GetPalette(dib); - BYTE *pColormap = &cmap[0]; + if(cmap) { + io->read_proc(cmap, 768, 1, handle); - for(int i = 0; i < 256; i++) { - pal[i].rgbRed = pColormap[0]; - pal[i].rgbGreen = pColormap[1]; - pal[i].rgbBlue = pColormap[2]; - pColormap += 3; + pal = FreeImage_GetPalette(dib); + BYTE *pColormap = &cmap[0]; + + for(int i = 0; i < 256; i++) { + pal[i].rgbRed = pColormap[0]; + pal[i].rgbGreen = pColormap[1]; + pal[i].rgbBlue = pColormap[2]; + pColormap += 3; + } + + free(cmap); } - free(cmap); } // wrong palette ID, perhaps a gray scale is needed ? @@ -463,12 +475,12 @@ Load(FreeImageIO *io, fi_handle handle, return dib; } - // calculate the line length for the PCX and the DIB + // calculate the line length for the PCX and the dib // length of raster line in bytes - unsigned linelength = header.bytes_per_line * header.planes; - // length of DIB line (rounded to DWORD) in bytes - unsigned pitch = FreeImage_GetPitch(dib); + const unsigned linelength = header.bytes_per_line * header.planes; + // length of dib line (rounded to DWORD) in bytes + const unsigned pitch = FreeImage_GetPitch(dib); // run-length encoding ? @@ -478,14 +490,18 @@ Load(FreeImageIO *io, fi_handle handle, // --------------- line = (BYTE*)malloc(linelength * sizeof(BYTE)); - if(!line) throw FI_MSG_ERROR_MEMORY; + if(!line) { + throw FI_MSG_ERROR_MEMORY; + } - ReadBuf = (BYTE*)malloc(IO_BUF_SIZE * sizeof(BYTE)); - if(!ReadBuf) throw FI_MSG_ERROR_MEMORY; + ReadBuf = (BYTE*)malloc(PCX_IO_BUF_SIZE * sizeof(BYTE)); + if(!ReadBuf) { + throw FI_MSG_ERROR_MEMORY; + } bits = FreeImage_GetScanLine(dib, height - 1); - int ReadPos = IO_BUF_SIZE; + int ReadPos = PCX_IO_BUF_SIZE; if ((header.planes == 1) && ((header.bpp == 1) || (header.bpp == 8))) { BYTE skip; @@ -497,7 +513,7 @@ Load(FreeImageIO *io, fi_handle handle, // skip trailing garbage at the end of the scanline for (unsigned count = written; count < linelength; count++) { - if (ReadPos < IO_BUF_SIZE) { + if (ReadPos < PCX_IO_BUF_SIZE) { ReadPos++; } else { io->read_proc(&skip, sizeof(BYTE), 1, handle); @@ -513,7 +529,9 @@ Load(FreeImageIO *io, fi_handle handle, unsigned x, y, written; buffer = (BYTE*)malloc(width * sizeof(BYTE)); - if(!buffer) throw FI_MSG_ERROR_MEMORY; + if(!buffer) { + throw FI_MSG_ERROR_MEMORY; + } for (y = 0; y < height; y++) { written = readline(*io, handle, line, linelength, bIsRLE, ReadBuf, &ReadPos); @@ -532,7 +550,7 @@ Load(FreeImageIO *io, fi_handle handle, } } - // then write the DIB row + // then write the dib row for (x = 0; x < width / 2; x++) { bits[x] = (buffer[2*x] << 4) | buffer[2*x+1]; @@ -541,7 +559,7 @@ Load(FreeImageIO *io, fi_handle handle, // skip trailing garbage at the end of the scanline for (unsigned count = written; count < linelength; count++) { - if (ReadPos < IO_BUF_SIZE) { + if (ReadPos < PCX_IO_BUF_SIZE) { ReadPos++; } else { io->read_proc(&skip, sizeof(BYTE), 1, handle); ++++++ doxygen.patch ++++++ --- /var/tmp/diff_new_pack.UUtaaR/_old 2016-01-01 19:47:24.000000000 +0100 +++ /var/tmp/diff_new_pack.UUtaaR/_new 2016-01-01 19:47:24.000000000 +0100 @@ -7,7 +7,7 @@ # if some version control system is used. -PROJECT_NUMBER = "- FreeImage 3.15.1" -+PROJECT_NUMBER = "- FreeImage 3.15.3" ++PROJECT_NUMBER = "- FreeImage 3.17.0" # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer ++++++ makefiles_fixes.patch ++++++ --- /var/tmp/diff_new_pack.UUtaaR/_old 2016-01-01 19:47:24.000000000 +0100 +++ /var/tmp/diff_new_pack.UUtaaR/_new 2016-01-01 19:47:24.000000000 +0100 @@ -2,77 +2,35 @@ =================================================================== --- FreeImage.orig/Makefile.fip +++ FreeImage/Makefile.fip -@@ -15,10 +15,10 @@ LIBRARIES = -lstdc++ - - MODULES = $(SRCS:.c=.o) - MODULES := $(MODULES:.cpp=.o) --CFLAGS ?= -O3 -fPIC -fexceptions -fvisibility=hidden -DNO_LCMS --CFLAGS += $(INCLUDE) --CXXFLAGS ?= -O3 -fPIC -fexceptions -fvisibility=hidden -Wno-ctor-dtor-privacy --CXXFLAGS += $(INCLUDE) -+override CFLAGS += -O3 -fPIC -fexceptions -fvisibility=hidden -DNO_LCMS -+override CFLAGS += $(INCLUDE) -+override CXXFLAGS += -O3 -fPIC -fexceptions -fvisibility=hidden -Wno-ctor-dtor-privacy -+override CXXFLAGS += $(INCLUDE) - - ifeq ($(shell sh -c 'uname -m 2>/dev/null || echo not'),x86_64) - CFLAGS += -fPIC -@@ -59,14 +59,16 @@ $(STATICLIB): $(MODULES) - $(AR) r $@ $(MODULES) - - $(SHAREDLIB): $(MODULES) -- $(CC) -s -shared -Wl,-soname,$(VERLIBNAME) $(LDFLAGS) -o $@ $(MODULES) $(LIBRARIES) -+ $(CC) -shared -Wl,-soname,$(VERLIBNAME) $(LDFLAGS) -o $@ $(MODULES) $(LIBRARIES) - - install: - install -d $(INCDIR) $(INSTALLDIR) -- install -m 644 -o root -g root $(HEADER) $(INCDIR) -- install -m 644 -o root -g root $(HEADERFIP) $(INCDIR) -- install -m 644 -o root -g root $(STATICLIB) $(INSTALLDIR) -- install -m 755 -o root -g root $(SHAREDLIB) $(INSTALLDIR) -+ install -m 644 $(HEADER) $(INCDIR) -+ install -m 644 $(HEADERFIP) $(INCDIR) -+ install -m 644 $(STATICLIB) $(INSTALLDIR) -+ install -m 755 $(SHAREDLIB) $(INSTALLDIR) -+ ln -sf $(SHAREDLIB) $(INSTALLDIR)/$(VERLIBNAME) -+ ln -sf $(VERLIBNAME) $(INSTALLDIR)/$(LIBNAME) - - clean: - rm -f core Dist/*.* u2dtmp* $(MODULES) $(STATICLIB) $(SHAREDLIB) $(LIBNAME) +@@ -72,10 +72,10 @@ + + install: + install -d $(INCDIR) $(INSTALLDIR) +- install -m 644 -o root -g root $(HEADER) $(INCDIR) +- install -m 644 -o root -g root $(HEADERFIP) $(INCDIR) +- install -m 644 -o root -g root $(STATICLIB) $(INSTALLDIR) +- install -m 755 -o root -g root $(SHAREDLIB) $(INSTALLDIR) ++ install -m 644 $(HEADER) $(INCDIR) ++ install -m 644 $(HEADERFIP) $(INCDIR) ++ install -m 644 $(STATICLIB) $(INSTALLDIR) ++ install -m 755 $(SHAREDLIB) $(INSTALLDIR) + ln -sf $(SHAREDLIB) $(INSTALLDIR)/$(VERLIBNAME) + ln -sf $(VERLIBNAME) $(INSTALLDIR)/$(LIBNAME) + Index: FreeImage/Makefile.gnu =================================================================== --- FreeImage.orig/Makefile.gnu +++ FreeImage/Makefile.gnu -@@ -15,10 +15,10 @@ LIBRARIES = -lstdc++ - - MODULES = $(SRCS:.c=.o) - MODULES := $(MODULES:.cpp=.o) --CFLAGS ?= -O3 -fPIC -fexceptions -fvisibility=hidden -DNO_LCMS --CFLAGS += $(INCLUDE) --CXXFLAGS ?= -O3 -fPIC -fexceptions -fvisibility=hidden -Wno-ctor-dtor-privacy --CXXFLAGS += $(INCLUDE) -+override CFLAGS += -O3 -fPIC -fexceptions -fvisibility=hidden -DNO_LCMS -+override CFLAGS += $(INCLUDE) -+override CXXFLAGS += -O3 -fPIC -fexceptions -fvisibility=hidden -Wno-ctor-dtor-privacy -+override CXXFLAGS += $(INCLUDE) - - ifeq ($(shell sh -c 'uname -m 2>/dev/null || echo not'),x86_64) - CFLAGS += -fPIC -@@ -58,13 +58,13 @@ $(STATICLIB): $(MODULES) - $(AR) r $@ $(MODULES) - - $(SHAREDLIB): $(MODULES) -- $(CC) -s -shared -Wl,-soname,$(VERLIBNAME) $(LDFLAGS) -o $@ $(MODULES) $(LIBRARIES) -+ $(CC) -shared -Wl,-soname,$(VERLIBNAME) $(LDFLAGS) -o $@ $(MODULES) $(LIBRARIES) - - install: - install -d $(INCDIR) $(INSTALLDIR) -- install -m 644 -o root -g root $(HEADER) $(INCDIR) -- install -m 644 -o root -g root $(STATICLIB) $(INSTALLDIR) -- install -m 755 -o root -g root $(SHAREDLIB) $(INSTALLDIR) -+ install -m 644 $(HEADER) $(INCDIR) -+ install -m 644 $(STATICLIB) $(INSTALLDIR) -+ install -m 755 $(SHAREDLIB) $(INSTALLDIR) - ln -sf $(SHAREDLIB) $(INSTALLDIR)/$(VERLIBNAME) - ln -sf $(VERLIBNAME) $(INSTALLDIR)/$(LIBNAME) - # ldconfig +@@ -71,9 +71,9 @@ + + install: + install -d $(INCDIR) $(INSTALLDIR) +- install -m 644 -o root -g root $(HEADER) $(INCDIR) +- install -m 644 -o root -g root $(STATICLIB) $(INSTALLDIR) +- install -m 755 -o root -g root $(SHAREDLIB) $(INSTALLDIR) ++ install -m 644 $(HEADER) $(INCDIR) ++ install -m 644 $(STATICLIB) $(INSTALLDIR) ++ install -m 755 $(SHAREDLIB) $(INSTALLDIR) + ln -sf $(SHAREDLIB) $(INSTALLDIR)/$(VERLIBNAME) + ln -sf $(VERLIBNAME) $(INSTALLDIR)/$(LIBNAME) + # ldconfig ++++++ unbundle.patch ++++++ diff -rupN FreeImage/genfipsrclist.sh FreeImage-new/genfipsrclist.sh --- FreeImage/genfipsrclist.sh 2015-02-20 10:52:16.000000000 +0100 +++ FreeImage-new/genfipsrclist.sh 2015-09-05 02:13:52.041353305 +0200 @@ -1,6 +1,6 @@ #!/bin/sh -DIRLIST=". Source Source/Metadata Source/FreeImageToolkit Source/LibJPEG Source/LibPNG Source/LibTIFF4 Source/ZLib Source/LibOpenJPEG Source/OpenEXR Source/OpenEXR/Half Source/OpenEXR/Iex Source/OpenEXR/IlmImf Source/OpenEXR/IlmThread Source/OpenEXR/Imath Source/OpenEXR/IexMath Source/LibRawLite Source/LibRawLite/dcraw Source/LibRawLite/internal Source/LibRawLite/libraw Source/LibRawLite/src Source/LibWebP Source/LibJXR Source/LibJXR/common/include Source/LibJXR/image/sys Source/LibJXR/jxrgluelib Wrapper/FreeImagePlus" +DIRLIST="Wrapper/FreeImagePlus" echo "VER_MAJOR = 3" > fipMakefile.srcs @@ -19,5 +19,6 @@ echo -n "INCLUDE =" >> fipMakefile.srcs for DIR in $DIRLIST; do echo -n " -I$DIR" >> fipMakefile.srcs done +echo -n " -IDist" >> fipMakefile.srcs echo >> fipMakefile.srcs diff -rupN FreeImage/gensrclist.sh FreeImage-new/gensrclist.sh --- FreeImage/gensrclist.sh 2015-02-20 10:51:50.000000000 +0100 +++ FreeImage-new/gensrclist.sh 2015-09-05 02:13:52.041353305 +0200 @@ -1,6 +1,6 @@ #!/bin/sh -DIRLIST=". Source Source/Metadata Source/FreeImageToolkit Source/LibJPEG Source/LibPNG Source/LibTIFF4 Source/ZLib Source/LibOpenJPEG Source/OpenEXR Source/OpenEXR/Half Source/OpenEXR/Iex Source/OpenEXR/IlmImf Source/OpenEXR/IlmThread Source/OpenEXR/Imath Source/OpenEXR/IexMath Source/LibRawLite Source/LibRawLite/dcraw Source/LibRawLite/internal Source/LibRawLite/libraw Source/LibRawLite/src Source/LibWebP Source/LibJXR Source/LibJXR/common/include Source/LibJXR/image/sys Source/LibJXR/jxrgluelib" +DIRLIST=". Source Source/Metadata Source/FreeImageToolkit" echo "VER_MAJOR = 3" > Makefile.srcs echo "VER_MINOR = 17.0" >> Makefile.srcs diff -rupN FreeImage/Makefile.fip FreeImage-new/Makefile.fip --- FreeImage/Makefile.fip 2015-03-08 18:03:56.000000000 +0100 +++ FreeImage-new/Makefile.fip 2015-09-05 02:14:09.212684028 +0200 @@ -17,20 +17,22 @@ MODULES = $(SRCS:.c=.o) MODULES := $(MODULES:.cpp=.o) CFLAGS ?= -O3 -fPIC -fexceptions -fvisibility=hidden # OpenJPEG -CFLAGS += -DOPJ_STATIC +override CFLAGS += -DOPJ_STATIC # LibRaw -CFLAGS += -DNO_LCMS +override CFLAGS += -DNO_LCMS # LibJXR -CFLAGS += -DDISABLE_PERF_MEASUREMENT -D__ANSI__ -CFLAGS += $(INCLUDE) +override CFLAGS += -DDISABLE_PERF_MEASUREMENT -D__ANSI__ +override CFLAGS += $(INCLUDE) CXXFLAGS ?= -O3 -fPIC -fexceptions -fvisibility=hidden -Wno-ctor-dtor-privacy # LibJXR -CXXFLAGS += -D__ANSI__ -CXXFLAGS += $(INCLUDE) +override CXXFLAGS += -D__ANSI__ +override CXXFLAGS += $(INCLUDE) +LDFLAGS ?= +override LDFLAGS += -LDist -lfreeimage-$(VER_MAJOR).$(VER_MINOR) ifeq ($(shell sh -c 'uname -m 2>/dev/null || echo not'),x86_64) - CFLAGS += -fPIC - CXXFLAGS += -fPIC + override CFLAGS += -fPIC + override CXXFLAGS += -fPIC endif TARGET = freeimageplus @@ -68,7 +70,7 @@ $(STATICLIB): $(MODULES) $(AR) r $@ $(MODULES) $(SHAREDLIB): $(MODULES) - $(CC) -s -shared -Wl,-soname,$(VERLIBNAME) $(LDFLAGS) -o $@ $(MODULES) $(LIBRARIES) + $(CC) -shared -Wl,-soname,$(VERLIBNAME) $(LDFLAGS) -o $@ $(MODULES) $(LIBRARIES) install: install -d $(INCDIR) $(INSTALLDIR) diff -rupN FreeImage/Makefile.gnu FreeImage-new/Makefile.gnu --- FreeImage/Makefile.gnu 2015-03-08 18:04:00.000000000 +0100 +++ FreeImage-new/Makefile.gnu 2015-09-05 02:14:04.810599259 +0200 @@ -16,21 +16,11 @@ LIBRARIES = -lstdc++ MODULES = $(SRCS:.c=.o) MODULES := $(MODULES:.cpp=.o) CFLAGS ?= -O3 -fPIC -fexceptions -fvisibility=hidden -# OpenJPEG -CFLAGS += -DOPJ_STATIC -# LibRaw -CFLAGS += -DNO_LCMS -# LibJXR -CFLAGS += -DDISABLE_PERF_MEASUREMENT -D__ANSI__ -CFLAGS += $(INCLUDE) -CXXFLAGS ?= -O3 -fPIC -fexceptions -fvisibility=hidden -Wno-ctor-dtor-privacy -# LibJXR -CXXFLAGS += -D__ANSI__ -CXXFLAGS += $(INCLUDE) +override CFLAGS += $(INCLUDE) -D__ANSI__ -I/usr/include/jxrlib $(shell pkg-config --cflags OpenEXR libopenjp2 libraw libpng libtiff-4 libwebp libwebpmux zlib) +override LDFLAGS += -ljpeg -ljpegxr -ljxrglue $(shell pkg-config --libs OpenEXR libopenjp2 libraw libpng libtiff-4 libwebp libwebpmux zlib) ifeq ($(shell sh -c 'uname -m 2>/dev/null || echo not'),x86_64) - CFLAGS += -fPIC - CXXFLAGS += -fPIC + override CFLAGS += -fPIC endif TARGET = freeimage @@ -61,13 +51,13 @@ FreeImage: $(STATICLIB) $(SHAREDLIB) $(CC) $(CFLAGS) -c $< -o $@ .cpp.o: - $(CXX) $(CXXFLAGS) -c $< -o $@ + $(CXX) $(CFLAGS) -c $< -o $@ $(STATICLIB): $(MODULES) $(AR) r $@ $(MODULES) $(SHAREDLIB): $(MODULES) - $(CC) -s -shared -Wl,-soname,$(VERLIBNAME) $(LDFLAGS) -o $@ $(MODULES) $(LIBRARIES) + $(CC) -shared -Wl,-soname,$(VERLIBNAME) $(LDFLAGS) -o $@ $(MODULES) $(LIBRARIES) install: install -d $(INCDIR) $(INSTALLDIR) diff -rupN FreeImage/Source/FreeImage/J2KHelper.cpp FreeImage-new/Source/FreeImage/J2KHelper.cpp --- FreeImage/Source/FreeImage/J2KHelper.cpp 2015-03-02 02:07:08.000000000 +0100 +++ FreeImage-new/Source/FreeImage/J2KHelper.cpp 2015-09-05 02:13:52.042353324 +0200 @@ -21,7 +21,7 @@ #include "FreeImage.h" #include "Utilities.h" -#include "../LibOpenJPEG/openjpeg.h" +#include <openjpeg.h> #include "J2KHelper.h" // -------------------------------------------------------------------------- diff -rupN FreeImage/Source/FreeImage/Plugin.cpp FreeImage-new/Source/FreeImage/Plugin.cpp --- FreeImage/Source/FreeImage/Plugin.cpp 2015-03-02 02:07:08.000000000 +0100 +++ FreeImage-new/Source/FreeImage/Plugin.cpp 2015-09-05 02:13:52.042353324 +0200 @@ -263,7 +263,12 @@ FreeImage_Initialise(BOOL load_local_plu s_plugins->AddNode(InitDDS); s_plugins->AddNode(InitGIF); s_plugins->AddNode(InitHDR); - s_plugins->AddNode(InitG3); +/* The G3 fax format plugin is deliberately disabled in the Fedora build of + FreeImage as it requires that FreeImage uses a private copy of libtiff + which is a no no because of security reasons. */ +#if 0 + s_plugins->AddNode(InitG3); +#endif s_plugins->AddNode(InitSGI); s_plugins->AddNode(InitEXR); s_plugins->AddNode(InitJ2K); diff -rupN FreeImage/Source/FreeImage/PluginEXR.cpp FreeImage-new/Source/FreeImage/PluginEXR.cpp --- FreeImage/Source/FreeImage/PluginEXR.cpp 2015-03-02 02:07:08.000000000 +0100 +++ FreeImage-new/Source/FreeImage/PluginEXR.cpp 2015-09-05 02:13:52.042353324 +0200 @@ -28,16 +28,16 @@ #pragma warning (disable : 4800) // ImfVersion.h - 'const int' : forcing value to bool 'true' or 'false' (performance warning) #endif -#include "../OpenEXR/IlmImf/ImfIO.h" -#include "../OpenEXR/Iex/Iex.h" -#include "../OpenEXR/IlmImf/ImfOutputFile.h" -#include "../OpenEXR/IlmImf/ImfInputFile.h" -#include "../OpenEXR/IlmImf/ImfRgbaFile.h" -#include "../OpenEXR/IlmImf/ImfChannelList.h" -#include "../OpenEXR/IlmImf/ImfRgba.h" -#include "../OpenEXR/IlmImf/ImfArray.h" -#include "../OpenEXR/IlmImf/ImfPreviewImage.h" -#include "../OpenEXR/Half/half.h" +#include <OpenEXR/ImfIO.h> +#include <OpenEXR/Iex.h> +#include <OpenEXR/ImfOutputFile.h> +#include <OpenEXR/ImfInputFile.h> +#include <OpenEXR/ImfRgbaFile.h> +#include <OpenEXR/ImfChannelList.h> +#include <OpenEXR/ImfRgba.h> +#include <OpenEXR/ImfArray.h> +#include <OpenEXR/ImfPreviewImage.h> +#include <OpenEXR/half.h> // ========================================================== diff -rupN FreeImage/Source/FreeImage/PluginJ2K.cpp FreeImage-new/Source/FreeImage/PluginJ2K.cpp --- FreeImage/Source/FreeImage/PluginJ2K.cpp 2015-03-02 02:07:08.000000000 +0100 +++ FreeImage-new/Source/FreeImage/PluginJ2K.cpp 2015-09-05 02:13:52.043353343 +0200 @@ -21,7 +21,7 @@ #include "FreeImage.h" #include "Utilities.h" -#include "../LibOpenJPEG/openjpeg.h" +#include <openjpeg.h> #include "J2KHelper.h" // ========================================================== diff -rupN FreeImage/Source/FreeImage/PluginJP2.cpp FreeImage-new/Source/FreeImage/PluginJP2.cpp --- FreeImage/Source/FreeImage/PluginJP2.cpp 2015-03-02 02:07:08.000000000 +0100 +++ FreeImage-new/Source/FreeImage/PluginJP2.cpp 2015-09-05 02:13:52.043353343 +0200 @@ -21,7 +21,7 @@ #include "FreeImage.h" #include "Utilities.h" -#include "../LibOpenJPEG/openjpeg.h" +#include <openjpeg.h> #include "J2KHelper.h" // ========================================================== diff -rupN FreeImage/Source/FreeImage/PluginJPEG.cpp FreeImage-new/Source/FreeImage/PluginJPEG.cpp --- FreeImage/Source/FreeImage/PluginJPEG.cpp 2015-03-02 02:07:08.000000000 +0100 +++ FreeImage-new/Source/FreeImage/PluginJPEG.cpp 2015-09-05 02:13:52.043353343 +0200 @@ -35,9 +35,9 @@ extern "C" { #undef FAR #include <setjmp.h> -#include "../LibJPEG/jinclude.h" -#include "../LibJPEG/jpeglib.h" -#include "../LibJPEG/jerror.h" +#include <stdio.h> +#include <jpeglib.h> +#include <jerror.h> } #include "FreeImage.h" diff -rupN FreeImage/Source/FreeImage/PluginJXR.cpp FreeImage-new/Source/FreeImage/PluginJXR.cpp --- FreeImage/Source/FreeImage/PluginJXR.cpp 2015-03-02 02:07:08.000000000 +0100 +++ FreeImage-new/Source/FreeImage/PluginJXR.cpp 2015-09-05 02:13:52.043353343 +0200 @@ -23,7 +23,7 @@ #include "Utilities.h" #include "../Metadata/FreeImageTag.h" -#include "../LibJXR/jxrgluelib/JXRGlue.h" +#include <JXRGlue.h> // ========================================================== // Plugin Interface diff -rupN FreeImage/Source/FreeImage/PluginPNG.cpp FreeImage-new/Source/FreeImage/PluginPNG.cpp --- FreeImage/Source/FreeImage/PluginPNG.cpp 2015-03-10 20:16:12.000000000 +0100 +++ FreeImage-new/Source/FreeImage/PluginPNG.cpp 2015-09-05 02:13:52.044353363 +0200 @@ -40,8 +40,8 @@ // ---------------------------------------------------------- -#include "../ZLib/zlib.h" -#include "../LibPNG/png.h" +#include <zlib.h> +#include <png.h> // ---------------------------------------------------------- diff -rupN FreeImage/Source/FreeImage/PluginRAW.cpp FreeImage-new/Source/FreeImage/PluginRAW.cpp --- FreeImage/Source/FreeImage/PluginRAW.cpp 2015-03-08 20:12:04.000000000 +0100 +++ FreeImage-new/Source/FreeImage/PluginRAW.cpp 2015-09-05 02:13:52.044353363 +0200 @@ -19,7 +19,7 @@ // Use at your own risk! // ========================================================== -#include "../LibRawLite/libraw/libraw.h" +#include <libraw/libraw.h> #include "FreeImage.h" #include "Utilities.h" diff -rupN FreeImage/Source/FreeImage/PluginTIFF.cpp FreeImage-new/Source/FreeImage/PluginTIFF.cpp --- FreeImage/Source/FreeImage/PluginTIFF.cpp 2015-03-02 02:07:08.000000000 +0100 +++ FreeImage-new/Source/FreeImage/PluginTIFF.cpp 2015-09-05 02:13:52.044353363 +0200 @@ -37,9 +37,9 @@ #include "FreeImage.h" #include "Utilities.h" -#include "../LibTIFF4/tiffiop.h" +#include <tiffio.h> #include "../Metadata/FreeImageTag.h" -#include "../OpenEXR/Half/half.h" +#include <OpenEXR/half.h> #include "FreeImageIO.h" #include "PSDParser.h" @@ -194,16 +194,6 @@ TIFFFdOpen(thandle_t handle, const char return tif; } -/** -Open a TIFF file for reading or writing -@param name -@param mode -*/ -TIFF* -TIFFOpen(const char* name, const char* mode) { - return 0; -} - // ---------------------------------------------------------- // TIFF library FreeImage-specific routines. // ---------------------------------------------------------- diff -rupN FreeImage/Source/FreeImage/PluginWebP.cpp FreeImage-new/Source/FreeImage/PluginWebP.cpp --- FreeImage/Source/FreeImage/PluginWebP.cpp 2015-03-02 02:07:08.000000000 +0100 +++ FreeImage-new/Source/FreeImage/PluginWebP.cpp 2015-09-05 02:13:52.044353363 +0200 @@ -24,10 +24,10 @@ #include "../Metadata/FreeImageTag.h" -#include "../LibWebP/src/webp/decode.h" -#include "../LibWebP/src/webp/encode.h" -#include "../LibWebP/src/enc/vp8enci.h" -#include "../LibWebP/src/webp/mux.h" +#include <webp/decode.h> +#include <webp/encode.h> +// #include "../LibWebP/src/enc/vp8enci.h" +#include <webp/mux.h> // ========================================================== // Plugin Interface diff -rupN FreeImage/Source/FreeImage/ZLibInterface.cpp FreeImage-new/Source/FreeImage/ZLibInterface.cpp --- FreeImage/Source/FreeImage/ZLibInterface.cpp 2015-03-02 02:07:10.000000000 +0100 +++ FreeImage-new/Source/FreeImage/ZLibInterface.cpp 2015-09-05 02:13:52.044353363 +0200 @@ -19,10 +19,9 @@ // Use at your own risk! // ========================================================== -#include "../ZLib/zlib.h" +#include <zlib.h> #include "FreeImage.h" #include "Utilities.h" -#include "../ZLib/zutil.h" /* must be the last header because of error C3163 in VS2008 (_vsnprintf defined in stdio.h) */ /** Compresses a source buffer into a target buffer, using the ZLib library. @@ -115,7 +114,7 @@ FreeImage_ZLibGZip(BYTE *target, DWORD t return 0; case Z_OK: { // patch header, setup crc and length (stolen from mod_trace_output) - BYTE *p = target + 8; *p++ = 2; *p = OS_CODE; // xflags, os_code + BYTE *p = target + 8; *p++ = 2; *p = 0x03; // xflags, os_code (unix) crc = crc32(crc, source, source_size); memcpy(target + 4 + dest_len, &crc, 4); memcpy(target + 8 + dest_len, &source_size, 4); diff -rupN FreeImage/Source/FreeImage.h FreeImage-new/Source/FreeImage.h --- FreeImage/Source/FreeImage.h 2015-03-04 02:17:54.000000000 +0100 +++ FreeImage-new/Source/FreeImage.h 2015-09-05 02:13:52.045353382 +0200 @@ -155,8 +155,11 @@ typedef uint8_t BYTE; typedef uint16_t WORD; typedef uint32_t DWORD; typedef int32_t LONG; +// Disable these, they conflict with the (wrong) ones of libraw +#if 0 typedef int64_t INT64; typedef uint64_t UINT64; +#endif #else // MS is not C99 ISO compliant typedef long BOOL; @@ -410,7 +413,12 @@ FI_ENUM(FREE_IMAGE_FORMAT) { FIF_DDS = 24, FIF_GIF = 25, FIF_HDR = 26, - FIF_FAXG3 = 27, +/* The G3 fax format plugin is deliberately disabled in the Fedora build of + FreeImage as it requires that FreeImage uses a private copy of libtiff + which is a no no because of security reasons. */ +#if 0 + FIF_FAXG3 = 27, +#endif FIF_SGI = 28, FIF_EXR = 29, FIF_J2K = 30, @@ -473,6 +481,10 @@ FI_ENUM(FREE_IMAGE_DITHER) { FID_BAYER16x16 = 6 //! Bayer ordered dispersed dot dithering (order 4 dithering matrix) }; +/* The FreeImage_JPEGTransform functions are deliberately disabled in the + Fedora build of FreeImage as they require that FreeImage uses a private copy + of libjpeg which is a no no because of security reasons. */ +#if 0 /** Lossless JPEG transformations Constants used in FreeImage_JPEGTransform */ @@ -486,6 +498,7 @@ FI_ENUM(FREE_IMAGE_JPEG_OPERATION) { FIJPEG_OP_ROTATE_180 = 6, //! 180-degree rotation FIJPEG_OP_ROTATE_270 = 7 //! 270-degree clockwise (or 90 ccw) }; +#endif /** Tone mapping operators. Constants used in FreeImage_ToneMapping. @@ -1076,7 +1089,10 @@ DLL_API const char* DLL_CALLCONV FreeIma // -------------------------------------------------------------------------- // JPEG lossless transformation routines // -------------------------------------------------------------------------- - +/* The FreeImage_JPEGTransform functions are deliberately disabled in the ++ Fedora build of FreeImage as they require that FreeImage uses a private copy ++ of libjpeg which is a no no because of security reasons. */ +#if 0 DLL_API BOOL DLL_CALLCONV FreeImage_JPEGTransform(const char *src_file, const char *dst_file, FREE_IMAGE_JPEG_OPERATION operation, BOOL perfect FI_DEFAULT(TRUE)); DLL_API BOOL DLL_CALLCONV FreeImage_JPEGTransformU(const wchar_t *src_file, const wchar_t *dst_file, FREE_IMAGE_JPEG_OPERATION operation, BOOL perfect FI_DEFAULT(TRUE)); DLL_API BOOL DLL_CALLCONV FreeImage_JPEGCrop(const char *src_file, const char *dst_file, int left, int top, int right, int bottom); @@ -1085,6 +1101,7 @@ DLL_API BOOL DLL_CALLCONV FreeImage_JPEG DLL_API BOOL DLL_CALLCONV FreeImage_JPEGTransformCombined(const char *src_file, const char *dst_file, FREE_IMAGE_JPEG_OPERATION operation, int* left, int* top, int* right, int* bottom, BOOL perfect FI_DEFAULT(TRUE)); DLL_API BOOL DLL_CALLCONV FreeImage_JPEGTransformCombinedU(const wchar_t *src_file, const wchar_t *dst_file, FREE_IMAGE_JPEG_OPERATION operation, int* left, int* top, int* right, int* bottom, BOOL perfect FI_DEFAULT(TRUE)); DLL_API BOOL DLL_CALLCONV FreeImage_JPEGTransformCombinedFromMemory(FIMEMORY* src_stream, FIMEMORY* dst_stream, FREE_IMAGE_JPEG_OPERATION operation, int* left, int* top, int* right, int* bottom, BOOL perfect FI_DEFAULT(TRUE)); +#endif // -------------------------------------------------------------------------- diff -rupN FreeImage/Source/FreeImageToolkit/JPEGTransform.cpp FreeImage-new/Source/FreeImageToolkit/JPEGTransform.cpp --- FreeImage/Source/FreeImageToolkit/JPEGTransform.cpp 2015-03-02 02:07:10.000000000 +0100 +++ FreeImage-new/Source/FreeImageToolkit/JPEGTransform.cpp 2015-09-05 02:13:52.045353382 +0200 @@ -26,10 +26,10 @@ extern "C" { #undef FAR #include <setjmp.h> -#include "../LibJPEG/jinclude.h" -#include "../LibJPEG/jpeglib.h" -#include "../LibJPEG/jerror.h" -#include "../LibJPEG/transupp.h" +#include <jinclude.h> +#include <jpeglib.h> +#include <jerror.h> +#include <transupp.h> } #include "FreeImage.h" diff -rupN FreeImage/Source/Metadata/TagConversion.cpp FreeImage-new/Source/Metadata/TagConversion.cpp --- FreeImage/Source/Metadata/TagConversion.cpp 2015-03-02 02:07:10.000000000 +0100 +++ FreeImage-new/Source/Metadata/TagConversion.cpp 2015-09-05 02:13:52.045353382 +0200 @@ -30,6 +30,11 @@ #define MAX_TEXT_EXTENT 512 +// These were in FreeImage.h, but are moved here to avoid conflicts (see note in FreeImage.h) +typedef int64_t INT64; +typedef uint64_t UINT64; + + /** Convert a tag to a C string */ diff -rupN FreeImage/Source/Metadata/XTIFF.cpp FreeImage-new/Source/Metadata/XTIFF.cpp --- FreeImage/Source/Metadata/XTIFF.cpp 2015-03-02 02:07:10.000000000 +0100 +++ FreeImage-new/Source/Metadata/XTIFF.cpp 2015-09-05 02:13:52.045353382 +0200 @@ -29,13 +29,18 @@ #pragma warning (disable : 4786) // identifier was truncated to 'number' characters #endif -#include "../LibTIFF4/tiffiop.h" +#include <tiffio.h> #include "FreeImage.h" #include "Utilities.h" #include "FreeImageTag.h" #include "FIRational.h" +extern "C" +{ + int _TIFFDataSize(TIFFDataType type); +} + // ---------------------------------------------------------- // Extended TIFF Directory GEO Tag Support // ---------------------------------------------------------- @@ -224,6 +229,33 @@ tiff_write_geotiff_profile(TIFF *tif, FI // TIFF EXIF tag reading & writing // ---------------------------------------------------------- +static uint32 exif_tag_ids[] = { + EXIFTAG_EXPOSURETIME, EXIFTAG_FNUMBER, EXIFTAG_EXPOSUREPROGRAM, + EXIFTAG_SPECTRALSENSITIVITY, EXIFTAG_ISOSPEEDRATINGS, EXIFTAG_OECF, + EXIFTAG_EXIFVERSION, EXIFTAG_DATETIMEORIGINAL, EXIFTAG_DATETIMEDIGITIZED, + EXIFTAG_COMPONENTSCONFIGURATION, EXIFTAG_COMPRESSEDBITSPERPIXEL, + EXIFTAG_SHUTTERSPEEDVALUE, EXIFTAG_APERTUREVALUE, + EXIFTAG_BRIGHTNESSVALUE, EXIFTAG_EXPOSUREBIASVALUE, + EXIFTAG_MAXAPERTUREVALUE, EXIFTAG_SUBJECTDISTANCE, EXIFTAG_METERINGMODE, + EXIFTAG_LIGHTSOURCE, EXIFTAG_FLASH, EXIFTAG_FOCALLENGTH, + EXIFTAG_SUBJECTAREA, EXIFTAG_MAKERNOTE, EXIFTAG_USERCOMMENT, + EXIFTAG_SUBSECTIME, EXIFTAG_SUBSECTIMEORIGINAL, + EXIFTAG_SUBSECTIMEDIGITIZED, EXIFTAG_FLASHPIXVERSION, EXIFTAG_COLORSPACE, + EXIFTAG_PIXELXDIMENSION, EXIFTAG_PIXELYDIMENSION, + EXIFTAG_RELATEDSOUNDFILE, EXIFTAG_FLASHENERGY, + EXIFTAG_SPATIALFREQUENCYRESPONSE, EXIFTAG_FOCALPLANEXRESOLUTION, + EXIFTAG_FOCALPLANEYRESOLUTION, EXIFTAG_FOCALPLANERESOLUTIONUNIT, + EXIFTAG_SUBJECTLOCATION, EXIFTAG_EXPOSUREINDEX, EXIFTAG_SENSINGMETHOD, + EXIFTAG_FILESOURCE, EXIFTAG_SCENETYPE, EXIFTAG_CFAPATTERN, + EXIFTAG_CUSTOMRENDERED, EXIFTAG_EXPOSUREMODE, EXIFTAG_WHITEBALANCE, + EXIFTAG_DIGITALZOOMRATIO, EXIFTAG_FOCALLENGTHIN35MMFILM, + EXIFTAG_SCENECAPTURETYPE, EXIFTAG_GAINCONTROL, EXIFTAG_CONTRAST, + EXIFTAG_SATURATION, EXIFTAG_SHARPNESS, EXIFTAG_DEVICESETTINGDESCRIPTION, + EXIFTAG_SUBJECTDISTANCERANGE, EXIFTAG_GAINCONTROL, EXIFTAG_GAINCONTROL, + EXIFTAG_IMAGEUNIQUEID +}; +static int nExifTags = sizeof(exif_tag_ids) / sizeof(exif_tag_ids[0]); + /** Read a single Exif tag @@ -575,45 +607,11 @@ tiff_read_exif_tags(TIFF *tif, TagLib::M // loop over all Core Directory Tags // ### uses private data, but there is no other way + // -> Fedora: Best we can do without private headers is to hard-code a list of known EXIF tags and read those if(md_model == TagLib::EXIF_MAIN) { - const TIFFDirectory *td = &tif->tif_dir; - - uint32 lastTag = 0; //<- used to prevent reading some tags twice (as stored in tif_fieldinfo) - - for (int fi = 0, nfi = (int)tif->tif_nfields; nfi > 0; nfi--, fi++) { - const TIFFField *fld = tif->tif_fields[fi]; - - const uint32 tag_id = TIFFFieldTag(fld); - - if(tag_id == lastTag) { - continue; - } - - // test if tag value is set - // (lifted directly from LibTiff _TIFFWriteDirectory) - - if( fld->field_bit == FIELD_CUSTOM ) { - int is_set = FALSE; - - for(int ci = 0; ci < td->td_customValueCount; ci++ ) { - is_set |= (td->td_customValues[ci].info == fld); - } - - if( !is_set ) { - continue; - } - - } else if(!TIFFFieldSet(tif, fld->field_bit)) { - continue; - } - - // process *all* other tags (some will be ignored) - - tiff_read_exif_tag(tif, tag_id, dib, md_model); - - lastTag = tag_id; + for (int i = 0; i < nExifTags; ++i) { + tiff_read_exif_tag(tif, exif_tag_ids[i], dib, md_model); } - } return TRUE; @@ -723,10 +721,9 @@ tiff_write_exif_tags(TIFF *tif, TagLib:: TagLib& tag_lib = TagLib::instance(); - for (int fi = 0, nfi = (int)tif->tif_nfields; nfi > 0; nfi--, fi++) { - const TIFFField *fld = tif->tif_fields[fi]; - - const uint32 tag_id = TIFFFieldTag(fld); + for (int fi = 0; fi < nExifTags; fi++) { + const uint32 tag_id = exif_tag_ids[fi]; + const TIFFField *fld = TIFFFieldWithTag(tif, tag_id); if(skip_write_field(tif, tag_id)) { // skip tags that are already handled by the LibTIFF writing process
