GraphicsMagick: WPG: ExtractPostscript() - Restore previous impl...
GraphicsMagick Commits <[email protected]> Mon, 06 Nov 2023 07:48:01 -0600
| Newsgroups | gmane.comp.video.graphicsmagick.cvs |
|---|---|
| Message-ID | <mailman.14532.1699278496.1462.graphicsmagick-commit@lists.sourceforge.net> |
changeset 08b09e89f1c8 in /hg/GraphicsMagick details: http://hg.GraphicsMagick.org/hg/GraphicsMagick?cmd=changeset;node=08b09e89f1c8 summary: WPG: ExtractPostscript() - Restore previous implementation. diffstat: ChangeLog | 5 + VisualMagick/installer/inc/version.isx | 4 +- coders/wpg.c | 116 +++++++++++++++++++------------- magick/version.h | 4 +- www/Changelog.html | 7 + 5 files changed, 83 insertions(+), 53 deletions(-) diffs (334 lines): diff -r c6f29fba2522 -r 08b09e89f1c8 ChangeLog --- a/ChangeLog Sun Nov 05 22:39:17 2023 +0100 +++ b/ChangeLog Mon Nov 06 07:47:56 2023 -0600 @@ -1,3 +1,8 @@ +2023-11-06 Bob Friesenhahn <[email protected]> + + * coders/wpg.c (ExtractPostscript): Restore previous + implementation. + 2023-11-05 Bob Friesenhahn <[email protected]> * magick/utility.c (ExpandFilenames): Fix memory leak of existing diff -r c6f29fba2522 -r 08b09e89f1c8 VisualMagick/installer/inc/version.isx --- a/VisualMagick/installer/inc/version.isx Sun Nov 05 22:39:17 2023 +0100 +++ b/VisualMagick/installer/inc/version.isx Mon Nov 06 07:47:56 2023 -0600 @@ -10,5 +10,5 @@ #define public MagickPackageName "GraphicsMagick" #define public MagickPackageVersion "1.4" -#define public MagickPackageVersionAddendum ".020231105" -#define public MagickPackageReleaseDate "snapshot-20231105" +#define public MagickPackageVersionAddendum ".020231106" +#define public MagickPackageReleaseDate "snapshot-20231106" diff -r c6f29fba2522 -r 08b09e89f1c8 coders/wpg.c --- a/coders/wpg.c Sun Nov 05 22:39:17 2023 +0100 +++ b/coders/wpg.c Mon Nov 06 07:47:56 2023 -0600 @@ -798,7 +798,7 @@ } -static Image *ExtractPostscript(Image **image,const ImageInfo *image_info, +static Image *ExtractPostscript(Image *image,const ImageInfo *image_info, ExtendedSignedIntegralType PS_Offset, size_t PS_Size,ExceptionInfo *exception) { @@ -824,7 +824,7 @@ magick_off_t filesize; - if ((*image)->logging) + if (image->logging) (void) LogMagickEvent(CoderEvent,GetMagickModule(), "ExtractPostscript(): PS_Offset=%"MAGICK_OFF_F"d, PS_Size=%"MAGICK_SIZE_T_F"u", (magick_off_t) PS_Offset, (MAGICK_SIZE_T) PS_Size); @@ -832,30 +832,30 @@ /* Validate that claimed subordinate image data is contained in file size */ - filesize = GetBlobSize((*image)); + filesize = GetBlobSize(image); if ((PS_Offset > filesize) || ((size_t) (filesize - PS_Offset) < PS_Size)) { - if ((*image)->logging) + if (image->logging) (void) LogMagickEvent(CoderEvent,GetMagickModule(), "ExtractPostscript(): Failed to seek to PS_Offset=%"MAGICK_OFF_F"d", (magick_off_t) PS_Offset); - ThrowException(exception,CorruptImageError,UnexpectedEndOfFile,(*image)->filename); - return *image; + ThrowException(exception,CorruptImageError,UnexpectedEndOfFile,image->filename); + return image; } /* Get subordinate file header magick and use it to identify file format */ - if (SeekBlob((*image),PS_Offset,SEEK_SET) != PS_Offset) + if (SeekBlob(image,PS_Offset,SEEK_SET) != PS_Offset) { - if ((*image)->logging) + if (image->logging) (void) LogMagickEvent(CoderEvent,GetMagickModule(), "ExtractPostscript(): Failed to seek to PS_Offset=%"MAGICK_OFF_F"d", (magick_off_t) PS_Offset); - ThrowException(exception,CorruptImageError,UnexpectedEndOfFile,(*image)->filename); - return *image; + ThrowException(exception,CorruptImageError,UnexpectedEndOfFile,image->filename); + return image; } - header_magick_size = ReadBlob((*image), Min(sizeof(header_magick),PS_Size), header_magick); + header_magick_size = ReadBlob(image, Min(sizeof(header_magick),PS_Size), header_magick); format[0]='\0'; /* MagickExport MagickPassFail @@ -868,8 +868,8 @@ { (void) LogMagickEvent(CoderEvent,GetMagickModule(), "Failed to identify embedded file type!"); - ThrowException(exception,CorruptImageError,UnableToReadImageHeader,(*image)->filename); - return *image; + ThrowException(exception,CorruptImageError,UnableToReadImageHeader,image->filename); + return image; } /* @@ -879,57 +879,57 @@ { (void) LogMagickEvent(CoderEvent, GetMagickModule(), "Format \"%s\" cannot be embedded inside WPG.", format); - ThrowException(exception,CorruptImageError,UnableToReadImageHeader,(*image)->filename); - return *image; + ThrowException(exception,CorruptImageError,UnableToReadImageHeader,image->filename); + return image; } /* Restore seek offset after reading header */ - if (SeekBlob((*image),PS_Offset,SEEK_SET) != PS_Offset) + if (SeekBlob(image,PS_Offset,SEEK_SET) != PS_Offset) { - if ((*image)->logging) + if (image->logging) (void) LogMagickEvent(CoderEvent,GetMagickModule(), "ExtractPostscript(): Failed to seek to PS_Offset=%"MAGICK_OFF_F"d", (magick_off_t) PS_Offset); - ThrowException(exception,CorruptImageError,UnexpectedEndOfFile,(*image)->filename); - return *image; + ThrowException(exception,CorruptImageError,UnexpectedEndOfFile,image->filename); + return image; } /* Allocate buffer if zero-copy read is not possible. */ - if (GetBlobStreamData((*image)) == (unsigned char *) NULL) + if (GetBlobStreamData(image) == (unsigned char *) NULL) { ps_data_alloc=MagickAllocateResourceLimitedMemory(unsigned char *, PS_Size); if (ps_data_alloc == (unsigned char *) NULL) { - if ((*image)->logging) + if (image->logging) (void) LogMagickEvent(CoderEvent,GetMagickModule(), "ExtractPostscript(): Failed to allocate " "%"MAGICK_SIZE_T_F"u bytes of memory", (MAGICK_SIZE_T) PS_Size); - ThrowException(exception,ResourceLimitError,MemoryAllocationFailed,(*image)->filename); - return *image; + ThrowException(exception,ResourceLimitError,MemoryAllocationFailed,image->filename); + return image; } } /* Use a zero-copy read when possible to access data */ ps_data=ps_data_alloc; - if (ReadBlobZC((*image),PS_Size,&ps_data) != PS_Size) + if (ReadBlobZC(image,PS_Size,&ps_data) != PS_Size) { MagickFreeResourceLimitedMemory(ps_data_alloc); - if ((*image)->logging) + if (image->logging) (void) LogMagickEvent(CoderEvent,GetMagickModule(), "ExtractPostscript(): Failed to read %"MAGICK_SIZE_T_F"u bytes of data at" " offset=%"MAGICK_OFF_F"d", (MAGICK_SIZE_T) PS_Size, (magick_off_t) PS_Offset); - ThrowException(exception,CorruptImageError,UnexpectedEndOfFile,(*image)->filename); - return *image; /* return (Image *) NULL; */ + ThrowException(exception,CorruptImageError,UnexpectedEndOfFile,image->filename); + return image; /* return (Image *) NULL; */ } if (ps_data_alloc != ps_data) { - if ((*image)->logging) + if (image->logging) (void) LogMagickEvent(CoderEvent,GetMagickModule(), "ExtractPostscript(): Zero copy read."); } @@ -944,13 +944,13 @@ FormatString(file_name,"wpg-blob.%s",format); if ((file=fopen(file_name,"w")) != (FILE *) NULL) { - if ((*image)->logging) + if (image->logging) (void) LogMagickEvent(CoderEvent,GetMagickModule(), "Writing %s...", file_name); (void) fwrite(ps_data, 1, PS_Size, file); (void) fclose(file); } - SeekBlob((*image),PS_Offset,SEEK_SET); + SeekBlob(image,PS_Offset,SEEK_SET); } #endif /* @@ -959,7 +959,7 @@ if ((clone_info=CloneImageInfo(image_info)) == NULL) { MagickFreeResourceLimitedMemory(ps_data_alloc); - return(*image); + return(image); } clone_info->blob=(void *) NULL; /* clone_info->length=0; */ @@ -967,7 +967,7 @@ (void) strlcpy(clone_info->filename, "", sizeof(clone_info->filename)); (void) LogMagickEvent(CoderEvent,GetMagickModule(), "Reading embedded \"%s\" content from blob...", clone_info->magick); - image2 = BlobToImage(clone_info, ps_data, PS_Size, &(*image)->exception ); + image2 = BlobToImage(clone_info, ps_data, PS_Size, &image->exception ); MagickFreeResourceLimitedMemory(ps_data_alloc); if (!image2) { @@ -975,7 +975,7 @@ } if(exception->severity >= ErrorException) /* When exception is raised, destroy image2 read. */ { - if((*image)->logging) + if(image->logging) (void) LogMagickEvent(CoderEvent,GetMagickModule(), "Exception raised during embedded image reading."); CloseBlob(image2); DestroyImageList(image2); @@ -983,7 +983,7 @@ } if(!GetPixelCachePresent(image2)) { - if((*image)->logging) + if(image->logging) (void) LogMagickEvent(CoderEvent,GetMagickModule(), "Pixel cache is missing for embedded image."); CloseBlob(image2); DestroyImageList(image2); @@ -999,25 +999,43 @@ p = image2; do { - (void) strlcpy(p->filename,(*image)->filename,MaxTextExtent); - (void) strlcpy(p->magick_filename,(*image)->magick_filename,MaxTextExtent); - (void) strlcpy(p->magick,(*image)->magick,MaxTextExtent); - + (void) strlcpy(p->filename,image->filename,MaxTextExtent); + (void) strlcpy(p->magick_filename,image->magick_filename,MaxTextExtent); + (void) strlcpy(p->magick,image->magick,MaxTextExtent); + /*image2->depth=image->depth;*/ /* !!!! The image2 depth should not be modified here. Image2 is completely different. */ DestroyBlob(p); - p->blob = ReferenceBlob((*image)->blob); - p = p->next; - } while (p != NULL); + + if(p->rows==0 || p->columns==0) + { + DeleteImageFromList(&p); + if(p==NULL) + { + image2 = NULL; + goto FINISH_UNL; /* Nothing to add, skip. */ + } + } + else + { + p->blob = ReferenceBlob(image->blob); + p = p->next; + } + } while(p!=NULL); } - DeleteImageFromList(image); - AppendImageToList(image,image2); /* This should append list 'image2' to the list 'image', image2 accepts NULL. */ - *image=GetLastImageInList(*image); /* Rewind the cursor to the end. */ + + if((image->rows==0 || image->columns==0) && (image->previous!=NULL || image->next!=NULL)) + { + DeleteImageFromList(&image); + } + + AppendImageToList(&image,image2); /* This should append list 'image2' to the list 'image', image2 accepts NULL. */ + while(image->next != NULL) + image = image->next; /* Rewind the cursor to the end. */ FINISH_UNL: DestroyImageInfo(clone_info); - return(*image); + return(image); } - int EnsureNextImage(const ImageInfo *image_info, Image **pp_image) { if(pp_image==NULL) return -1; @@ -1422,7 +1440,7 @@ case 0x11: /* Start PS l1 */ if(Rec.RecordLength > 8) - image=ExtractPostscript(&image,image_info, + image=ExtractPostscript(image,image_info, TellBlob(image)+8, /* skip PS header in the wpg */ (size_t) (Rec.RecordLength-8),exception); break; @@ -1599,7 +1617,7 @@ case 0x1B: /* Postscript l2 */ if(Rec.RecordLength>0x3C) - image=ExtractPostscript(&image,image_info, + image=ExtractPostscript(image,image_info, TellBlob(image)+0x3C, /* skip PS l2 header in the wpg */ (size_t) (Rec.RecordLength-0x3C),exception); break; @@ -1834,7 +1852,7 @@ case 0x12: /* Postscript WPG2*/ i=ReadBlobLSBShort(image); if(Rec2.RecordLength > ((unsigned long) i+2)) - image=ExtractPostscript(&image,image_info, + image=ExtractPostscript(image,image_info, TellBlob(image)+i, /*skip PS header in the wpg2*/ (size_t)Rec2.RecordLength-i-2,exception); break; diff -r c6f29fba2522 -r 08b09e89f1c8 magick/version.h --- a/magick/version.h Sun Nov 05 22:39:17 2023 +0100 +++ b/magick/version.h Mon Nov 06 07:47:56 2023 -0600 @@ -38,8 +38,8 @@ #define MagickLibVersion 0x272404 #define MagickLibVersionText "1.4" #define MagickLibVersionNumber 27,24,4 -#define MagickChangeDate "20231105" -#define MagickReleaseDate "snapshot-20231105" +#define MagickChangeDate "20231106" +#define MagickReleaseDate "snapshot-20231106" /* The MagickLibInterfaceNewest and MagickLibInterfaceOldest defines diff -r c6f29fba2522 -r 08b09e89f1c8 www/Changelog.html --- a/www/Changelog.html Sun Nov 05 22:39:17 2023 +0100 +++ b/www/Changelog.html Mon Nov 06 07:47:56 2023 -0600 @@ -37,6 +37,13 @@ </div> <div class="document"> +<p>2023-11-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p> +<blockquote> +<ul class="simple"> +<li><p>coders/wpg.c (ExtractPostscript): Restore previous +implementation.</p></li> +</ul> +</blockquote> <p>2023-11-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p> <blockquote> <ul class="simple">