>>>> "Gunnar" == Gunnar Evermann
<ge204(a)eng.cam.ac.uk> writes: 
Gunnar> The problem is that normalize_image_instantiator potentially calls
Gunnar> simple_image_type_normalize, which has the comment (/* This function
Gunnar> can call lisp */).
Well done!
Gunnar> the fix is appended below. One could make the gcprotection local to
Gunnar> the 'STRINGP' case, but I was to lazy, should I change that?
I propose this slight variation instead:
--- src/glyphs.c.old
+++ src/glyphs.c
@@ -481,12 +481,16 @@
      longer exist (e.g. w3 pixmaps are almost always from temporary
      files). */
   {
-    struct image_instantiator_methods * meths =
-      decode_image_instantiator_format (XVECTOR_DATA (instantiator)[0],
-					ERROR_ME);
-    return IIFORMAT_METH_OR_GIVEN (meths, normalize,
-				   (instantiator, contype),
-				   instantiator);
+    struct gcpro gcpro1;
+    struct image_instantiator_methods *meths;
+
+    GCPRO1 (instantiator);
+    
+    meths = decode_image_instantiator_format (XVECTOR_DATA (instantiator)[0],
+					      ERROR_ME);
+    RETURN_UNGCPRO (IIFORMAT_METH_OR_GIVEN (meths, normalize,
+					    (instantiator, contype),
+					    instantiator));
   }
 }