# HG changeset patch # User Bram Moolenaar # Date 1644699603 -3600 # Node ID ba7dcf54d309bdda9e656e9be541dfc9c22d2be6 # Parent 7c504d6dd94797375cf1907993f02050a325e32f patch 8.2.4362: :retab may allocate too much memory Commit: https://github.com/vim/vim/commit/33f3c5985491032d5bdfc30e722e85d5a0285e64 Author: Bram Moolenaar Date: Sat Feb 12 20:46:15 2022 +0000 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. diff --git a/src/indent.c b/src/indent.c --- a/src/indent.c +++ b/src/indent.c @@ -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) diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 4362, +/**/ 4361, /**/ 4360,