From 104b6c96a4d7cd159f234a8f8fa1b4649b1d7286 Mon Sep 17 00:00:00 2001 From: dirk Date: Sat, 27 Aug 2016 21:58:06 +0200 Subject: [PATCH] Added define 'psd:additional-info' to preserve the additional information in a PSD file. --- ChangeLog | 4 ++++ coders/psd.c | 19 ++++++++++++++----- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 620708dfa..4d389dbe0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,10 @@ 2016-08-27 7.0.2-10 Cristy * Release ImageMagick version 7.0.2-10, GIT revision 18750:e3335b3:20160827. +2016-08-27 7.0.2-10 Dirk Lemstra + * Added define 'psd:additional-info' to preserve the additional information + in a PSD file. + 2016-08-15 7.0.2-10 Cristy * Prevent buffer overflow in BMP & SGI coders (bug report from pwchen&rayzhong of tencent). diff --git a/coders/psd.c b/coders/psd.c index 4d8284154..640349932 100644 --- a/coders/psd.c +++ b/coders/psd.c @@ -84,7 +84,7 @@ */ #define MaxPSDChannels 56 #define PSDQuantum(x) (((ssize_t) (x)+1) & -2) -#define PSDAdditionalInfo "PSDInfo" +#define PSDAdditionalInfo "psd:additional-info" /* Enumerated declaractions. @@ -2653,8 +2653,8 @@ static void RemoveResolutionFromResourceBlock(StringInfo *bim_profile) } } -static const StringInfo *FilterAdditionalLayerInformation(Image *image, - ExceptionInfo *exception) +static const StringInfo *GetAdditionalInformation(const ImageInfo *image_info, + Image *image,ExceptionInfo *exception) { #define PSDKeySize 5 #define PSDAllowedLength 36 @@ -2669,7 +2669,8 @@ static const StringInfo *FilterAdditionalLayerInformation(Image *image, "GdFl", "grdm", "hue ", "hue2", "infx", "knko", "lclr", "levl", "lnsr", "lfx2", "luni", "lrFX", "lspf", "lyid", "lyvr", "mixr", "nvrt", "phfl", "post", "PtFl", "selc", "shpa", "sn2P", "SoCo", "thrs", "tsly", "vibA" - }; + }, + *option; const StringInfo *info; @@ -2696,6 +2697,14 @@ static const StringInfo *FilterAdditionalLayerInformation(Image *image, info=GetImageProfile(image,PSDAdditionalInfo); if (info == (const StringInfo *) NULL) return((const StringInfo *) NULL); + option=GetImageOption(image_info,"psd:additional-info"); + if (LocaleCompare(option,"all") == 0) + return(info); + if (LocaleCompare(option,"selective") != 0) + { + profile=RemoveImageProfile(image,PSDAdditionalInfo); + return(DestroyStringInfo(profile)); + } length=GetStringInfoLength(info); p=GetStringInfoDatum(info); remaining_length=length; @@ -2955,7 +2964,7 @@ static MagickBooleanType WritePSDImage(const ImageInfo *image_info, layer_length=strlen(property); layer_info_size+=8+layer_length+(4-(layer_length % 4)); } - info=FilterAdditionalLayerInformation(next_image,exception); + info=GetAdditionalInformation(image_info,next_image,exception); if (info != (const StringInfo *) NULL) layer_info_size+=GetStringInfoLength(info); layer_count++; -- 2.40.0