Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 460466 Details for
Bug 571654
media-libs/libafterimage-1.20: build fails against >=media-libs/giflib-5.0 due to incompatible API changes
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch to fix implicit bad cast, causing segmentation fault
libafterimage-giflib5.patch (text/plain), 10.88 KB, created by
Oliver Freyermuth
on 2017-01-17 15:34:30 UTC
(
hide
)
Description:
Patch to fix implicit bad cast, causing segmentation fault
Filename:
MIME Type:
Creator:
Oliver Freyermuth
Created:
2017-01-17 15:34:30 UTC
Size:
10.88 KB
patch
obsolete
>diff -Naurd libAfterImage-1.20.orig/export.c libAfterImage-1.20/export.c >--- libAfterImage-1.20.orig/export.c 2016-05-01 11:44:19.000000000 +0300 >+++ libAfterImage-1.20/export.c 2016-05-02 10:57:59.688984491 +0300 >@@ -1048,6 +1048,9 @@ > Bool new_image = True ; > START_TIME(started); > int cmap_size = 1; >+#if (GIFLIB_MAJOR>=5) >+ int errcode; >+#endif > #define GIF_NETSCAPE_EXT_BYTES 3 > unsigned char netscape_ext_bytes[GIF_NETSCAPE_EXT_BYTES] = { 0x1, 0x0, 0x0}; > #define GIF_GCE_BYTES 4 >@@ -1086,10 +1089,18 @@ > > while( cmap_size < 256 && cmap_size < (int)cmap.count+(gce_bytes[0]&0x01) ) > cmap_size = cmap_size<<1 ; >+#if (GIFLIB_MAJOR>=5) >+ if( (gif_cmap = GifMakeMapObject(cmap_size, NULL )) == NULL ) >+#else > if( (gif_cmap = MakeMapObject(cmap_size, NULL )) == NULL ) >+#endif > { > free( mapped_im ); >+#if (GIFLIB_MAJOR>=5) >+ ASIM_PrintGifError(E_GIF_ERR_NOT_ENOUGH_MEM); >+#else > ASIM_PrintGifError(); >+#endif > return False; > } > memcpy( &(gif_cmap->Colors[0]), &(cmap.entries[0]), MIN(cmap.count,(unsigned int)cmap_size)*3 ); >@@ -1101,13 +1112,25 @@ > SavedImage *images = NULL ; > int count = 0 ; > /* TODO: do something about multiimage files !!! */ >+#if (GIFLIB_MAJOR>=5) >+ gif = open_gif_read(infile, &errcode); >+#else > gif = open_gif_read(infile); >+#endif > if( gif == NULL || get_gif_saved_images(gif, -1, &images, &count) == GIF_ERROR) > { >+#if (GIFLIB_MAJOR>=5) >+ ASIM_PrintGifError(errcode); >+#else > ASIM_PrintGifError(); >+#endif > if( gif ) > { >+#if (GIFLIB_MAJOR>=5) >+ DGifCloseFile(gif, &errcode); >+#else > DGifCloseFile(gif); >+#endif > gif = NULL ; > } > if (infile) >@@ -1123,14 +1146,22 @@ > gif_src = *gif ; > gif->SColorMap = NULL ; > gif->Image.ColorMap = NULL ; >+#if (GIFLIB_MAJOR>=5) >+ DGifCloseFile(gif, &errcode); >+#else > DGifCloseFile(gif); >+#endif > gif = NULL; > fclose (infile); > infile = NULL; > outfile = open_writeable_image_file( path ); > > if (outfile) >+#if (GIFLIB_MAJOR>=5) >+ gif = EGifOpenFileHandle(fileno(outfile), &errcode); >+#else > gif = EGifOpenFileHandle(fileno(outfile)); >+#endif > > if (gif) > { >@@ -1141,26 +1172,46 @@ > gif_src.SColorMap )) == GIF_OK ) > status = write_gif_saved_images( gif, images, count ); > if( status != GIF_OK ) >+#if (GIFLIB_MAJOR>=5) >+ ASIM_PrintGifError(status); >+#else > ASIM_PrintGifError(); >+#endif > } > if (gif_src.SColorMap) > { /* we only want to save private colormap if it is any different from > * screen colormap ( saves us 768 bytes per image ) */ > if( gif_cmap->ColorCount == gif_src.SColorMap->ColorCount ) > dont_save_cmap = ( memcmp( gif_cmap->Colors, gif_src.SColorMap->Colors, gif_cmap->ColorCount*sizeof(GifColorType)) == 0 ); >+#if (GIFLIB_MAJOR>=5) >+ GifFreeMapObject(gif_src.SColorMap); >+#else > FreeMapObject(gif_src.SColorMap); >+#endif > } > if (gif) > { > EGifPutExtension(gif, GRAPHICS_EXT_FUNC_CODE, GIF_GCE_BYTES, &(gce_bytes[0])); > if( get_flags( params->gif.flags, EXPORT_ANIMATION_REPEATS ) ) > { >+#if (GIFLIB_MAJOR>=5) >+ EGifPutExtensionLeader(gif, APPLICATION_EXT_FUNC_CODE); >+ EGifPutExtensionBlock(gif, 11, "NETSCAPE2.0"); >+ EGifPutExtensionBlock(gif, GIF_NETSCAPE_EXT_BYTES, &(netscape_ext_bytes[0])); >+ EGifPutExtensionTrailer(gif); >+#else > EGifPutExtensionFirst(gif, APPLICATION_EXT_FUNC_CODE, 11, "NETSCAPE2.0"); > EGifPutExtensionLast(gif, 0, GIF_NETSCAPE_EXT_BYTES, &(netscape_ext_bytes[0])); >+#endif > } > >+#if (GIFLIB_MAJOR>=5) >+ if( (errcode = EGifPutImageDesc(gif, 0, 0, im->width, im->height, false, (dont_save_cmap)?NULL:gif_cmap )) == GIF_ERROR ) >+ ASIM_PrintGifError(errcode); >+#else > if( EGifPutImageDesc(gif, 0, 0, im->width, im->height, FALSE, (dont_save_cmap)?NULL:gif_cmap ) == GIF_ERROR ) > ASIM_PrintGifError(); >+#endif > } > } > free_gif_saved_images( images, count ); >@@ -1172,24 +1223,46 @@ > outfile = open_writeable_image_file(path); > > if (outfile) >+ { >+#if (GIFLIB_MAJOR>=5) >+ gif = EGifOpenFileHandle(fileno(outfile), &errcode); >+ if (errcode != E_GIF_SUCCEEDED) >+ ASIM_PrintGifError(errcode); >+#else > if ((gif = EGifOpenFileHandle(fileno(outfile))) == NULL) > ASIM_PrintGifError(); >+#endif >+ } > } > > if( new_image && gif ) > { >+#if (GIFLIB_MAJOR>=5) >+ if( (errcode = EGifPutScreenDesc(gif, im->width, im->height, cmap_size, 0, gif_cmap )) == GIF_ERROR ) >+ ASIM_PrintGifError(errcode); >+#else > if( EGifPutScreenDesc(gif, im->width, im->height, cmap_size, 0, gif_cmap ) == GIF_ERROR ) > ASIM_PrintGifError(); >+#endif > > EGifPutExtension(gif, 0xf9, GIF_GCE_BYTES, &(gce_bytes[0])); > >+#if (GIFLIB_MAJOR>=5) >+ if( (errcode = EGifPutImageDesc(gif, 0, 0, im->width, im->height, false, NULL )) == GIF_ERROR ) >+ ASIM_PrintGifError(errcode); >+#else > if( EGifPutImageDesc(gif, 0, 0, im->width, im->height, FALSE, NULL ) == GIF_ERROR ) > ASIM_PrintGifError(); >+#endif > } > > if( gif_cmap ) > { >+#if (GIFLIB_MAJOR>=5) >+ GifFreeMapObject(gif_cmap); >+#else > FreeMapObject(gif_cmap); >+#endif > gif_cmap = NULL ; > } > if( gif ) >@@ -1203,12 +1276,23 @@ > register int *src = mapped_im + x*y; > while( --x >= 0 ) > row_pointer[x] = src[x] ; >+#if (GIFLIB_MAJOR>=5) >+ if( (errcode = EGifPutLine(gif, row_pointer, im->width)) == GIF_ERROR) >+ ASIM_PrintGifError(errcode); >+#else > if( EGifPutLine(gif, row_pointer, im->width) == GIF_ERROR) > ASIM_PrintGifError(); >+#endif > } > free( row_pointer ); >+#if (GIFLIB_MAJOR>=5) >+ EGifCloseFile(gif, &errcode); >+ if (errcode != E_GIF_SUCCEEDED) >+ ASIM_PrintGifError(errcode); >+#else > if (EGifCloseFile(gif) == GIF_ERROR) > ASIM_PrintGifError(); >+#endif > gif = NULL; > } > free( mapped_im ); >diff -Naurd libAfterImage-1.20.orig/import.c libAfterImage-1.20/import.c >--- libAfterImage-1.20.orig/import.c 2016-05-01 11:44:19.000000000 +0300 >+++ libAfterImage-1.20/import.c 2016-05-02 11:01:58.979496755 +0300 >@@ -2178,6 +2178,9 @@ > int transparent = -1 ; > unsigned int y; > unsigned int width = 0, height = 0; >+#if (GIFLIB_MAJOR>=5) >+ int errcode; >+#endif > ColorMapObject *cmap = NULL ; > > START_TIME(started); >@@ -2186,7 +2189,11 @@ > > if ((fp = open_image_file(path)) == NULL) > return NULL; >+#if (GIFLIB_MAJOR>=5) >+ if( (gif = open_gif_read(fp, &errcode)) != NULL ) >+#else > if( (gif = open_gif_read(fp)) != NULL ) >+#endif > { > SavedImage *sp = NULL ; > int count = 0 ; >@@ -2289,13 +2296,21 @@ > } > free_gif_saved_images( sp, count ); > }else if( status != GIF_OK ) >+#if (GIFLIB_MAJOR>=5) >+ ASIM_PrintGifError(status); >+#else > ASIM_PrintGifError(); >+#endif > else if( params->subimage == -1 ) > show_error( "Image file \"%s\" does not have any valid image information.", path ); > else > show_error( "Image file \"%s\" does not have subimage %d.", path, params->subimage ); > >+#if (GIFLIB_MAJOR>=5) >+ DGifCloseFile(gif, &errcode); >+#else > DGifCloseFile(gif); >+#endif > fclose( fp ); > } > SHOW_TIME("image loading",started); >diff -Naurd libAfterImage-1.20.orig/ungif.c libAfterImage-1.20/ungif.c >--- libAfterImage-1.20.orig/ungif.c 2011-01-15 08:52:22.000000000 +0300 >+++ libAfterImage-1.20/ungif.c 2016-05-02 16:03:57.590148737 +0300 >@@ -75,13 +75,21 @@ > if( sp ) > { > if (sp->ImageDesc.ColorMap) >+#if (GIFLIB_MAJOR>=5) >+ GifFreeMapObject(sp->ImageDesc.ColorMap); >+#else > FreeMapObject(sp->ImageDesc.ColorMap); >+#endif > > if (sp->RasterBits) > free((char *)sp->RasterBits); > > if (sp->ExtensionBlocks) >+#if (GIFLIB_MAJOR>=5) >+ GifFreeExtensions(&sp->ExtensionBlockCount, &sp->ExtensionBlocks); >+#else > FreeExtension(sp); >+#endif > > if( !reusable ) > free( sp ); >@@ -119,11 +127,19 @@ > return ret; > } > >+#if (GIFLIB_MAJOR>=5) >+GifFileType* >+open_gif_read( FILE *in_stream, int *errcode ) >+{ >+ return DGifOpen(in_stream, fread_gif, errcode); >+} >+#else > GifFileType* > open_gif_read( FILE *in_stream ) > { > return DGifOpen(in_stream, fread_gif); > } >+#endif > > int > get_gif_image_desc( GifFileType *gif, SavedImage *im ) >@@ -151,7 +167,11 @@ > memcpy( &(im->ImageDesc), &(gif->Image), sizeof(GifImageDesc)); > if( gif->Image.ColorMap ) > { >+#if (GIFLIB_MAJOR>=5) >+ im->ImageDesc.ColorMap = GifMakeMapObject(gif->Image.ColorMap->ColorCount, NULL); >+#else > im->ImageDesc.ColorMap = MakeMapObject(gif->Image.ColorMap->ColorCount, NULL); >+#endif > fseek( gif->UserData, start_pos+9, SEEK_SET ); > fread( im->ImageDesc.ColorMap->Colors, 1, gif->Image.ColorMap->ColorCount*3, gif->UserData); > fseek( gif->UserData, end_pos, SEEK_SET ); >@@ -166,6 +186,9 @@ > { > GifRecordType RecordType; > GifByteType *ExtData; >+#if (GIFLIB_MAJOR>=5) >+ int ExtCode; >+#endif > SavedImage temp_save; > int curr_image = 0, ret_count = *ret_images ; > int status = GIF_OK; >@@ -197,13 +220,23 @@ > break; > > case EXTENSION_RECORD_TYPE: >+#if (GIFLIB_MAJOR>=5) >+ status = DGifGetExtension(gif,&ExtCode,&ExtData); >+#else > status = DGifGetExtension(gif,&temp_save.Function,&ExtData); >+#endif > while (ExtData != NULL && status == GIF_OK ) > { > /* Create an extension block with our data */ >+#if (GIFLIB_MAJOR>=5) >+ if ((status = GifAddExtensionBlock(&temp_save.ExtensionBlockCount, &temp_save.ExtensionBlocks, >+ ExtCode, sizeof(ExtData), ExtData)) == GIF_OK) >+ status = DGifGetExtension(gif,&ExtCode,&ExtData); >+#else > if ((status = AddExtensionBlock(&temp_save, ExtData[0], (char*)&(ExtData[1]))) == GIF_OK) > status = DGifGetExtensionNext(gif, &ExtData); > temp_save.Function = 0; >+#endif > } > break; > >diff -Naurd libAfterImage-1.20.orig/ungif.h libAfterImage-1.20/ungif.h >--- libAfterImage-1.20.orig/ungif.h 2011-01-15 08:52:22.000000000 +0300 >+++ libAfterImage-1.20/ungif.h 2016-05-02 10:57:59.715983533 +0300 >@@ -7,11 +7,29 @@ > extern "C" { > #endif > >+#if ((GIFLIB_MAJOR==4) && (GIFLIB_MINOR>=2)) >+static inline void PrintGifError(void) { >+ fprintf(stderr, "%s\n", GifErrorString()); >+} >+#elif (GIFLIB_MAJOR>=5) >+static inline void PrintGifError(int code) { >+ fprintf(stderr, "%s\n", GifErrorString(code)); >+} >+#endif >+ >+#if (GIFLIB_MAJOR>=5) >+#ifdef __GNUC__ >+#define ASIM_PrintGifError(code) do{ fprintf( stderr, "%s():%d:<%s> ",__FUNCTION__, __LINE__, path?path:"null" ); PrintGifError(code); }while(0) >+#else >+#define ASIM_PrintGifError(code) do{ PrintGifError(code); }while(0) >+#endif >+#else // (GIFLIB_MAJOR>=5) > #ifdef __GNUC__ > #define ASIM_PrintGifError() do{ fprintf( stderr, "%s():%d:<%s> ",__FUNCTION__, __LINE__, path?path:"null" ); PrintGifError(); }while(0) > #else > #define ASIM_PrintGifError() do{ PrintGifError(); }while(0) > #endif >+#endif // (GIFLIB_MAJOR>=5) > > #define GIF_GCE_DELAY_BYTE_LOW 1 > #define GIF_GCE_DELAY_BYTE_HIGH 2 >@@ -24,7 +42,11 @@ > > > int fread_gif( GifFileType *gif, GifByteType* buf, int len ); >+#if (GIFLIB_MAJOR>=5) >+GifFileType* open_gif_read( FILE *in_stream, int *errcode ); >+#else > GifFileType* open_gif_read( FILE *in_stream ); >+#endif > > int get_gif_image_desc( GifFileType *gif, SavedImage *im ); >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 571654
:
422732
|
432404
|
432406
|
432408
|
432410
| 460466