Commit 1a0d1b71f for imagemagick.org

commit 1a0d1b71f7b7f1c1900e23ea246ab9dc9d78a184
Author: Cristy <urban-warrior@imagemagick.org>
Date:   Sat Sep 5 14:38:12 2026 -0400

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

diff --git a/MagickCore/utility-private.h b/MagickCore/utility-private.h
index 74e867353..288fcc761 100644
--- a/MagickCore/utility-private.h
+++ b/MagickCore/utility-private.h
@@ -93,6 +93,36 @@ static inline MagickBooleanType is_symlink_utf8(const char *path)
 #endif
 }

+static inline int link_utf8(const char *source,const char *destination)
+{
+  int
+    status;
+
+#if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(__CYGWIN__)
+  wchar_t
+    *wide_source,
+    *wide_dest;
+
+  wide_source=ConvertUTF8ToUTF16(source);
+  wide_dest=ConvertUTF8ToUTF16(destination);
+  if ((wide_source == (wchar_t *) NULL) || (wide_dest == (wchar_t *) NULL))
+    {
+      if (wide_source != (wchar_t *) NULL)
+        free(wide_source);
+      if (wide_dest != (wchar_t *) NULL)
+        free(wide_dest);
+      errno=EINVAL;
+      return(-1);
+    }
+  status=_wlink(wide_source,wide_dest);
+  free(wide_source);
+  free(wide_dest);
+#else
+  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;
@@ -141,7 +171,6 @@ static inline ssize_t MagickWrite(int fd,const void *buffer,size_t extent)
   return((ssize_t) offset);
 }

-
 static inline int open_utf8(const char *path,int flags,mode_t mode)
 {
 #if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__)
diff --git a/MagickWand/mogrify.c b/MagickWand/mogrify.c
index f62076f12..20bbc5370 100644
--- a/MagickWand/mogrify.c
+++ b/MagickWand/mogrify.c
@@ -3916,9 +3916,11 @@ WandExport MagickBooleanType MogrifyImageCommand(ImageInfo *image_info,
               if (IsPathAccessible(backup_filename) == MagickFalse)
                 break;
             }
-            if ((IsPathAccessible(backup_filename) != MagickFalse) ||
-                (rename_utf8(image->filename,backup_filename) != 0))
-              *backup_filename='\0';
+          if ((IsPathAccessible(backup_filename) != MagickFalse) ||
+               (rename_utf8(image->filename,backup_filename) != 0))
+             *backup_filename='\0';
+           else
+             (void) link_utf8(backup_filename,image->filename);
           }
         /*
           Write transmogrified image to disk.
@@ -3938,7 +3940,10 @@ WandExport MagickBooleanType MogrifyImageCommand(ImageInfo *image_info,
                 (void) set_file_timestamp(image->filename,&properties);
             }
             if (*backup_filename != '\0')
-              (void) remove_utf8(backup_filename);
+              {
+                (void) remove_utf8(image->filename);
+                (void) remove_utf8(backup_filename);
+              }
           }
         else
           if (*backup_filename != '\0')