emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Build segfaults when loading image.el


From: Dhruva Krishnamurthy
Subject: Build segfaults when loading image.el
Date: Mon, 23 Dec 2019 13:59:35 -0800

Loading image.el segfaults when ImageMagick is enabled on MacOS (do not have access to other platforms) since image magic environment is not initialized yet. The following patch on HEAD fixes the crash by initializing it before use.

-dhruva

diff --git a/src/image.c b/src/image.c
index 70d932f9ed..50d90ccb55 100644
--- a/src/image.c
+++ b/src/image.c
@@ -8603,6 +8603,20 @@ #define DrawRectangle DrawRectangleGif
     MagickPixelPacket *);
 #endif
 
+/* Initialize the ImageMagick environment if not initialized.  */
+
+static void
+imagemagick_initialize(void)
+{
+  /* Initialize the ImageMagick environment.  */
+  static bool imagemagick_initialized;
+  if (!imagemagick_initialized)
+    {
+      MagickWandGenesis();
+      imagemagick_initialized = !!IsMagickWandInstantiated();
+    }
+}
+
 /* Log ImageMagick error message.
    Useful when an ImageMagick function returns the status `MagickFalse'.  */
 
@@ -8876,12 +8890,7 @@ imagemagick_load_image (struct frame *f, struct image *img,
   char *filename_hint = NULL;
 
   /* Initialize the ImageMagick environment.  */
-  static bool imagemagick_initialized;
-  if (!imagemagick_initialized)
-    {
-      imagemagick_initialized = true;
-      MagickWandGenesis ();
-    }
+  imagemagick_initialize();
 
   /* 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
@@ -9290,6 +9299,9 @@ DEFUN ("imagemagick-types", Fimagemagick_types, Simagemagick_types, 0, 0, 0,
   char **imtypes;
   size_t i;
 
+  /* Initialize the ImageMagick environment.  */
+  imagemagick_initialize();
+
   ex = AcquireExceptionInfo ();
   imtypes = GetMagickList ("*", &numf, ex);
   DestroyExceptionInfo (ex);



reply via email to

[Prev in Thread] Current Thread [Next in Thread]