]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix segfaults when starting on 80x26 TTY frames
authorEli Zaretskii <eliz@gnu.org>
Thu, 2 Jun 2022 10:41:59 +0000 (13:41 +0300)
committerEli Zaretskii <eliz@gnu.org>
Thu, 2 Jun 2022 10:41:59 +0000 (13:41 +0300)
* src/dispnew.c (adjust_frame_glyphs_for_frame_redisplay): Make
sure we have valid frame glyph matrices for the interactive
session.  (Bug#55760)
(adjust_frame_glyphs): Add assertions for when we fail to allocate
valid frame glyph matrices for a TTY frame.

src/dispnew.c

index 332ba54ee74d0a7db67eec2c879a0c8a357e2d60..39e5469db055492ecb07557350c1e8bc337a282e 100644 (file)
@@ -1837,7 +1837,18 @@ adjust_frame_glyphs (struct frame *f)
   if (FRAME_WINDOW_P (f))
     adjust_frame_glyphs_for_window_redisplay (f);
   else
-    adjust_frame_glyphs_for_frame_redisplay (f);
+    {
+      adjust_frame_glyphs_for_frame_redisplay (f);
+      eassert (FRAME_INITIAL_P (f)
+              || noninteractive
+              || !initialized
+              || (f->current_matrix
+                  && f->current_matrix->nrows > 0
+                  && f->current_matrix->rows
+                  && f->desired_matrix
+                  && f->desired_matrix->nrows > 0
+                  && f->desired_matrix->rows));
+    }
 
   /* Don't forget the buffer for decode_mode_spec.  */
   adjust_decode_mode_spec_buffer (f);
@@ -2119,6 +2130,19 @@ adjust_frame_glyphs_for_frame_redisplay (struct frame *f)
          SET_FRAME_GARBAGED (f);
        }
     }
+  else if (!FRAME_INITIAL_P (f) && !noninteractive && initialized)
+    {
+      if (!f->desired_matrix->nrows || !f->desired_matrix->rows)
+       {
+         adjust_glyph_matrix (NULL, f->desired_matrix, 0, 0, matrix_dim);
+         SET_FRAME_GARBAGED (f);
+       }
+      if (!f->current_matrix->nrows || !f->current_matrix->rows)
+       {
+         adjust_glyph_matrix (NULL, f->current_matrix, 0, 0, matrix_dim);
+         SET_FRAME_GARBAGED (f);
+       }
+    }
 }