]> git.eshelyaron.com Git - emacs.git/commitdiff
Avoid infloop in redisplay when displaying a tooltip
authorEli Zaretskii <eliz@gnu.org>
Fri, 15 Jul 2022 10:49:56 +0000 (13:49 +0300)
committerEli Zaretskii <eliz@gnu.org>
Fri, 15 Jul 2022 10:49:56 +0000 (13:49 +0300)
* src/xdisp.c (try_window): Ensure we fail if 'display_line'
indicates that the dimensions of the glyph matrix are
insufficient.  (Bug#56561)

src/xdisp.c

index f205327cc343c477a84e78e750ce9d8f0611b173..1940d16a013d8d5dd1bfe495ea64db48967430ca 100644 (file)
@@ -20200,9 +20200,16 @@ try_window (Lisp_Object window, struct text_pos pos, int flags)
   /* Display all lines of W.  */
   while (it.current_y < it.last_visible_y)
     {
+      int last_row_scale = it.w->nrows_scale_factor;
+      int last_col_scale = it.w->ncols_scale_factor;
       if (display_line (&it, cursor_vpos))
        last_text_row = it.glyph_row - 1;
-      if (f->fonts_changed && !(flags & TRY_WINDOW_IGNORE_FONTS_CHANGE))
+      if (f->fonts_changed
+         && !((flags & TRY_WINDOW_IGNORE_FONTS_CHANGE)
+              /* If the matrix dimensions are insufficient, we _must_
+                 fail and let dispnew.c reallocate the matrix.  */
+              && last_row_scale == it.w->nrows_scale_factor
+              && last_col_scale == it.w->ncols_scale_factor))
        return 0;
     }