Fix infloop in redisplay due to truncated lines and invisible text

* src/xdisp.c (forward_to_next_line_start): Don't call
'get_next_display_element' after finding the end of line.  This
avoids setting the row's end position to the wrong value when the
next screen line begins with invisible text; that wrong value
caused set_cursor_from_row position the cursor in the wrong screen
line, and eventually triggered bug#24109.
This commit is contained in:
Eli Zaretskii 2016-10-08 10:52:52 +03:00
parent a6e0a67701
commit 3566644a33

View file

@ -6298,9 +6298,10 @@ forward_to_next_line_start (struct it *it, bool *skipped_p,
} }
else else
{ {
while (get_next_display_element (it) while (!newline_found_p)
&& !newline_found_p)
{ {
if (!get_next_display_element (it))
break;
newline_found_p = ITERATOR_AT_END_OF_LINE_P (it); newline_found_p = ITERATOR_AT_END_OF_LINE_P (it);
if (newline_found_p && it->bidi_p && bidi_it_prev) if (newline_found_p && it->bidi_p && bidi_it_prev)
*bidi_it_prev = it->bidi_it; *bidi_it_prev = it->bidi_it;