From 3566644a332f42c2fb68e93f04f2cec92917fcc9 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sat, 8 Oct 2016 10:52:52 +0300 Subject: [PATCH] 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. --- src/xdisp.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/xdisp.c b/src/xdisp.c index 42c6fb75efa..a13830c811e 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -6298,9 +6298,10 @@ forward_to_next_line_start (struct it *it, bool *skipped_p, } else { - while (get_next_display_element (it) - && !newline_found_p) + while (!newline_found_p) { + if (!get_next_display_element (it)) + break; newline_found_p = ITERATOR_AT_END_OF_LINE_P (it); if (newline_found_p && it->bidi_p && bidi_it_prev) *bidi_it_prev = it->bidi_it; -- 2.39.5