From e20e8538610ed8b78e0b9f9cc3121c1102a8aaf0 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sun, 23 Mar 2025 11:30:17 +0200 Subject: [PATCH] Avoid rare segfaults in 'check_matrix_pointers' * src/dispnew.c (check_window_matrix_pointers): No-op if the window's frame not ready yet. (Bug#77200) --- src/dispnew.c | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/dispnew.c b/src/dispnew.c index 6365dcb9c4d..6cd41620b57 100644 --- a/src/dispnew.c +++ b/src/dispnew.c @@ -3113,18 +3113,22 @@ mirror_line_dance (struct window *w, int unchanged_at_top, int nlines, int *copy static void check_window_matrix_pointers (struct window *w) { - while (w) - { - if (WINDOWP (w->contents)) - check_window_matrix_pointers (XWINDOW (w->contents)); - else - { - struct frame *f = XFRAME (w->frame); - check_matrix_pointers (w->desired_matrix, f->desired_matrix); - check_matrix_pointers (w->current_matrix, f->current_matrix); - } + struct frame *f = XFRAME (w->frame); - w = NILP (w->next) ? 0 : XWINDOW (w->next); + if (f->after_make_frame) + { + while (w) + { + if (WINDOWP (w->contents)) + check_window_matrix_pointers (XWINDOW (w->contents)); + else + { + check_matrix_pointers (w->desired_matrix, f->desired_matrix); + check_matrix_pointers (w->current_matrix, f->current_matrix); + } + + w = NILP (w->next) ? 0 : XWINDOW (w->next); + } } }