changeset 25711:d1457c3f156c v8.2.3391

patch 8.2.3391: crash with combination of 'linebreak' and other options Commit: https://github.com/vim/vim/commit/20e0c3d27bda770542c1c0e4c81fd6443c12f3a6 Author: Bram Moolenaar <Bram@vim.org> Date: Tue Aug 31 20:57:55 2021 +0200 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)
author Bram Moolenaar <Bram@vim.org>
date Tue, 31 Aug 2021 21:00:06 +0200
parents 3d6603826015
children e2b38073ff8f
files src/drawline.c src/version.c
diffstat 2 files changed, 10 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/drawline.c
+++ b/src/drawline.c
@@ -1970,17 +1970,22 @@ win_line(
 		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
--- a/src/version.c
+++ b/src/version.c
@@ -756,6 +756,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    3391,
+/**/
     3390,
 /**/
     3389,