diff --git a/MagickCore/cache-private.h b/MagickCore/cache-private.h
index b09145b..118a5a5 100644
--- a/MagickCore/cache-private.h
+++ b/MagickCore/cache-private.h
@@ -129,6 +129,9 @@
metacontent_extent,
number_channels;
+ PixelChannelMap
+ channel_map[MaxPixelChannels];
+
CacheType
type;
diff --git a/MagickCore/cache.c b/MagickCore/cache.c
index 026bdaf..2034e3d 100644
--- a/MagickCore/cache.c
+++ b/MagickCore/cache.c
@@ -1191,13 +1191,22 @@
static MagickBooleanType ClonePixelCachePixels(CacheInfo *clone_info,
CacheInfo *cache_info,ExceptionInfo *exception)
{
+ PixelChannelMap
+ *p,
+ *q;
+
if (cache_info->type == PingCache)
return(MagickTrue);
+ p=cache_info->channel_map;
+ q=clone_info->channel_map;
if ((cache_info->columns == clone_info->columns) &&
(cache_info->rows == clone_info->rows) &&
(cache_info->number_channels == clone_info->number_channels) &&
+ (memcmp(p,q,cache_info->number_channels*sizeof(*p)) == 0) &&
(cache_info->metacontent_extent == clone_info->metacontent_extent))
return(OptimizedPixelCacheClone(clone_info,cache_info,exception));
+ if (memcmp(p,q,cache_info->number_channels*sizeof(*p)) != 0)
+ ;
return(UnoptimizedPixelCacheClone(clone_info,cache_info,exception));
}
@@ -4005,6 +4014,8 @@
cache_info->columns=image->columns;
InitializePixelChannelMap(image);
cache_info->number_channels=GetPixelChannels(image);
+ (void) memcpy(cache_info->channel_map,image->channel_map,
+ cache_info->number_channels*sizeof(*image->channel_map));
cache_info->metacontent_extent=image->metacontent_extent;
cache_info->mode=mode;
if (image->ping != MagickFalse)
diff --git a/coders/jp2.c b/coders/jp2.c
index de03feb..fcae3b6 100644
--- a/coders/jp2.c
+++ b/coders/jp2.c
@@ -1010,6 +1010,8 @@
}
status=jas_image_encode(jp2_image,jp2_stream,format,options) != 0 ?
MagickTrue : MagickFalse;
+ if (options != (char *) NULL)
+ options=DestroyString(options);
(void) jas_stream_close(jp2_stream);
for (i=0; i < (ssize_t) number_components; i++)
jas_matrix_destroy(pixels[i]);