From: cristy Date: Tue, 22 Jan 2013 00:36:18 +0000 (+0000) Subject: (no commit message) X-Git-Tag: 7.0.1-0~4398 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=36601075aa5592898c1e7348eddfca3105707bf9;p=imagemagick --- diff --git a/MagickCore/cache.c b/MagickCore/cache.c index a60322488..1b983d103 100644 --- a/MagickCore/cache.c +++ b/MagickCore/cache.c @@ -521,14 +521,36 @@ static MagickBooleanType ClonePixelCacheRepository(CacheInfo *clone_info, ssize_t y; - /* - Clone pixels. - */ assert(cache_info != (CacheInfo *) NULL); assert(clone_info != (CacheInfo *) NULL); assert(exception != (ExceptionInfo *) NULL); if (cache_info->type == PingCache) return(MagickTrue); + length=cache_info->number_channels*sizeof(*cache_info->channel_map); + if (((cache_info->type == MemoryCache) || (cache_info->type == MapCache)) && + ((clone_info->type == MemoryCache) || (clone_info->type == MapCache)) && + (cache_info->columns == clone_info->columns) && + (cache_info->rows == clone_info->rows) && + (cache_info->number_channels == clone_info->number_channels) && + (memcmp(cache_info->channel_map,clone_info->channel_map,length) == 0)) + { + /* + Identical pixel cache morphology. + */ + (void) memcpy(clone_info->pixels,cache_info->pixels,cache_info->columns* + cache_info->number_channels*cache_info->rows* + sizeof(*cache_info->pixels)); + if ((cache_info->metacontent_extent != 0) && + (clone_info->metacontent_extent != 0) && + (cache_info->metacontent_extent == clone_info->metacontent_extent)) + (void) memcpy(clone_info->metacontent,cache_info->metacontent, + cache_info->columns*cache_info->rows* + clone_info->metacontent_extent*sizeof(*cache_info->metacontent)); + return(MagickTrue); + } + /* + Irregular pixel cache morphology. + */ cache_nexus=AcquirePixelCacheNexus(1); clone_nexus=AcquirePixelCacheNexus(1); if ((cache_nexus == (NexusInfo **) NULL) ||