1
0
forked from aniani/vim

patch 9.1.0309: crash when 'textwidth' > MAX_INT

Problem:  crash when 'textwidth' > MAX_INT (after vv9.1.0055)
          (Zoltan Balogh)
Solution: limit textwidth to MAX_INT

fixes: #14482
closes: #14489

Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Christian Brabandt
2024-04-11 22:54:44 +02:00
parent 7b0c4b64e3
commit bba79808cb
3 changed files with 14 additions and 3 deletions

View File

@@ -1303,4 +1303,13 @@ func Test_correct_cursor_position()
set encoding=utf8 set encoding=utf8
endfunc endfunc
" This was crashing Vim
func Test_textwdith_overflow()
new
setl tw=999999999
normal 10ig
call feedkeys('a ab cd ef', 'xt')
bw!
endfunc
" vim: shiftwidth=2 sts=2 expandtab " vim: shiftwidth=2 sts=2 expandtab

View File

@@ -56,6 +56,7 @@ internal_format(
colnr_T leader_len; colnr_T leader_len;
int no_leader = FALSE; int no_leader = FALSE;
int do_comments = (flags & INSCHAR_DO_COM); int do_comments = (flags & INSCHAR_DO_COM);
int safe_tw = trim_to_int(8 * (vimlong_T)textwidth);
#ifdef FEAT_LINEBREAK #ifdef FEAT_LINEBREAK
int has_lbr = curwin->w_p_lbr; int has_lbr = curwin->w_p_lbr;
@@ -95,7 +96,7 @@ internal_format(
// Cursor is currently at the end of line. No need to format // Cursor is currently at the end of line. No need to format
// if line length is less than textwidth (8 * textwidth for // if line length is less than textwidth (8 * textwidth for
// utf safety) // utf safety)
if (curwin->w_cursor.col < 8 * textwidth) if (curwin->w_cursor.col < safe_tw)
{ {
virtcol = get_nolist_virtcol() virtcol = get_nolist_virtcol()
+ char2cells(c != NUL ? c : gchar_cursor()); + char2cells(c != NUL ? c : gchar_cursor());
@@ -156,8 +157,7 @@ internal_format(
// line to textwidth border every time for each line break. // line to textwidth border every time for each line break.
// //
// Ceil to 8 * textwidth to optimize. // Ceil to 8 * textwidth to optimize.
curwin->w_cursor.col = startcol < 8 * textwidth ? startcol : curwin->w_cursor.col = startcol < safe_tw ? startcol : safe_tw;
8 * textwidth;
foundcol = 0; foundcol = 0;
skip_pos = 0; skip_pos = 0;

View File

@@ -704,6 +704,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
309,
/**/ /**/
308, 308,
/**/ /**/