patch 8.2.4362: :retab may allocate too much memory

Problem:    :retab may allocate too much memory.
Solution:   Bail out when allocating more than MAXCOL bytes.
This commit is contained in:
Bram Moolenaar
2022-02-12 20:46:15 +00:00
parent 62b191c387
commit 33f3c59854
2 changed files with 10 additions and 1 deletions

View File

@ -1607,6 +1607,7 @@ ex_retab(exarg_T *eap)
long start_col = 0; // For start of white-space string
long start_vcol = 0; // For start of white-space string
long old_len;
long new_len;
char_u *ptr;
char_u *new_line = (char_u *)1; // init to non-NULL
int did_undo; // called u_save for current line
@ -1724,7 +1725,13 @@ ex_retab(exarg_T *eap)
// len is actual number of white characters used
len = num_spaces + num_tabs;
old_len = (long)STRLEN(ptr);
new_line = alloc(old_len - col + start_col + len + 1);
new_len = old_len - col + start_col + len + 1;
if (new_len >= MAXCOL)
{
emsg(_(e_resulting_text_too_long));
break;
}
new_line = alloc(new_len);
if (new_line == NULL)
break;
if (start_col > 0)