mirror of
https://gitlab.com/buildroot.org/buildroot.git
synced 2026-08-08 08:30:47 -09:00
package/libfreeimage: remove package
The last release dates back to 2018 and security issues remain unfixed upstream so we remove this package for security reasons: https://lists.buildroot.org/pipermail/buildroot/2025-December/793070.html Cc: Rémi Rérolle <remi.rerolle@gmail.com> Signed-off-by: Bernd Kuhls <bernd@kuhls.net> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
This commit is contained in:
committed by
Thomas Petazzoni
parent
e644b58f51
commit
2577977e75
@@ -531,10 +531,6 @@ package/libedit/0001-check-bsd-functions-in-libbsd.patch lib_patch.Upstream
|
||||
package/libevent/0001-Don-t-define-BIO_get_init-for-LibreSSL-3-5.patch lib_patch.Upstream
|
||||
package/libffi/0001-Fix-use-of-compact-eh-frames-on-MIPS.patch lib_patch.Upstream
|
||||
package/libfm/0001-modules-fix-cross-compilation.patch lib_patch.Upstream
|
||||
package/libfreeimage/0001-no-root-install.patch lib_patch.Upstream
|
||||
package/libfreeimage/0002-fix-cpuid-x86.patch lib_patch.Upstream
|
||||
package/libfreeimage/0003-fix-big-endian-os.patch lib_patch.Upstream
|
||||
package/libfreeimage/0004-fixed-C-11-warnings.patch lib_patch.Upstream
|
||||
package/libftdi/0001-pkgconfig_libusb.patch lib_patch.Sob lib_patch.Upstream
|
||||
package/libftdi/0002-libftdi.pc-requires-libusb-fix-static-build.patch lib_patch.Sob lib_patch.Upstream
|
||||
package/libfuse/0001-fix-aarch64-build.patch lib_patch.Upstream
|
||||
|
||||
@@ -146,6 +146,12 @@ endif
|
||||
|
||||
comment "Legacy options removed in 2026.02"
|
||||
|
||||
config BR2_PACKAGE_LIBFREEIMAGE
|
||||
bool "libfreeimage"
|
||||
select BR2_LEGACY
|
||||
help
|
||||
libfreeimage is unmaintained and has been removed
|
||||
|
||||
config BR2_PACKAGE_OPENCV3
|
||||
bool "opencv3"
|
||||
select BR2_LEGACY
|
||||
|
||||
@@ -2847,9 +2847,6 @@ N: Refik Tuzakli <tuzakli.refik@gmail.com>
|
||||
F: package/freescale-imx/
|
||||
F: package/paho-mqtt-cpp/
|
||||
|
||||
N: Rémi Rérolle <remi.rerolle@gmail.com>
|
||||
F: package/libfreeimage/
|
||||
|
||||
N: Renaud Aubin <root@renaud.io>
|
||||
F: package/libhttpparser/
|
||||
|
||||
|
||||
@@ -1746,7 +1746,6 @@ menu "Graphics"
|
||||
source "package/libfm/Config.in"
|
||||
source "package/libfm-extra/Config.in"
|
||||
source "package/libfreeglut/Config.in"
|
||||
source "package/libfreeimage/Config.in"
|
||||
source "package/libgdiplus/Config.in"
|
||||
source "package/libgeotiff/Config.in"
|
||||
source "package/libglew/Config.in"
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
Makefile.gnu: allow non-root install by not enforcing root ownserhip
|
||||
|
||||
Signed-off-by: Rémi Rérolle <remi.rerolle@gmail.com>
|
||||
|
||||
diff -ruN a/Makefile.gnu b/Makefile.gnu
|
||||
--- a/Makefile.gnu 2015-04-09 16:34:02.315316841 +0200
|
||||
+++ b/Makefile.gnu 2015-04-09 16:34:28.875483201 +0200
|
||||
@@ -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
|
||||
@@ -1,67 +0,0 @@
|
||||
Fix build issue caused by invalid register usage on x86
|
||||
|
||||
Patch taken from https://github.com/openexr/openexr/issues/128.
|
||||
|
||||
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
|
||||
|
||||
Index: b/Source/OpenEXR/IlmImf/ImfSystemSpecific.cpp
|
||||
===================================================================
|
||||
--- a/Source/OpenEXR/IlmImf/ImfSystemSpecific.cpp
|
||||
+++ b/Source/OpenEXR/IlmImf/ImfSystemSpecific.cpp
|
||||
@@ -40,21 +40,19 @@
|
||||
|
||||
namespace {
|
||||
#if defined(IMF_HAVE_SSE2) && defined(__GNUC__)
|
||||
-
|
||||
+#include <cpuid.h>
|
||||
// Helper functions for gcc + SSE enabled
|
||||
- void cpuid(int n, int &eax, int &ebx, int &ecx, int &edx)
|
||||
+ void cpuid(unsigned int n, unsigned int &eax, unsigned int &ebx,
|
||||
+ unsigned int &ecx, unsigned int &edx)
|
||||
{
|
||||
- __asm__ __volatile__ (
|
||||
- "cpuid"
|
||||
- : /* Output */ "=a"(eax), "=b"(ebx), "=c"(ecx), "=d"(edx)
|
||||
- : /* Input */ "a"(n)
|
||||
- : /* Clobber */);
|
||||
+ __get_cpuid(n, &eax, &ebx, &ecx, &edx);
|
||||
}
|
||||
|
||||
#else // IMF_HAVE_SSE2 && __GNUC__
|
||||
|
||||
// Helper functions for generic compiler - all disabled
|
||||
- void cpuid(int n, int &eax, int &ebx, int &ecx, int &edx)
|
||||
+ void cpuid(unsigned int n, unsigned int &eax, unsigned int &ebx,
|
||||
+ unsigned int &ecx, unsigned int &edx)
|
||||
{
|
||||
eax = ebx = ecx = edx = 0;
|
||||
}
|
||||
@@ -64,7 +62,7 @@
|
||||
|
||||
#ifdef OPENEXR_IMF_HAVE_GCC_INLINE_ASM_AVX
|
||||
|
||||
- void xgetbv(int n, int &eax, int &edx)
|
||||
+ void xgetbv(unsigned int n, unsigned int &eax, unsigned int &edx)
|
||||
{
|
||||
__asm__ __volatile__ (
|
||||
"xgetbv"
|
||||
@@ -75,7 +73,7 @@
|
||||
|
||||
#else // OPENEXR_IMF_HAVE_GCC_INLINE_ASM_AVX
|
||||
|
||||
- void xgetbv(int n, int &eax, int &edx)
|
||||
+ void xgetbv(unsigned int n, unsigned int &eax, unsigned int &edx)
|
||||
{
|
||||
eax = edx = 0;
|
||||
}
|
||||
@@ -94,8 +92,8 @@
|
||||
f16c(false)
|
||||
{
|
||||
bool osxsave = false;
|
||||
- int max = 0;
|
||||
- int eax, ebx, ecx, edx;
|
||||
+ unsigned int max = 0;
|
||||
+ unsigned int eax, ebx, ecx, edx;
|
||||
|
||||
cpuid(0, max, ebx, ecx, edx);
|
||||
if (max > 0)
|
||||
@@ -1,64 +0,0 @@
|
||||
fixed PluginBMP, PluginDDS for compilation under Big Endian OS
|
||||
|
||||
Downloaded from upstream commit:
|
||||
https://sourceforge.net/p/freeimage/svn/1809/
|
||||
|
||||
Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
|
||||
|
||||
diff -uNr FreeImage.orig/Source/FreeImage/PluginBMP.cpp FreeImage/Source/FreeImage/PluginBMP.cpp
|
||||
--- FreeImage.orig/Source/FreeImage/PluginBMP.cpp 2016-06-15 12:35:30.000000000 +0200
|
||||
+++ FreeImage/Source/FreeImage/PluginBMP.cpp 2019-08-31 16:00:27.813378612 +0200
|
||||
@@ -518,7 +518,7 @@
|
||||
io->read_proc(FreeImage_GetPalette(dib), used_colors * sizeof(RGBQUAD), 1, handle);
|
||||
#if FREEIMAGE_COLORORDER == FREEIMAGE_COLORORDER_RGB
|
||||
RGBQUAD *pal = FreeImage_GetPalette(dib);
|
||||
- for(int i = 0; i < used_colors; i++) {
|
||||
+ for(unsigned int i = 0; i < used_colors; i++) {
|
||||
INPLACESWAP(pal[i].rgbRed, pal[i].rgbBlue);
|
||||
}
|
||||
#endif
|
||||
@@ -1419,7 +1419,7 @@
|
||||
|
||||
free(buffer);
|
||||
#ifdef FREEIMAGE_BIGENDIAN
|
||||
- } else if (bpp == 16) {
|
||||
+ } else if (dst_bpp == 16) {
|
||||
int padding = dst_pitch - dst_width * sizeof(WORD);
|
||||
WORD pad = 0;
|
||||
WORD pixel;
|
||||
@@ -1440,7 +1440,7 @@
|
||||
}
|
||||
#endif
|
||||
#if FREEIMAGE_COLORORDER == FREEIMAGE_COLORORDER_RGB
|
||||
- } else if (bpp == 24) {
|
||||
+ } else if (dst_bpp == 24) {
|
||||
int padding = dst_pitch - dst_width * sizeof(FILE_BGR);
|
||||
DWORD pad = 0;
|
||||
FILE_BGR bgr;
|
||||
@@ -1461,7 +1461,7 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
- } else if (bpp == 32) {
|
||||
+ } else if (dst_bpp == 32) {
|
||||
FILE_BGRA bgra;
|
||||
for(unsigned y = 0; y < dst_height; y++) {
|
||||
BYTE *line = FreeImage_GetScanLine(dib, y);
|
||||
diff -uNr FreeImage.orig/Source/FreeImage/PluginDDS.cpp FreeImage/Source/FreeImage/PluginDDS.cpp
|
||||
--- FreeImage.orig/Source/FreeImage/PluginDDS.cpp 2018-07-31 17:04:58.000000000 +0200
|
||||
+++ FreeImage/Source/FreeImage/PluginDDS.cpp 2019-08-31 16:00:39.213465120 +0200
|
||||
@@ -356,14 +356,6 @@
|
||||
for(int i=0; i<11; i++) {
|
||||
SwapLong(&header->surfaceDesc.dwReserved1[i]);
|
||||
}
|
||||
- SwapLong(&header->surfaceDesc.ddpfPixelFormat.dwSize);
|
||||
- SwapLong(&header->surfaceDesc.ddpfPixelFormat.dwFlags);
|
||||
- SwapLong(&header->surfaceDesc.ddpfPixelFormat.dwFourCC);
|
||||
- SwapLong(&header->surfaceDesc.ddpfPixelFormat.dwRGBBitCount);
|
||||
- SwapLong(&header->surfaceDesc.ddpfPixelFormat.dwRBitMask);
|
||||
- SwapLong(&header->surfaceDesc.ddpfPixelFormat.dwGBitMask);
|
||||
- SwapLong(&header->surfaceDesc.ddpfPixelFormat.dwBBitMask);
|
||||
- SwapLong(&header->surfaceDesc.ddpfPixelFormat.dwRGBAlphaBitMask);
|
||||
SwapLong(&header->surfaceDesc.ddsCaps.dwCaps1);
|
||||
SwapLong(&header->surfaceDesc.ddsCaps.dwCaps2);
|
||||
SwapLong(&header->surfaceDesc.ddsCaps.dwReserved[0]);
|
||||
@@ -1,94 +0,0 @@
|
||||
fixed C++11 warnings
|
||||
|
||||
Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
|
||||
[Retrieved from: https://sourceforge.net/p/freeimage/svn/1896]
|
||||
|
||||
Index: trunk/Source/FreeImage/CacheFile.cpp
|
||||
===================================================================
|
||||
--- trunk/Source/FreeImage/CacheFile.cpp (révision 1895)
|
||||
+++ trunk/Source/FreeImage/CacheFile.cpp (révision 1896)
|
||||
@@ -147,10 +147,14 @@
|
||||
m_current_block->data = new BYTE[BLOCK_SIZE];
|
||||
|
||||
fseek(m_file, m_current_block->nr * BLOCK_SIZE, SEEK_SET);
|
||||
- fread(m_current_block->data, BLOCK_SIZE, 1, m_file);
|
||||
-
|
||||
- m_page_cache_mem.splice(m_page_cache_mem.begin(), m_page_cache_disk, it->second);
|
||||
- m_page_map[nr] = m_page_cache_mem.begin();
|
||||
+ if (fread(m_current_block->data, BLOCK_SIZE, 1, m_file) == 1) {
|
||||
+ m_page_cache_mem.splice(m_page_cache_mem.begin(), m_page_cache_disk, it->second);
|
||||
+ m_page_map[nr] = m_page_cache_mem.begin();
|
||||
+ }
|
||||
+ else {
|
||||
+ FreeImage_OutputMessageProc(FIF_UNKNOWN, "Failed to lock a block in CacheFile");
|
||||
+ return NULL;
|
||||
+ }
|
||||
}
|
||||
|
||||
// if the memory cache size is too large, swap an item to disc
|
||||
Index: trunk/Source/FreeImage/MultiPage.cpp
|
||||
===================================================================
|
||||
--- trunk/Source/FreeImage/MultiPage.cpp (révision 1895)
|
||||
+++ trunk/Source/FreeImage/MultiPage.cpp (révision 1896)
|
||||
@@ -271,8 +271,8 @@
|
||||
}
|
||||
}
|
||||
|
||||
- std::auto_ptr<FIMULTIBITMAP> bitmap (new FIMULTIBITMAP);
|
||||
- std::auto_ptr<MULTIBITMAPHEADER> header (new MULTIBITMAPHEADER);
|
||||
+ std::unique_ptr<FIMULTIBITMAP> bitmap (new FIMULTIBITMAP);
|
||||
+ std::unique_ptr<MULTIBITMAPHEADER> header (new MULTIBITMAPHEADER);
|
||||
header->m_filename = filename;
|
||||
// io is default
|
||||
header->node = node;
|
||||
@@ -339,8 +339,8 @@
|
||||
PluginNode *node = list->FindNodeFromFIF(fif);
|
||||
|
||||
if (node) {
|
||||
- std::auto_ptr<FIMULTIBITMAP> bitmap (new FIMULTIBITMAP);
|
||||
- std::auto_ptr<MULTIBITMAPHEADER> header (new MULTIBITMAPHEADER);
|
||||
+ std::unique_ptr<FIMULTIBITMAP> bitmap (new FIMULTIBITMAP);
|
||||
+ std::unique_ptr<MULTIBITMAPHEADER> header (new MULTIBITMAPHEADER);
|
||||
header->io = *io;
|
||||
header->node = node;
|
||||
header->fif = fif;
|
||||
Index: trunk/Source/FreeImage/PSDParser.cpp
|
||||
===================================================================
|
||||
--- trunk/Source/FreeImage/PSDParser.cpp (révision 1895)
|
||||
+++ trunk/Source/FreeImage/PSDParser.cpp (révision 1896)
|
||||
@@ -97,7 +97,7 @@
|
||||
template <int N>
|
||||
class PSDGetValue {
|
||||
public:
|
||||
- static inline int get(const BYTE * iprBuffer) {} // error
|
||||
+ static inline int get(const BYTE * iprBuffer) { return -1; } // error
|
||||
};
|
||||
|
||||
template <>
|
||||
Index: trunk/Source/FreeImage/PluginPSD.cpp
|
||||
===================================================================
|
||||
--- trunk/Source/FreeImage/PluginPSD.cpp (révision 1895)
|
||||
+++ trunk/Source/FreeImage/PluginPSD.cpp (révision 1896)
|
||||
@@ -127,7 +127,7 @@
|
||||
static BOOL DLL_CALLCONV
|
||||
Save(FreeImageIO *io, FIBITMAP *dib, fi_handle handle, int page, int flags, void *data) {
|
||||
if(!handle) {
|
||||
- return NULL;
|
||||
+ return FALSE;
|
||||
}
|
||||
try {
|
||||
psdParser parser;
|
||||
Index: trunk/Source/FreeImage/PluginHDR.cpp
|
||||
===================================================================
|
||||
--- trunk/Source/FreeImage/PluginHDR.cpp (révision 1895)
|
||||
+++ trunk/Source/FreeImage/PluginHDR.cpp (révision 1896)
|
||||
@@ -244,7 +244,8 @@
|
||||
}
|
||||
else if((buf[0] == '#') && (buf[1] == 0x20)) {
|
||||
header_info->valid |= RGBE_VALID_COMMENT;
|
||||
- strcpy(header_info->comment, buf);
|
||||
+ strncpy(header_info->comment, buf, HDR_MAXLINE - 1);
|
||||
+ header_info->comment[HDR_MAXLINE - 1] = '\0';
|
||||
}
|
||||
}
|
||||
if(!bHeaderFound || !bFormatFound) {
|
||||
@@ -1,40 +0,0 @@
|
||||
From 11383a017e8d040f1376c964d2b8769108204f0b Mon Sep 17 00:00:00 2001
|
||||
From: YOKOTA Hiroshi <yokota.hgml@gmail.com>
|
||||
Date: Thu, 25 Jul 2024 15:03:31 +0900
|
||||
Subject: [PATCH] jxrlib: ftbfs with GCC-14
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Bug-Debian: https://bugs.debian.org/1075105
|
||||
|
||||
_byteswap_ulong() is defined in image/sys/strcodec.c
|
||||
|
||||
Upstream: Bug submitted at https://sourceforge.net/p/freeimage/bugs/389/
|
||||
[Thomas: patch taken from https://sources.debian.org/patches/jxrlib/1.2~git20170615.f752187-5.3/0013-jxrlib-ftbfs-with-GCC-14.patch/]
|
||||
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
|
||||
----
|
||||
/usr/bin/cc -DDISABLE_PERF_MEASUREMENT -D__ANSI__ -Djpegxr_EXPORTS -I"/<<PKGBUILDDIR>>/common/include" -I"/<<PKGBUILDDIR>>/image/sys" -I"/<<PKGBUILDDIR>>/jxrgluelib" -I"/<<PKGBUILDDIR>>/jxrtestlib" -g -O2 -Werror=implicit-function-declaration -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wall -Wextra -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -w -MD -MT CMakeFiles/jpegxr.dir/image/encode/strenc.c.o -MF CMakeFiles/jpegxr.dir/image/encode/strenc.c.o.d -o CMakeFiles/jpegxr.dir/image/encode/strenc.c.o -c "/<<PKGBUILDDIR>>/image/encode/strenc.c"
|
||||
/<<PKGBUILDDIR>>/image/decode/segdec.c: In function ‘_load4’:
|
||||
/<<PKGBUILDDIR>>/image/decode/segdec.c:68:12: error: implicit declaration of function ‘_byteswap_ulong’ [-Wimplicit-function-declaration]
|
||||
68 | return _byteswap_ulong(v);
|
||||
| ^~~~~~~~~~~~~~~
|
||||
---
|
||||
Source/LibJXR/image/decode/segdec.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/Source/LibJXR/image/decode/segdec.c b/Source/LibJXR/image/decode/segdec.c
|
||||
index 1299458..8050355 100644
|
||||
--- a/Source/LibJXR/image/decode/segdec.c
|
||||
+++ b/Source/LibJXR/image/decode/segdec.c
|
||||
@@ -63,6 +63,7 @@ static U32 _FORCEINLINE _load4(void* pv)
|
||||
v |= ((U32)((U16 *) pv)[1]) << 16;
|
||||
return _byteswap_ulong(v);
|
||||
#else // _M_IA64
|
||||
+ U32 _byteswap_ulong(U32 bits); // from image/sys/strcodec.c
|
||||
return _byteswap_ulong(*(U32*)pv);
|
||||
#endif // _M_IA64
|
||||
#endif // _BIG__ENDIAN_
|
||||
--
|
||||
2.51.0
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
From 7b59b3757521d82406771cc47127aa70ffb26f3f Mon Sep 17 00:00:00 2001
|
||||
From: YOKOTA Hiroshi <yokota.hgml@gmail.com>
|
||||
Date: Thu, 25 Jul 2024 16:01:01 +0900
|
||||
Subject: [PATCH] FTBFS fix for function prototype error
|
||||
|
||||
Bug-Debian: https://bugs.debian.org/1075105
|
||||
|
||||
Upstream: Bug submitted at https://sourceforge.net/p/freeimage/bugs/389/
|
||||
[Thomas: patch taken from https://sources.debian.org/patches/jxrlib/1.2~git20170615.f752187-5.3/0015-FTBFS-fix-for-function-prototype-error.patch/]
|
||||
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
|
||||
---
|
||||
Source/LibJXR/jxrgluelib/JXRGlueJxr.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/Source/LibJXR/jxrgluelib/JXRGlueJxr.c b/Source/LibJXR/jxrgluelib/JXRGlueJxr.c
|
||||
index 2bf085a..182fc7f 100644
|
||||
--- a/Source/LibJXR/jxrgluelib/JXRGlueJxr.c
|
||||
+++ b/Source/LibJXR/jxrgluelib/JXRGlueJxr.c
|
||||
@@ -28,6 +28,7 @@
|
||||
//*@@@---@@@@******************************************************************
|
||||
#include <limits.h>
|
||||
#include <JXRGlue.h>
|
||||
+#include <wchar.h>
|
||||
|
||||
|
||||
static const char szHDPhotoFormat[] = "<dc:format>image/vnd.ms-photo</dc:format>";
|
||||
--
|
||||
2.51.0
|
||||
|
||||
@@ -1,188 +0,0 @@
|
||||
CVE: CVE-2019-12211
|
||||
CVE: CVE-2019-12213
|
||||
Upstream: https://src.fedoraproject.org/rpms/freeimage/raw/78980acf39f02b88e70f27e37e5a191c9a9ead47/f/CVE-2019-12211_2019-12213.patch
|
||||
Signed-off-by: Thomas Perale <thomas.perale@mind.be>
|
||||
---
|
||||
diff -rupN a/Source/FreeImage/PluginTIFF.cpp b/Source/FreeImage/PluginTIFF.cpp
|
||||
--- a/Source/FreeImage/PluginTIFF.cpp
|
||||
+++ b/Source/FreeImage/PluginTIFF.cpp
|
||||
@@ -122,9 +122,14 @@ static void ReadThumbnail(FreeImageIO *i
|
||||
static int s_format_id;
|
||||
|
||||
typedef struct {
|
||||
+ //! FreeImage IO functions
|
||||
FreeImageIO *io;
|
||||
+ //! FreeImage handle
|
||||
fi_handle handle;
|
||||
+ //! LibTIFF handle
|
||||
TIFF *tif;
|
||||
+ //! Count the number of thumbnails already read (used to avoid recursion on loading)
|
||||
+ unsigned thumbnailCount;
|
||||
} fi_TIFFIO;
|
||||
|
||||
// ----------------------------------------------------------
|
||||
@@ -184,10 +189,8 @@ Open a TIFF file descriptor for reading
|
||||
*/
|
||||
TIFF *
|
||||
TIFFFdOpen(thandle_t handle, const char *name, const char *mode) {
|
||||
- TIFF *tif;
|
||||
-
|
||||
// Open the file; the callback will set everything up
|
||||
- tif = TIFFClientOpen(name, mode, handle,
|
||||
+ TIFF *tif = TIFFClientOpen(name, mode, handle,
|
||||
_tiffReadProc, _tiffWriteProc, _tiffSeekProc, _tiffCloseProc,
|
||||
_tiffSizeProc, _tiffMapProc, _tiffUnmapProc);
|
||||
|
||||
@@ -460,12 +463,10 @@ CreateImageType(BOOL header_only, FREE_I
|
||||
}
|
||||
|
||||
}
|
||||
- else {
|
||||
-
|
||||
- dib = FreeImage_AllocateHeader(header_only, width, height, MIN(bpp, 32), FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK);
|
||||
+ else if (bpp <= 32) {
|
||||
+ dib = FreeImage_AllocateHeader(header_only, width, height, bpp, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK);
|
||||
}
|
||||
|
||||
-
|
||||
} else {
|
||||
// other bitmap types
|
||||
|
||||
@@ -1050,9 +1051,12 @@ static void * DLL_CALLCONV
|
||||
Open(FreeImageIO *io, fi_handle handle, BOOL read) {
|
||||
// wrapper for TIFF I/O
|
||||
fi_TIFFIO *fio = (fi_TIFFIO*)malloc(sizeof(fi_TIFFIO));
|
||||
- if(!fio) return NULL;
|
||||
+ if (!fio) {
|
||||
+ return NULL;
|
||||
+ }
|
||||
fio->io = io;
|
||||
fio->handle = handle;
|
||||
+ fio->thumbnailCount = 0;
|
||||
|
||||
if (read) {
|
||||
fio->tif = TIFFFdOpen((thandle_t)fio, "", "r");
|
||||
@@ -1108,6 +1112,27 @@ check for uncommon bitspersample values
|
||||
*/
|
||||
static BOOL
|
||||
IsValidBitsPerSample(uint16 photometric, uint16 bitspersample, uint16 samplesperpixel) {
|
||||
+ // get the pixel depth in bits
|
||||
+ const uint16 pixel_depth = bitspersample * samplesperpixel;
|
||||
+
|
||||
+ // check for a supported pixel depth
|
||||
+ switch (pixel_depth) {
|
||||
+ case 1:
|
||||
+ case 4:
|
||||
+ case 8:
|
||||
+ case 16:
|
||||
+ case 24:
|
||||
+ case 32:
|
||||
+ case 48:
|
||||
+ case 64:
|
||||
+ case 96:
|
||||
+ case 128:
|
||||
+ // OK, go on
|
||||
+ break;
|
||||
+ default:
|
||||
+ // unsupported pixel depth
|
||||
+ return FALSE;
|
||||
+ }
|
||||
|
||||
switch(bitspersample) {
|
||||
case 1:
|
||||
@@ -1148,6 +1173,8 @@ IsValidBitsPerSample(uint16 photometric,
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
+
|
||||
+ return FALSE;
|
||||
}
|
||||
|
||||
static TIFFLoadMethod
|
||||
@@ -1237,15 +1264,30 @@ Read embedded thumbnail
|
||||
static void
|
||||
ReadThumbnail(FreeImageIO *io, fi_handle handle, void *data, TIFF *tiff, FIBITMAP *dib) {
|
||||
FIBITMAP* thumbnail = NULL;
|
||||
-
|
||||
+
|
||||
+ fi_TIFFIO *fio = (fi_TIFFIO*)data;
|
||||
+
|
||||
+ /*
|
||||
+ Thumbnail loading can cause recursions because of the way
|
||||
+ functions TIFFLastDirectory and TIFFSetSubDirectory are working.
|
||||
+ We use here a hack to count the number of times the ReadThumbnail function was called.
|
||||
+ We only allow one call, check for this
|
||||
+ */
|
||||
+ if (fio->thumbnailCount > 0) {
|
||||
+ return;
|
||||
+ }
|
||||
+ else {
|
||||
+ // update the thumbnail count (used to avoid recursion)
|
||||
+ fio->thumbnailCount++;
|
||||
+ }
|
||||
+
|
||||
// read exif thumbnail (IFD 1) ...
|
||||
|
||||
- /*
|
||||
- // this code can cause unwanted recursion causing an overflow, it is thus disabled until we have a better solution
|
||||
- // do we really need to read a thumbnail from the Exif segment ? knowing that TIFF store the thumbnail in the subIFD ...
|
||||
- //
|
||||
toff_t exif_offset = 0;
|
||||
if(TIFFGetField(tiff, TIFFTAG_EXIFIFD, &exif_offset)) {
|
||||
+
|
||||
+ // this code can cause unwanted recursion causing an overflow, because of the way TIFFLastDirectory work
|
||||
+ // => this is checked using
|
||||
|
||||
if(!TIFFLastDirectory(tiff)) {
|
||||
// save current position
|
||||
@@ -1256,15 +1298,15 @@ ReadThumbnail(FreeImageIO *io, fi_handle
|
||||
int page = 1;
|
||||
int flags = TIFF_DEFAULT;
|
||||
thumbnail = Load(io, handle, page, flags, data);
|
||||
+
|
||||
// store the thumbnail (remember to release it before return)
|
||||
FreeImage_SetThumbnail(dib, thumbnail);
|
||||
-
|
||||
+
|
||||
// restore current position
|
||||
io->seek_proc(handle, tell_pos, SEEK_SET);
|
||||
TIFFSetDirectory(tiff, cur_dir);
|
||||
}
|
||||
}
|
||||
- */
|
||||
|
||||
// ... or read the first subIFD
|
||||
|
||||
@@ -1281,11 +1323,14 @@ ReadThumbnail(FreeImageIO *io, fi_handle
|
||||
const long tell_pos = io->tell_proc(handle);
|
||||
const uint16 cur_dir = TIFFCurrentDirectory(tiff);
|
||||
|
||||
+ // this code can cause unwanted recursion causing an overflow, because of the way TIFFSetSubDirectory work
|
||||
+
|
||||
if(TIFFSetSubDirectory(tiff, subIFD_offsets[0])) {
|
||||
// load the thumbnail
|
||||
int page = -1;
|
||||
int flags = TIFF_DEFAULT;
|
||||
thumbnail = Load(io, handle, page, flags, data);
|
||||
+
|
||||
// store the thumbnail (remember to release it before return)
|
||||
FreeImage_SetThumbnail(dib, thumbnail);
|
||||
}
|
||||
@@ -2041,7 +2086,7 @@ Load(FreeImageIO *io, fi_handle handle,
|
||||
}
|
||||
|
||||
// calculate src line and dst pitch
|
||||
- int dst_pitch = FreeImage_GetPitch(dib);
|
||||
+ unsigned dst_pitch = FreeImage_GetPitch(dib);
|
||||
uint32 tileRowSize = (uint32)TIFFTileRowSize(tif);
|
||||
uint32 imageRowSize = (uint32)TIFFScanlineSize(tif);
|
||||
|
||||
@@ -2071,7 +2116,7 @@ Load(FreeImageIO *io, fi_handle handle,
|
||||
BYTE *src_bits = tileBuffer;
|
||||
BYTE *dst_bits = bits + rowSize;
|
||||
for(int k = 0; k < nrows; k++) {
|
||||
- memcpy(dst_bits, src_bits, src_line);
|
||||
+ memcpy(dst_bits, src_bits, MIN(dst_pitch, src_line));
|
||||
src_bits += tileRowSize;
|
||||
dst_bits -= dst_pitch;
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
CVE: CVE-2020-24292
|
||||
Upstream: https://src.fedoraproject.org/rpms/freeimage/raw/rawhide/f/CVE-2020-24292.patch
|
||||
Signed-off-by: Thomas Perale <thomas.perale@mind.be>
|
||||
---
|
||||
diff -rupN a/Source/FreeImage/PluginICO.cpp b/Source/FreeImage/PluginICO.cpp
|
||||
--- a/Source/FreeImage/PluginICO.cpp
|
||||
+++ b/Source/FreeImage/PluginICO.cpp
|
||||
@@ -301,6 +301,9 @@ LoadStandardIcon(FreeImageIO *io, fi_han
|
||||
int width = bmih.biWidth;
|
||||
int height = bmih.biHeight / 2; // height == xor + and mask
|
||||
unsigned bit_count = bmih.biBitCount;
|
||||
+ if (bit_count != 1 && bit_count != 2 && bit_count != 4 && bit_count != 8 && bit_count != 16 && bit_count != 24 && bit_count != 32) {
|
||||
+ return NULL;
|
||||
+ }
|
||||
unsigned line = CalculateLine(width, bit_count);
|
||||
unsigned pitch = CalculatePitch(line);
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
CVE: CVE-2020-24293
|
||||
Upstream: https://src.fedoraproject.org/rpms/freeimage/raw/rawhide/f/CVE-2020-24293.patch
|
||||
Signed-off-by: Thomas Perale <thomas.perale@mind.be>
|
||||
---
|
||||
diff -rupN a/Source/FreeImage/PSDParser.cpp b/Source/FreeImage/PSDParser.cpp
|
||||
--- a/Source/FreeImage/PSDParser.cpp
|
||||
+++ b/Source/FreeImage/PSDParser.cpp
|
||||
@@ -780,6 +780,10 @@ int psdThumbnail::Read(FreeImageIO *io,
|
||||
FreeImage_Unload(_dib);
|
||||
}
|
||||
|
||||
+ if (_WidthBytes != _Width * _BitPerPixel / 8) {
|
||||
+ throw "Invalid PSD image";
|
||||
+ }
|
||||
+
|
||||
if(_Format == 1) {
|
||||
// kJpegRGB thumbnail image
|
||||
_dib = FreeImage_LoadFromHandle(FIF_JPEG, io, handle);
|
||||
@@ -1,25 +0,0 @@
|
||||
CVE: CVE-2020-24295
|
||||
Upstream: https://src.fedoraproject.org/rpms/freeimage/raw/rawhide/f/CVE-2020-24295.patch
|
||||
Signed-off-by: Thomas Perale <thomas.perale@mind.be>
|
||||
---
|
||||
diff -rupN a/Source/FreeImage/PSDParser.cpp b/Source/FreeImage/PSDParser.cpp
|
||||
--- a/Source/FreeImage/PSDParser.cpp
|
||||
+++ b/Source/FreeImage/PSDParser.cpp
|
||||
@@ -1466,6 +1466,7 @@ FIBITMAP* psdParser::ReadImageData(FreeI
|
||||
const unsigned dstBpp = (depth == 1) ? 1 : FreeImage_GetBPP(bitmap)/8;
|
||||
const unsigned dstLineSize = FreeImage_GetPitch(bitmap);
|
||||
BYTE* const dst_first_line = FreeImage_GetScanLine(bitmap, nHeight - 1);//<*** flipped
|
||||
+ const unsigned dst_buffer_size = dstLineSize * nHeight;
|
||||
|
||||
BYTE* line_start = new BYTE[lineSize]; //< fileline cache
|
||||
|
||||
@@ -1481,6 +1482,9 @@ FIBITMAP* psdParser::ReadImageData(FreeI
|
||||
const unsigned channelOffset = GetChannelOffset(bitmap, c) * bytes;
|
||||
|
||||
BYTE* dst_line_start = dst_first_line + channelOffset;
|
||||
+ if (channelOffset + lineSize > dst_buffer_size) {
|
||||
+ throw "Invalid PSD image";
|
||||
+ }
|
||||
for(unsigned h = 0; h < nHeight; ++h, dst_line_start -= dstLineSize) {//<*** flipped
|
||||
io->read_proc(line_start, lineSize, 1, handle);
|
||||
ReadImageLine(dst_line_start, line_start, lineSize, dstBpp, bytes);
|
||||
@@ -1,23 +0,0 @@
|
||||
CVE: CVE-2021-33367
|
||||
Upstream: https://src.fedoraproject.org/rpms/freeimage/raw/rawhide/f/CVE-2021-33367.patch
|
||||
Signed-off-by: Thomas Perale <thomas.perale@mind.be>
|
||||
---
|
||||
diff -rupN a/Source/Metadata/Exif.cpp b/Source/Metadata/Exif.cpp
|
||||
--- a/Source/Metadata/Exif.cpp
|
||||
+++ b/Source/Metadata/Exif.cpp
|
||||
@@ -719,8 +719,13 @@ jpeg_read_exif_dir(FIBITMAP *dib, const
|
||||
//
|
||||
|
||||
const WORD entriesCount0th = ReadUint16(msb_order, ifd0th);
|
||||
-
|
||||
- DWORD next_offset = ReadUint32(msb_order, DIR_ENTRY_ADDR(ifd0th, entriesCount0th));
|
||||
+
|
||||
+ const BYTE* de_addr = DIR_ENTRY_ADDR(ifd0th, entriesCount0th);
|
||||
+ if(de_addr+4 >= (BYTE*)(dwLength + ifd0th - tiffp)) {
|
||||
+ return TRUE; //< no thumbnail
|
||||
+ }
|
||||
+
|
||||
+ DWORD next_offset = ReadUint32(msb_order, de_addr);
|
||||
if((next_offset == 0) || (next_offset >= dwLength)) {
|
||||
return TRUE; //< no thumbnail
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
CVE: CVE-2021-40263
|
||||
Upstream: https://src.fedoraproject.org/rpms/freeimage/raw/rawhide/f/CVE-2021-40263.patch
|
||||
Signed-off-by: Thomas Perale <thomas.perale@mind.be>
|
||||
---
|
||||
diff -rupN a/Source/FreeImage/PluginTIFF.cpp b/Source/FreeImage/PluginTIFF.cpp
|
||||
--- a/Source/FreeImage/PluginTIFF.cpp
|
||||
+++ b/Source/FreeImage/PluginTIFF.cpp
|
||||
@@ -2090,6 +2090,10 @@ Load(FreeImageIO *io, fi_handle handle,
|
||||
uint32 tileRowSize = (uint32)TIFFTileRowSize(tif);
|
||||
uint32 imageRowSize = (uint32)TIFFScanlineSize(tif);
|
||||
|
||||
+ if (width / tileWidth * tileRowSize * 8 > bitspersample * samplesperpixel * width) {
|
||||
+ free(tileBuffer);
|
||||
+ throw "Corrupted tiled TIFF file";
|
||||
+ }
|
||||
|
||||
// In the tiff file the lines are saved from up to down
|
||||
// In a DIB the lines must be saved from down to up
|
||||
@@ -1,18 +0,0 @@
|
||||
CVE: CVE-2021-40266
|
||||
Upstream: https://src.fedoraproject.org/rpms/freeimage/raw/rawhide/f/CVE-2021-40266.patch
|
||||
Signed-off-by: Thomas Perale <thomas.perale@mind.be>
|
||||
---
|
||||
diff -rupN a/Source/FreeImage/PluginTIFF.cpp b/Source/FreeImage/PluginTIFF.cpp
|
||||
--- a/Source/FreeImage/PluginTIFF.cpp
|
||||
+++ b/Source/FreeImage/PluginTIFF.cpp
|
||||
@@ -366,6 +366,10 @@ static void
|
||||
ReadPalette(TIFF *tiff, uint16 photometric, uint16 bitspersample, FIBITMAP *dib) {
|
||||
RGBQUAD *pal = FreeImage_GetPalette(dib);
|
||||
|
||||
+ if (!pal) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
switch(photometric) {
|
||||
case PHOTOMETRIC_MINISBLACK: // bitmap and greyscale image types
|
||||
case PHOTOMETRIC_MINISWHITE:
|
||||
@@ -1,18 +0,0 @@
|
||||
CVE: CVE-2023-47995
|
||||
Upstream: https://src.fedoraproject.org/rpms/freeimage/raw/rawhide/f/CVE-2023-47995.patch
|
||||
Signed-off-by: Thomas Perale <thomas.perale@mind.be>
|
||||
---
|
||||
diff -rupN a/Source/FreeImage/PluginJPEG.cpp b/Source/FreeImage/PluginJPEG.cpp
|
||||
--- a/Source/FreeImage/PluginJPEG.cpp
|
||||
+++ b/Source/FreeImage/PluginJPEG.cpp
|
||||
@@ -1196,6 +1196,10 @@ Load(FreeImageIO *io, fi_handle handle,
|
||||
|
||||
jpeg_read_header(&cinfo, TRUE);
|
||||
|
||||
+ if (cinfo.image_width > JPEG_MAX_DIMENSION || cinfo.image_height > JPEG_MAX_DIMENSION) {
|
||||
+ throw FI_MSG_ERROR_DIB_MEMORY;
|
||||
+ }
|
||||
+
|
||||
// step 4: set parameters for decompression
|
||||
|
||||
unsigned int scale_denom = 1; // fraction by which to scale image
|
||||
@@ -1,20 +0,0 @@
|
||||
CVE: CVE-2023-47997
|
||||
Upstream: https://src.fedoraproject.org/rpms/freeimage/raw/rawhide/f/CVE-2023-47997.patch
|
||||
Signed-off-by: Thomas Perale <thomas.perale@mind.be>
|
||||
---
|
||||
diff -rupN a/Source/FreeImage/PluginTIFF.cpp b/Source/FreeImage/PluginTIFF.cpp
|
||||
--- a/Source/FreeImage/PluginTIFF.cpp
|
||||
+++ b/Source/FreeImage/PluginTIFF.cpp
|
||||
@@ -1444,6 +1444,12 @@ Load(FreeImageIO *io, fi_handle handle,
|
||||
(int)bitspersample, (int)samplesperpixel, (int)photometric);
|
||||
throw (char*)NULL;
|
||||
}
|
||||
+ if (planar_config == PLANARCONFIG_SEPARATE && bitspersample < 8) {
|
||||
+ FreeImage_OutputMessageProc(s_format_id,
|
||||
+ "Unable to handle this format: bitspersample = 8, TIFFTAG_PLANARCONFIG = PLANARCONFIG_SEPARATE"
|
||||
+ );
|
||||
+ throw (char*)NULL;
|
||||
+ }
|
||||
|
||||
// ---------------------------------------------------------------------------------
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
config BR2_PACKAGE_LIBFREEIMAGE
|
||||
bool "libfreeimage"
|
||||
depends on BR2_INSTALL_LIBSTDCPP
|
||||
depends on !BR2_STATIC_LIBS
|
||||
depends on BR2_USE_WCHAR
|
||||
# compiler issue: "Error: invalid register number `63'"
|
||||
depends on !BR2_arc
|
||||
help
|
||||
FreeImage is an Open Source library project for developers who
|
||||
would like to support popular graphics image formats like PNG,
|
||||
BMP, JPEG, TIFF and others as needed by today's multimedia
|
||||
applications.
|
||||
|
||||
http://freeimage.sourceforge.net
|
||||
|
||||
comment "libfreeimage needs a toolchain w/ C++, dynamic library, wchar"
|
||||
depends on !BR2_arc
|
||||
depends on BR2_STATIC_LIBS || !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR
|
||||
@@ -1,9 +0,0 @@
|
||||
# From https://sourceforge.net/projects/freeimage/files/Source%20Distribution/3.18.0/
|
||||
md5 f8ba138a3be233a3eed9c456e42e2578 FreeImage3180.zip
|
||||
sha1 38daa9d8f1bca2330a2eaa42ec66fbe6ede7dce9 FreeImage3180.zip
|
||||
|
||||
# Locally computed
|
||||
sha256 f41379682f9ada94ea7b34fe86bf9ee00935a3147be41b6569c9605a53e438fd FreeImage3180.zip
|
||||
sha256 d51615a1a47f1ddbb027920d60d3fc30a00e1284c795a47857883e641349fadf license-gplv2.txt
|
||||
sha256 084be110e3e8757d8e6945cda1fbc7e5073bbe688dc19b92c0d8440155d8e282 license-gplv3.txt
|
||||
sha256 0bb9a3123297c73ae6e19c70459fb0e58f313f67ca63176fd43f8e77668b8243 license-fi.txt
|
||||
@@ -1,62 +0,0 @@
|
||||
################################################################################
|
||||
#
|
||||
# libfreeimage
|
||||
#
|
||||
################################################################################
|
||||
|
||||
LIBFREEIMAGE_VERSION = 3.18.0
|
||||
LIBFREEIMAGE_SITE = http://downloads.sourceforge.net/freeimage
|
||||
LIBFREEIMAGE_SOURCE = FreeImage$(subst .,,$(LIBFREEIMAGE_VERSION)).zip
|
||||
LIBFREEIMAGE_LICENSE = GPL-2.0 or GPL-3.0 or FreeImage Public License
|
||||
LIBFREEIMAGE_LICENSE_FILES = license-gplv2.txt license-gplv3.txt license-fi.txt
|
||||
LIBFREEIMAGE_CPE_ID_VENDOR = freeimage_project
|
||||
LIBFREEIMAGE_CPE_ID_PRODUCT = freeimage
|
||||
LIBFREEIMAGE_INSTALL_STAGING = YES
|
||||
|
||||
# 0007-CVE-2019-12211_2019-12213.patch
|
||||
LIBFREEIMAGE_IGNORE_CVES += CVE-2019-12211 CVE-2019-12213
|
||||
|
||||
# 0008-CVE-2020-24292.patch
|
||||
LIBFREEIMAGE_IGNORE_CVES += CVE-2020-24292
|
||||
|
||||
# 0009-CVE-2020-24293.patch
|
||||
LIBFREEIMAGE_IGNORE_CVES += CVE-2020-24293
|
||||
|
||||
# 0010-CVE-2020-24295.patch
|
||||
LIBFREEIMAGE_IGNORE_CVES += CVE-2020-24295
|
||||
|
||||
# 0011-CVE-2021-33367.patch
|
||||
LIBFREEIMAGE_IGNORE_CVES += CVE-2021-33367
|
||||
|
||||
# 0012-CVE-2021-40263.patch
|
||||
LIBFREEIMAGE_IGNORE_CVES += CVE-2021-40263
|
||||
|
||||
# 0013-CVE-2021-40266.patch
|
||||
LIBFREEIMAGE_IGNORE_CVES += CVE-2021-40266
|
||||
|
||||
# 0014-CVE-2023-47995.patch
|
||||
LIBFREEIMAGE_IGNORE_CVES += CVE-2023-47995
|
||||
|
||||
# 0016-CVE-2023-47997.patch
|
||||
LIBFREEIMAGE_IGNORE_CVES += CVE-2023-47997
|
||||
|
||||
define LIBFREEIMAGE_EXTRACT_CMDS
|
||||
$(UNZIP) $(LIBFREEIMAGE_DL_DIR)/$(LIBFREEIMAGE_SOURCE) -d $(@D)
|
||||
mv $(@D)/FreeImage/* $(@D)
|
||||
rmdir $(@D)/FreeImage
|
||||
endef
|
||||
|
||||
define LIBFREEIMAGE_BUILD_CMDS
|
||||
$(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) \
|
||||
CXXFLAGS="$(TARGET_CXXFLAGS) -std=c++11" $(MAKE) -C $(@D)
|
||||
endef
|
||||
|
||||
define LIBFREEIMAGE_INSTALL_STAGING_CMDS
|
||||
$(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(STAGING_DIR) install
|
||||
endef
|
||||
|
||||
define LIBFREEIMAGE_INSTALL_TARGET_CMDS
|
||||
$(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) install
|
||||
endef
|
||||
|
||||
$(eval $(generic-package))
|
||||
Reference in New Issue
Block a user