From: Eli Zaretskii Date: Sat, 3 Oct 2020 17:49:18 +0000 (+0300) Subject: Avoid segfaults in lookup_image when faces were freed X-Git-Tag: emacs-28.0.90~5753 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=0fe8ab79e7a2306b84e209cc4e90da1996da1cad;p=emacs.git Avoid segfaults in lookup_image when faces were freed * src/image.c (lookup_image): Make sure the frame's face cache exists and has at least the basic faces. If FACE_ID is not a basic face, and is no longer cached, fall back on the 'default' face. (Bug#43700) --- diff --git a/src/image.c b/src/image.c index 6ecf6a70fe2..25d5af8a8d5 100644 --- a/src/image.c +++ b/src/image.c @@ -2329,8 +2329,14 @@ lookup_image (struct frame *f, Lisp_Object spec, int face_id) struct image *img; EMACS_UINT hash; - struct face *face = (face_id >= 0) ? FACE_FROM_ID (f, face_id) - : FACE_FROM_ID (f, DEFAULT_FACE_ID); + if (FRAME_FACE_CACHE (f) == NULL) + init_frame_faces (f); + if (FRAME_FACE_CACHE (f)->used == 0) + recompute_basic_faces (f); + if (face_id < 0 || face_id >= FRAME_FACE_CACHE (f)->used) + face_id = DEFAULT_FACE_ID; + + struct face *face = FACE_FROM_ID (f, face_id); unsigned long foreground = FACE_COLOR_TO_PIXEL (face->foreground, f); unsigned long background = FACE_COLOR_TO_PIXEL (face->background, f);