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:
@ -1607,6 +1607,7 @@ ex_retab(exarg_T *eap)
|
|||||||
long start_col = 0; // For start of white-space string
|
long start_col = 0; // For start of white-space string
|
||||||
long start_vcol = 0; // For start of white-space string
|
long start_vcol = 0; // For start of white-space string
|
||||||
long old_len;
|
long old_len;
|
||||||
|
long new_len;
|
||||||
char_u *ptr;
|
char_u *ptr;
|
||||||
char_u *new_line = (char_u *)1; // init to non-NULL
|
char_u *new_line = (char_u *)1; // init to non-NULL
|
||||||
int did_undo; // called u_save for current line
|
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 is actual number of white characters used
|
||||||
len = num_spaces + num_tabs;
|
len = num_spaces + num_tabs;
|
||||||
old_len = (long)STRLEN(ptr);
|
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)
|
if (new_line == NULL)
|
||||||
break;
|
break;
|
||||||
if (start_col > 0)
|
if (start_col > 0)
|
||||||
|
|||||||
@ -750,6 +750,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 */
|
||||||
|
/**/
|
||||||
|
4362,
|
||||||
/**/
|
/**/
|
||||||
4361,
|
4361,
|
||||||
/**/
|
/**/
|
||||||
|
|||||||
Reference in New Issue
Block a user