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;
}