Subject: bug#70385: Crash in note_fringe_highlight

From: Eli Zaretskii <[email-masked]>
Date: Mon, 15 Apr 2024 21:23:51 +0300

> From: Björn Bidar <[email-masked]>
> Cc: Eli Zaretskii <[email-masked]>,  Po Lu <[email-masked]>,
>   [email-masked],  [email-masked],  [email-masked]
> Date: Mon, 15 Apr 2024 20:04:02 +0300
> 
> Po Lu via "Bug reports for GNU Emacs, the Swiss army knife of text
> editors" <[email-masked]> writes:
> 
> > Eli Zaretskii <[email-masked]> writes:
> >
> >> I think this should be
> >>
> >>   if ((window_outdated (w)
> >>        || !w->window_end_valid
> >>        || !MATRIX_ROW_DISPLAYS_TEXT_P (MATRIX_ROW (w->current_matrix,
> >> 						   vpos)))
> >
> > Yes, sorry.
> >
> >> I'm not sure it will help, because it seems the segfault happens in
> >> the MATRIX_ROW_DISPLAYS_TEXT_P macro.  So I think we are somehow
> >> dealing with w->current_matrix whose 'nrows' is too small.  The
> >> mouse-highlight code detects that case in x_y_to_hpos_vpos.
> >
> > Right.  What about this?
> >
> > diff --git a/src/xdisp.c b/src/xdisp.c
> > index d984c12d1aa..dcecc2b09d4 100644
> > --- a/src/xdisp.c
> > +++ b/src/xdisp.c
> > @@ -35772,6 +35772,7 @@ note_fringe_highlight (struct frame *f, Lisp_Object window, int x, int y,
> >    /* Don't access the TEXT_AREA of a row that does not display text, or
> >       when the window is outdated.  (bug#70385) */
> >    if (window_outdated (w)
> > +      || (vpos >= w->current_matrix->nrows)
> >        || !MATRIX_ROW_DISPLAYS_TEXT_P (MATRIX_ROW (w->current_matrix,
> >  						  vpos)))
> >      return;
> >
> > It's the same test x_y_to_hpos_vpos applies to decide whether to punt
> > and return NULL.
> 
> Tried the change but it wasn't enough:

OK, but can you please collect the data I asked for?  It's important
for figuring out the solution.

Thanks.