Commit 72b82a8e2 for imagemagick.org

commit 72b82a8e2a0e6abf76db52f7e69b01c217f63f34
Author: Cristy <urban-warrior@imagemagick.org>
Date:   Sat Sep 5 22:16:24 2026 -0400

    https://github.com/ImageMagick/ImageMagick/issues/8939

diff --git a/MagickCore/utility-private.h b/MagickCore/utility-private.h
index 43239a8c8..887211f0c 100644
--- a/MagickCore/utility-private.h
+++ b/MagickCore/utility-private.h
@@ -93,19 +93,6 @@ static inline MagickBooleanType is_symlink_utf8(const char *path)
 #endif
 }

-static inline int link_utf8(const char *source,const char *destination)
-{
-  int
-    status = -1;
-
-  (void) source;
-  (void) destination;
-#if defined(MAGICKCORE_HAVE_LINK)
-  status=link(source,destination);
-#endif
-  return(status);
-}
-
 static inline ssize_t MagickRead(int fd,void *buffer,size_t extent)
 {
   unsigned char *p = (unsigned char *) buffer;
diff --git a/MagickWand/mogrify.c b/MagickWand/mogrify.c
index f62076f12..7b1fa2e0f 100644
--- a/MagickWand/mogrify.c
+++ b/MagickWand/mogrify.c
@@ -3905,7 +3905,7 @@ WandExport MagickBooleanType MogrifyImageCommand(ImageInfo *image_info,
             (IsPathWritable(image->filename) != MagickFalse))
           {
             /*
-              Rename image file as backup.
+              Generate a temporary filename to write the new image to.
             */
             (void) CopyMagickString(backup_filename,image->filename,
               MagickPathExtent);
@@ -3916,16 +3916,21 @@ WandExport MagickBooleanType MogrifyImageCommand(ImageInfo *image_info,
               if (IsPathAccessible(backup_filename) == MagickFalse)
                 break;
             }
-            if ((IsPathAccessible(backup_filename) != MagickFalse) ||
-                (rename_utf8(image->filename,backup_filename) != 0))
+            if (IsPathAccessible(backup_filename) != MagickFalse)
               *backup_filename='\0';
           }
         /*
           Write transmogrified image to disk.
         */
         image_info->synchronize=MagickTrue;
-        status&=(MagickStatusType) WriteImages(image_info,image,image->filename,
-          exception);
+        {
+          Image *clone_image = CloneImageList(image,exception);
+          if (clone_image != (Image *) NULL)
+            status&=(MagickStatusType) WriteImages(image_info,clone_image,
+              (*backup_filename != '\0') ? backup_filename :
+              clone_image->filename,exception);
+          clone_image=DestroyImageList(clone_image);
+        }
         if (status != MagickFalse)
           {
             {
@@ -3938,11 +3943,14 @@ WandExport MagickBooleanType MogrifyImageCommand(ImageInfo *image_info,
                 (void) set_file_timestamp(image->filename,&properties);
             }
             if (*backup_filename != '\0')
-              (void) remove_utf8(backup_filename);
+              {
+                if (rename_utf8(backup_filename,image->filename) != 0)
+                  status=MagickFalse;
+              }
           }
         else
           if (*backup_filename != '\0')
-            (void) rename_utf8(backup_filename,image->filename);
+            (void) remove_utf8(backup_filename);
         RemoveAllImageStack();
         continue;
       }