From c9390423d609969193de1ea3228e259e22451719 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Fri, 2 Nov 2018 12:07:47 +0200 Subject: [PATCH] Avoid crashes with remapped default face in Org mode * src/xfaces.c (face_at_buffer_position): Look up BASE_FACE_ID anew if it is not in the frame's face cache. This avoids crashes when Org mode sets up for a new major mode in embedded code fragment, and the default face is remapped. (Bug#33222) --- src/xfaces.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/xfaces.c b/src/xfaces.c index f1fc6bb632f..98a46dcb872 100644 --- a/src/xfaces.c +++ b/src/xfaces.c @@ -5943,7 +5943,14 @@ face_at_buffer_position (struct window *w, ptrdiff_t pos, int face_id; if (base_face_id >= 0) - face_id = base_face_id; + { + face_id = base_face_id; + /* Make sure the base face ID is usable: if someone freed the + cached faces since we've looked up the base face, we need + to look it up again. */ + if (!FACE_FROM_ID_OR_NULL (f, face_id)) + face_id = lookup_basic_face (f, DEFAULT_FACE_ID); + } else if (NILP (Vface_remapping_alist)) face_id = DEFAULT_FACE_ID; else -- 2.39.5