diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2017-10-16 23:44:32 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2017-10-16 23:45:31 -0700 |
commit | b38724ab675ac02dec865930a35abd8e06ee8e76 (patch) | |
tree | 80beb125a139d54fcfe60a0a4bcf608e03a7030f /src | |
parent | 20cc68e871b8903a603aa4a89d2bc648d010781a (diff) | |
download | emacs-b38724ab675ac02dec865930a35abd8e06ee8e76.tar.gz |
Work around ImageMagick bug 825
This should fix several bugs reported recently against Emacs
(Bug#28518, Bug#28626, Bug#28632, Bug#28633, Bug#28770).
* src/image.c (imagemagick_load_image):
Do not call MagickWandTerminus.
Diffstat (limited to 'src')
-rw-r--r-- | src/image.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/image.c b/src/image.c index 335a43e924d..c1c1671899b 100644 --- a/src/image.c +++ b/src/image.c @@ -8552,13 +8552,19 @@ imagemagick_load_image (struct frame *f, struct image *img, char hint_buffer[MaxTextExtent]; char *filename_hint = NULL; + /* Initialize the ImageMagick environment. */ + static bool imagemagick_initialized; + if (!imagemagick_initialized) + { + imagemagick_initialized = true; + MagickWandGenesis (); + } + /* Handle image index for image types who can contain more than one image. Interface :index is same as for GIF. First we "ping" the image to see how many sub-images it contains. Pinging is faster than loading the image to find out things about it. */ - /* Initialize the imagemagick environment. */ - MagickWandGenesis (); image = image_spec_value (img->spec, QCindex, NULL); ino = INTEGERP (image) ? XFASTINT (image) : 0; image_wand = NewMagickWand (); @@ -8859,8 +8865,10 @@ imagemagick_load_image (struct frame *f, struct image *img, DestroyMagickWand (image_wand); if (bg_wand) DestroyPixelWand (bg_wand); - /* `MagickWandTerminus' terminates the imagemagick environment. */ - MagickWandTerminus (); + /* Do not call MagickWandTerminus, to work around ImageMagick bug 825. See: + https://github.com/ImageMagick/ImageMagick/issues/825 + Although this bug was introduced in ImageMagick 6.9.9-14 and + fixed in 6.9.9-18, it's simpler to work around it in all versions. */ return 1; @@ -8868,7 +8876,6 @@ imagemagick_load_image (struct frame *f, struct image *img, DestroyMagickWand (image_wand); if (bg_wand) DestroyPixelWand (bg_wand); - MagickWandTerminus (); /* TODO more cleanup. */ image_error ("Error parsing IMAGEMAGICK image `%s'", img->spec); return 0; |