changeset 27673:ba7dcf54d309 v8.2.4362

patch 8.2.4362: :retab may allocate too much memory Commit: https://github.com/vim/vim/commit/33f3c5985491032d5bdfc30e722e85d5a0285e64 Author: Bram Moolenaar <Bram@vim.org> 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.
author Bram Moolenaar <Bram@vim.org>
date Sat, 12 Feb 2022 22:00:03 +0100
parents 7c504d6dd947
children e0e00e365288
files src/indent.c src/version.c
diffstat 2 files changed, 10 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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)
--- 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,