]> granicus.if.org Git - imagemagick/commitdiff
Avoid rare assertion for the -clone option.
authorcristy <urban-warrior@git.imagemagick.org>
Wed, 14 Jan 2015 00:55:37 +0000 (00:55 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Wed, 14 Jan 2015 00:55:37 +0000 (00:55 +0000)
MagickWand/convert.c
MagickWand/montage.c

index 9a97e660506294f346912cf5b1c661444515e388..c288bd791bff2d34f305c384df8d0904b9816cee 100644 (file)
@@ -979,28 +979,30 @@ WandExport MagickBooleanType ConvertImageCommand(ImageInfo *image_info,
         if (LocaleCompare("clone",option+1) == 0)
           {
             Image
-              *clone_images;
-
-            clone_images=image;
+              *clone_images,
+              *clone_list;
+            
+            clone_list=CloneImageList(image,exception);
             if (k != 0)
-              clone_images=image_stack[k-1].image;
-            if (clone_images == (Image *) NULL)
-              ThrowConvertException(ImageError,"UnableToCloneImage",option);
+              clone_list=CloneImageList(image_stack[k-1].image,exception);
+            if (clone_list == (Image *) NULL)
+              ThrowConvertException(ImageError,"ImageSequenceRequired",option);
             FireImageStack(MagickTrue,MagickTrue,MagickTrue);
             if (*option == '+')
-              clone_images=CloneImages(clone_images,"-1",exception);
+              clone_images=CloneImages(clone_list,"-1",exception);
             else
-              {
+              { 
                 i++;
                 if (i == (ssize_t) argc)
                   ThrowConvertException(OptionError,"MissingArgument",option);
                 if (IsSceneGeometry(argv[i],MagickFalse) == MagickFalse)
                   ThrowConvertInvalidArgumentException(option,argv[i]);
-                clone_images=CloneImages(clone_images,argv[i],exception);
+                clone_images=CloneImages(clone_list,argv[i],exception);
               }
             if (clone_images == (Image *) NULL)
               ThrowConvertException(OptionError,"NoSuchImage",option);
             AppendImageStack(clone_images);
+            clone_list=DestroyImageList(clone_list);
             break;
           }
         if (LocaleCompare("clut",option+1) == 0)
index 0790f28b3e751e69f285e1f8b93205bc082feff5..a717c44b7e7b308369564dc82ba34c70e290d9dd 100644 (file)
@@ -618,28 +618,30 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
         if (LocaleCompare("clone",option+1) == 0)
           {
             Image
-              *clone_images;
-
-            clone_images=image;
+              *clone_images,
+              *clone_list;
+            
+            clone_list=CloneImageList(image,exception);
             if (k != 0)
-              clone_images=image_stack[k-1].image;
-            if (clone_images == (Image *) NULL)
-              ThrowMontageException(ImageError,"UnableToCloneImage",option);
+              clone_list=CloneImageList(image_stack[k-1].image,exception);
+            if (clone_list == (Image *) NULL)
+              ThrowMontageException(ImageError,"ImageSequenceRequired",option);
             FireImageStack(MagickTrue,MagickTrue,MagickTrue);
             if (*option == '+')
-              clone_images=CloneImages(clone_images,"-1",exception);
+              clone_images=CloneImages(clone_list,"-1",exception);
             else
-              {
+              { 
                 i++;
                 if (i == (ssize_t) argc)
                   ThrowMontageException(OptionError,"MissingArgument",option);
                 if (IsSceneGeometry(argv[i],MagickFalse) == MagickFalse)
                   ThrowMontageInvalidArgumentException(option,argv[i]);
-                clone_images=CloneImages(clone_images,argv[i],exception);
+                clone_images=CloneImages(clone_list,argv[i],exception);
               }
             if (clone_images == (Image *) NULL)
               ThrowMontageException(OptionError,"NoSuchImage",option);
             AppendImageStack(clone_images);
+            clone_list=DestroyImageList(clone_list);
             break;
           }
         if (LocaleCompare("coalesce",option+1) == 0)