diff --git a/gnu/local.mk b/gnu/local.mk index d90d8a318d..c26d0e47d8 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -697,6 +697,7 @@ dist_patch_DATA = \ %D%/packages/patches/ghostscript-no-header-uuid.patch \ %D%/packages/patches/ghostscript-no-header-creationdate.patch \ %D%/packages/patches/ghostscript-runpath.patch \ + %D%/packages/patches/giflib-make-reallocarray-private.patch \ %D%/packages/patches/gimp-CVE-2017-17784.patch \ %D%/packages/patches/gimp-CVE-2017-17785.patch \ %D%/packages/patches/gimp-CVE-2017-17786.patch \ diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm index e3e3a3ccc7..a397189037 100644 --- a/gnu/packages/image.scm +++ b/gnu/packages/image.scm @@ -572,7 +572,9 @@ error-resilience, a Java-viewer for j2k-images, ...") version ".tar.bz2")) (sha256 (base32 - "1md83dip8rf29y40cm5r7nn19705f54iraz6545zhwa6y8zyq9yz")))) + "1md83dip8rf29y40cm5r7nn19705f54iraz6545zhwa6y8zyq9yz")) + (patches (search-patches + "giflib-make-reallocarray-private.patch")))) (build-system gnu-build-system) (outputs '("bin" ; utility programs "out")) ; library diff --git a/gnu/packages/patches/giflib-make-reallocarray-private.patch b/gnu/packages/patches/giflib-make-reallocarray-private.patch new file mode 100644 index 0000000000..69228c5be8 --- /dev/null +++ b/gnu/packages/patches/giflib-make-reallocarray-private.patch @@ -0,0 +1,120 @@ +Move the declaration from gif_lib.h to gif_lib_private.h to solve +conflicts when some .c-file #includes both stdlib.h and gif_lib.h. +See also https://sourceforge.net/p/giflib/bugs/110/ + +diff -ur giflib-5.1.4.orig/lib/dgif_lib.c giflib-5.1.4/lib/dgif_lib.c +--- giflib-5.1.4.orig/lib/dgif_lib.c 2018-02-28 20:31:02.294682673 +0100 ++++ giflib-5.1.4/lib/dgif_lib.c 2018-02-28 22:38:11.659126414 +0100 +@@ -396,7 +396,7 @@ + + if (GifFile->SavedImages) { + SavedImage* new_saved_images = +- (SavedImage *)reallocarray(GifFile->SavedImages, ++ (SavedImage *)giflib_private_reallocarray(GifFile->SavedImages, + (GifFile->ImageCount + 1), sizeof(SavedImage)); + if (new_saved_images == NULL) { + GifFile->Error = D_GIF_ERR_NOT_ENOUGH_MEM; +@@ -1108,7 +1108,7 @@ + if (ImageSize > (SIZE_MAX / sizeof(GifPixelType))) { + return GIF_ERROR; + } +- sp->RasterBits = (unsigned char *)reallocarray(NULL, ImageSize, ++ sp->RasterBits = (unsigned char *)giflib_private_reallocarray(NULL, ImageSize, + sizeof(GifPixelType)); + + if (sp->RasterBits == NULL) { +diff -ur giflib-5.1.4.orig/lib/gifalloc.c giflib-5.1.4/lib/gifalloc.c +--- giflib-5.1.4.orig/lib/gifalloc.c 2018-02-28 20:31:02.294682673 +0100 ++++ giflib-5.1.4/lib/gifalloc.c 2018-02-28 22:38:11.657126423 +0100 +@@ -8,7 +8,7 @@ + #include + #include + +-#include "gif_lib.h" ++#include "gif_lib_private.h" + + #define MAX(x, y) (((x) > (y)) ? (x) : (y)) + +@@ -188,7 +188,7 @@ + + /* perhaps we can shrink the map? */ + if (RoundUpTo < ColorUnion->ColorCount) { +- GifColorType *new_map = (GifColorType *)reallocarray(Map, ++ GifColorType *new_map = (GifColorType *)giflib_private_reallocarray(Map, + RoundUpTo, sizeof(GifColorType)); + if( new_map == NULL ) { + GifFreeMapObject(ColorUnion); +@@ -232,7 +232,7 @@ + if (*ExtensionBlocks == NULL) + *ExtensionBlocks=(ExtensionBlock *)malloc(sizeof(ExtensionBlock)); + else { +- ExtensionBlock* ep_new = (ExtensionBlock *)reallocarray ++ ExtensionBlock* ep_new = (ExtensionBlock *)giflib_private_reallocarray + (*ExtensionBlocks, (*ExtensionBlockCount + 1), + sizeof(ExtensionBlock)); + if( ep_new == NULL ) +@@ -325,7 +325,7 @@ + if (GifFile->SavedImages == NULL) + GifFile->SavedImages = (SavedImage *)malloc(sizeof(SavedImage)); + else +- GifFile->SavedImages = (SavedImage *)reallocarray(GifFile->SavedImages, ++ GifFile->SavedImages = (SavedImage *)giflib_private_reallocarray(GifFile->SavedImages, + (GifFile->ImageCount + 1), sizeof(SavedImage)); + + if (GifFile->SavedImages == NULL) +@@ -355,7 +355,7 @@ + } + + /* next, the raster */ +- sp->RasterBits = (unsigned char *)reallocarray(NULL, ++ sp->RasterBits = (unsigned char *)giflib_private_reallocarray(NULL, + (CopyFrom->ImageDesc.Height * + CopyFrom->ImageDesc.Width), + sizeof(GifPixelType)); +@@ -369,7 +369,7 @@ + + /* finally, the extension blocks */ + if (sp->ExtensionBlocks != NULL) { +- sp->ExtensionBlocks = (ExtensionBlock *)reallocarray(NULL, ++ sp->ExtensionBlocks = (ExtensionBlock *)giflib_private_reallocarray(NULL, + CopyFrom->ExtensionBlockCount, + sizeof(ExtensionBlock)); + if (sp->ExtensionBlocks == NULL) { +diff -ur giflib-5.1.4.orig/lib/gif_lib.h giflib-5.1.4/lib/gif_lib.h +--- giflib-5.1.4.orig/lib/gif_lib.h 2018-02-28 20:31:02.294682673 +0100 ++++ giflib-5.1.4/lib/gif_lib.h 2018-02-28 20:31:43.135716712 +0100 +@@ -244,9 +244,6 @@ + GifPixelType ColorTransIn2[]); + extern int GifBitSize(int n); + +-extern void * +-reallocarray(void *optr, size_t nmemb, size_t size); +- + /****************************************************************************** + Support for the in-core structures allocation (slurp mode). + ******************************************************************************/ +diff -ur giflib-5.1.4.orig/lib/gif_lib_private.h giflib-5.1.4/lib/gif_lib_private.h +--- giflib-5.1.4.orig/lib/gif_lib_private.h 2018-02-28 20:31:02.294682673 +0100 ++++ giflib-5.1.4/lib/gif_lib_private.h 2018-02-28 22:38:11.657126423 +0100 +@@ -54,6 +54,9 @@ + bool gif89; + } GifFilePrivateType; + ++extern void * ++giflib_private_reallocarray(void *optr, size_t nmemb, size_t size); ++ + #endif /* _GIF_LIB_PRIVATE_H */ + + /* end */ +diff -ur giflib-5.1.4.orig/lib/openbsd-reallocarray.c giflib-5.1.4/lib/openbsd-reallocarray.c +--- giflib-5.1.4.orig/lib/openbsd-reallocarray.c 2018-02-28 20:31:02.295682659 +0100 ++++ giflib-5.1.4/lib/openbsd-reallocarray.c 2018-02-28 22:38:11.656126428 +0100 +@@ -27,7 +27,7 @@ + #define MUL_NO_OVERFLOW ((size_t)1 << (sizeof(size_t) * 4)) + + void * +-reallocarray(void *optr, size_t nmemb, size_t size) ++giflib_private_reallocarray(void *optr, size_t nmemb, size_t size) + { + if ((nmemb >= MUL_NO_OVERFLOW || size >= MUL_NO_OVERFLOW) && + nmemb > 0 && SIZE_MAX / nmemb < size) {