1 Move the declaration from gif_lib.h to gif_lib_private.h to solve
2 conflicts when some .c-file #includes both stdlib.h and gif_lib.h.
3 See also https://sourceforge.net/p/giflib/bugs/110/
5 diff -ur giflib-5.1.4.orig/lib/dgif_lib.c giflib-5.1.4/lib/dgif_lib.c
6 --- giflib-5.1.4.orig/lib/dgif_lib.c 2018-02-28 20:31:02.294682673 +0100
7 +++ giflib-5.1.4/lib/dgif_lib.c 2018-02-28 22:38:11.659126414 +0100
10 if (GifFile->SavedImages) {
11 SavedImage* new_saved_images =
12 - (SavedImage *)reallocarray(GifFile->SavedImages,
13 + (SavedImage *)giflib_private_reallocarray(GifFile->SavedImages,
14 (GifFile->ImageCount + 1), sizeof(SavedImage));
15 if (new_saved_images == NULL) {
16 GifFile->Error = D_GIF_ERR_NOT_ENOUGH_MEM;
18 if (ImageSize > (SIZE_MAX / sizeof(GifPixelType))) {
21 - sp->RasterBits = (unsigned char *)reallocarray(NULL, ImageSize,
22 + sp->RasterBits = (unsigned char *)giflib_private_reallocarray(NULL, ImageSize,
23 sizeof(GifPixelType));
25 if (sp->RasterBits == NULL) {
26 diff -ur giflib-5.1.4.orig/lib/gifalloc.c giflib-5.1.4/lib/gifalloc.c
27 --- giflib-5.1.4.orig/lib/gifalloc.c 2018-02-28 20:31:02.294682673 +0100
28 +++ giflib-5.1.4/lib/gifalloc.c 2018-02-28 22:38:11.657126423 +0100
34 +#include "gif_lib_private.h"
36 #define MAX(x, y) (((x) > (y)) ? (x) : (y))
40 /* perhaps we can shrink the map? */
41 if (RoundUpTo < ColorUnion->ColorCount) {
42 - GifColorType *new_map = (GifColorType *)reallocarray(Map,
43 + GifColorType *new_map = (GifColorType *)giflib_private_reallocarray(Map,
44 RoundUpTo, sizeof(GifColorType));
45 if( new_map == NULL ) {
46 GifFreeMapObject(ColorUnion);
48 if (*ExtensionBlocks == NULL)
49 *ExtensionBlocks=(ExtensionBlock *)malloc(sizeof(ExtensionBlock));
51 - ExtensionBlock* ep_new = (ExtensionBlock *)reallocarray
52 + ExtensionBlock* ep_new = (ExtensionBlock *)giflib_private_reallocarray
53 (*ExtensionBlocks, (*ExtensionBlockCount + 1),
54 sizeof(ExtensionBlock));
57 if (GifFile->SavedImages == NULL)
58 GifFile->SavedImages = (SavedImage *)malloc(sizeof(SavedImage));
60 - GifFile->SavedImages = (SavedImage *)reallocarray(GifFile->SavedImages,
61 + GifFile->SavedImages = (SavedImage *)giflib_private_reallocarray(GifFile->SavedImages,
62 (GifFile->ImageCount + 1), sizeof(SavedImage));
64 if (GifFile->SavedImages == NULL)
68 /* next, the raster */
69 - sp->RasterBits = (unsigned char *)reallocarray(NULL,
70 + sp->RasterBits = (unsigned char *)giflib_private_reallocarray(NULL,
71 (CopyFrom->ImageDesc.Height *
72 CopyFrom->ImageDesc.Width),
73 sizeof(GifPixelType));
76 /* finally, the extension blocks */
77 if (sp->ExtensionBlocks != NULL) {
78 - sp->ExtensionBlocks = (ExtensionBlock *)reallocarray(NULL,
79 + sp->ExtensionBlocks = (ExtensionBlock *)giflib_private_reallocarray(NULL,
80 CopyFrom->ExtensionBlockCount,
81 sizeof(ExtensionBlock));
82 if (sp->ExtensionBlocks == NULL) {
83 diff -ur giflib-5.1.4.orig/lib/gif_lib.h giflib-5.1.4/lib/gif_lib.h
84 --- giflib-5.1.4.orig/lib/gif_lib.h 2018-02-28 20:31:02.294682673 +0100
85 +++ giflib-5.1.4/lib/gif_lib.h 2018-02-28 20:31:43.135716712 +0100
87 GifPixelType ColorTransIn2[]);
88 extern int GifBitSize(int n);
91 -reallocarray(void *optr, size_t nmemb, size_t size);
93 /******************************************************************************
94 Support for the in-core structures allocation (slurp mode).
95 ******************************************************************************/
96 diff -ur giflib-5.1.4.orig/lib/gif_lib_private.h giflib-5.1.4/lib/gif_lib_private.h
97 --- giflib-5.1.4.orig/lib/gif_lib_private.h 2018-02-28 20:31:02.294682673 +0100
98 +++ giflib-5.1.4/lib/gif_lib_private.h 2018-02-28 22:38:11.657126423 +0100
101 } GifFilePrivateType;
104 +giflib_private_reallocarray(void *optr, size_t nmemb, size_t size);
106 #endif /* _GIF_LIB_PRIVATE_H */
109 diff -ur giflib-5.1.4.orig/lib/openbsd-reallocarray.c giflib-5.1.4/lib/openbsd-reallocarray.c
110 --- giflib-5.1.4.orig/lib/openbsd-reallocarray.c 2018-02-28 20:31:02.295682659 +0100
111 +++ giflib-5.1.4/lib/openbsd-reallocarray.c 2018-02-28 22:38:11.656126428 +0100
113 #define MUL_NO_OVERFLOW ((size_t)1 << (sizeof(size_t) * 4))
116 -reallocarray(void *optr, size_t nmemb, size_t size)
117 +giflib_private_reallocarray(void *optr, size_t nmemb, size_t size)
119 if ((nmemb >= MUL_NO_OVERFLOW || size >= MUL_NO_OVERFLOW) &&
120 nmemb > 0 && SIZE_MAX / nmemb < size) {