summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Magne Ingebrigtsen <larsi@gnus.org>2013-08-15 21:46:02 +0200
committerLars Magne Ingebrigtsen <larsi@gnus.org>2013-08-15 21:46:02 +0200
commit7967001450f4a3e76e37355740fa942290cede26 (patch)
tree9daeb7a67d90f18f650d565a1fe6aa68d1adfcc8
parent1d18b1e6ab1aabab94554fc10e24811478346fab (diff)
downloademacs-7967001450f4a3e76e37355740fa942290cede26.tar.gz
(imagemagick_compute_animated_image): Allow certain degenerate images
(imagemagick_compute_animated_image): Allow images that say they have sub-images that are bigger than the main image, but just crop them.
-rw-r--r--src/ChangeLog3
-rw-r--r--src/image.c25
2 files changed, 15 insertions, 13 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 431802eab45..dd4697298ac 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -4,6 +4,9 @@
when sub-images are smaller than the main image.
(imagemagick_compute_animated_image): Setting the iterator row to
zero is apparently not allowed.
+ (imagemagick_compute_animated_image): Allow images that say they
+ have sub-images that are bigger than the main image, but just crop
+ them.
2013-08-15 Jan Djärv <jan.h.d@swipnet.se>
diff --git a/src/image.c b/src/image.c
index 6f92c583554..d7e1d7991dd 100644
--- a/src/image.c
+++ b/src/image.c
@@ -7900,6 +7900,7 @@ imagemagick_compute_animated_image (MagickWand *super_wand, int ino)
ssize_t source_left, source_top;
MagickPixelPacket pixel;
DisposeType dispose;
+ ptrdiff_t lines = 0;
MagickSetIteratorIndex (super_wand, i);
sub_wand = MagickGetImage (super_wand);
@@ -7907,17 +7908,6 @@ imagemagick_compute_animated_image (MagickWand *super_wand, int ino)
MagickGetImagePage (sub_wand, &source_width, &source_height,
&source_left, &source_top);
- /* Sanity check. The sub-image should not be bigger than the
- base image. */
- if (source_height + source_top > dest_height)
- {
- DestroyMagickWand (composite_wand);
- DestroyMagickWand (sub_wand);
- animation_cache = NULL;
- image_error ("Inconsinstent animation size", Qnil, Qnil);
- return NULL;
- }
-
dispose = MagickGetImageDispose (sub_wand);
source_iterator = NewPixelIterator (sub_wand);
@@ -7946,17 +7936,26 @@ imagemagick_compute_animated_image (MagickWand *super_wand, int ino)
/* The sub-image may not start at origo, so move the destination
iterator to where the sub-image should start. */
if (source_top > 0)
- PixelSetIteratorRow (dest_iterator, source_top);
+ {
+ PixelSetIteratorRow (dest_iterator, source_top);
+ lines = source_top;
+ }
while ((source = PixelGetNextIteratorRow (source_iterator, &source_width))
!= NULL)
{
ptrdiff_t x;
+
+ /* Sanity check. This shouldn't happen, but apparently
+ does in some pictures. */
+ if (++lines >= dest_height)
+ break;
+
dest = PixelGetNextIteratorRow (dest_iterator, &dest_width);
for (x = 0; x < source_width; x++)
{
/* Sanity check. This shouldn't happen, but apparently
- does in some pictures. */
+ also does in some pictures. */
if (x + source_left > dest_width)
break;
/* Normally we only copy over non-transparent pixels,