patch 8.2.3391: crash with combination of 'linebreak' and other options
Problem: Crash with combination of 'linebreak' and other options.
Solution: Avoid n_extra to become negative. (Christian Brabandt,
closes #8817)
diff --git a/src/drawline.c b/src/drawline.c
index deeaf5f..98d7693 100644
--- a/src/drawline.c
+++ b/src/drawline.c
@@ -1970,17 +1970,22 @@
if (wp->w_p_lbr && c0 == c
&& VIM_ISBREAK(c) && !VIM_ISBREAK((int)*ptr))
{
- int mb_off = has_mbyte ? (*mb_head_off)(line, ptr - 1) : 0;
- char_u *p = ptr - (mb_off + 1);
+ int mb_off = has_mbyte ? (*mb_head_off)(line, ptr - 1)
+ : 0;
+ char_u *p = ptr - (mb_off + 1);
// TODO: is passing p for start of the line OK?
n_extra = win_lbr_chartabsize(wp, line, p, (colnr_T)vcol,
NULL) - 1;
// We have just drawn the showbreak value, no need to add
- // space for it again
+ // space for it again.
if (vcol == vcol_sbr)
+ {
n_extra -= MB_CHARLEN(get_showbreak_value(wp));
+ if (n_extra < 0)
+ n_extra = 0;
+ }
if (c == TAB && n_extra + col > wp->w_width)
# ifdef FEAT_VARTABS