Avoid crashes when a reversed glyph row starts with a composition
* src/dispnew.c (build_frame_matrix_from_leaf_window): Add an assertion to prevent us from overwriting non-char glyphs with the vertical border glyph. * src/xdisp.c (extend_face_to_end_of_line): Account for one glyph possibly inserted by append_space_for_newline. (Bug#44506) Remove a kludgey correction for an off-by-one error in column counting, which is no longer needed.
This commit is contained in:
parent
b697bb91a1
commit
daff3bda10
2 changed files with 15 additions and 10 deletions
|
@ -2559,11 +2559,15 @@ build_frame_matrix_from_leaf_window (struct glyph_matrix *frame_matrix, struct w
|
||||||
the corresponding frame row to be updated. */
|
the corresponding frame row to be updated. */
|
||||||
frame_row->enabled_p = true;
|
frame_row->enabled_p = true;
|
||||||
|
|
||||||
/* Maybe insert a vertical border between horizontally adjacent
|
/* Maybe insert a vertical border between horizontally adjacent
|
||||||
windows. */
|
windows. */
|
||||||
if (GLYPH_CHAR (right_border_glyph) != 0)
|
if (GLYPH_CHAR (right_border_glyph) != 0)
|
||||||
{
|
{
|
||||||
struct glyph *border = window_row->glyphs[LAST_AREA] - 1;
|
struct glyph *border = window_row->glyphs[LAST_AREA] - 1;
|
||||||
|
/* It's a subtle bug if we are overwriting some non-char
|
||||||
|
glyph with the vertical border glyph. */
|
||||||
|
eassert (border->type == CHAR_GLYPH);
|
||||||
|
border->type = CHAR_GLYPH;
|
||||||
SET_CHAR_GLYPH_FROM_GLYPH (*border, right_border_glyph);
|
SET_CHAR_GLYPH_FROM_GLYPH (*border, right_border_glyph);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
15
src/xdisp.c
15
src/xdisp.c
|
@ -22074,13 +22074,14 @@ extend_face_to_end_of_line (struct it *it)
|
||||||
default_face->id : face->id);
|
default_face->id : face->id);
|
||||||
|
|
||||||
/* Display fill-column indicator if needed. */
|
/* Display fill-column indicator if needed. */
|
||||||
/* We need to subtract 1 to the indicator_column here because we
|
const int indicator_column = fill_column_indicator_column (it, 1);
|
||||||
will add the indicator IN the column indicator number, not
|
|
||||||
after it. We compare the variable it->current_x before
|
/* Make sure our idea of current_x is in sync with the glyphs
|
||||||
producing the glyph. When FRAME_WINDOW_P we subtract
|
actually in the glyph row. They might differ because
|
||||||
CHAR_WIDTH calculating STRETCH_WIDTH for the same reason. */
|
append_space_for_newline can insert one glyph without
|
||||||
const int indicator_column =
|
updating current_x. */
|
||||||
fill_column_indicator_column (it, 1) - 1;
|
it->current_x = it->glyph_row->used[TEXT_AREA];
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
if (it->current_x != indicator_column)
|
if (it->current_x != indicator_column)
|
||||||
|
|
Loading…
Add table
Reference in a new issue