File ImageMagick-CVE-2019-13454.patch of Package ImageMagick.30356
diff --git a/MagickCore/layer.c b/MagickCore/layer.c
index b520e9247d..48632885ae 100644
--- a/MagickCore/layer.c
+++ b/MagickCore/layer.c
@@ -1584,45 +1584,47 @@ MagickExport void OptimizeImageTransparency(const Image *image,
% o exception: return any errors or warnings in this structure.
%
*/
-MagickExport void RemoveDuplicateLayers(Image **images,
- ExceptionInfo *exception)
+MagickExport void RemoveDuplicateLayers(Image **images,ExceptionInfo *exception)
{
- register Image
- *curr,
- *next;
-
RectangleInfo
bounds;
+ register Image
+ *image,
+ *next;
+
assert((*images) != (const Image *) NULL);
assert((*images)->signature == MagickCoreSignature);
if ((*images)->debug != MagickFalse)
- (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",(*images)->filename);
+ (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
+ (*images)->filename);
assert(exception != (ExceptionInfo *) NULL);
assert(exception->signature == MagickCoreSignature);
-
- curr=GetFirstImageInList(*images);
- for (; (next=GetNextImageInList(curr)) != (Image *) NULL; curr=next)
+ image=GetFirstImageInList(*images);
+ for ( ; (next=GetNextImageInList(image)) != (Image *) NULL; image=next)
{
- if ( curr->columns != next->columns || curr->rows != next->rows
- || curr->page.x != next->page.x || curr->page.y != next->page.y )
+ if ((image->columns != next->columns) || (image->rows != next->rows) ||
+ (image->page.x != next->page.x) || (image->page.y != next->page.y))
continue;
- bounds=CompareImagesBounds(curr,next,CompareAnyLayer,exception);
- if ( bounds.x < 0 ) {
- /*
- the two images are the same, merge time delays and delete one.
- */
- size_t time;
- time = curr->delay*1000/curr->ticks_per_second;
- time += next->delay*1000/next->ticks_per_second;
- next->ticks_per_second = 100L;
- next->delay = time*curr->ticks_per_second/1000;
- next->iterations = curr->iterations;
- *images = curr;
- (void) DeleteImageFromList(images);
- }
+ bounds=CompareImagesBounds(image,next,CompareAnyLayer,exception);
+ if (bounds.x < 0)
+ {
+ /*
+ Two images are the same, merge time delays and delete one.
+ */
+ size_t
+ time;
+
+ time=1000*image->delay*PerceptibleReciprocal(image->ticks_per_second);
+ time+=1000*next->delay*PerceptibleReciprocal(next->ticks_per_second);
+ next->ticks_per_second=100L;
+ next->delay=time*image->ticks_per_second/1000;
+ next->iterations=image->iterations;
+ *images=image;
+ (void) DeleteImageFromList(images);
+ }
}
- *images = GetFirstImageInList(*images);
+ *images=GetFirstImageInList(*images);
}
/*