]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.1.1270: missing out-of-memory checks in buffer.c v9.1.1270
authorJohn Marriott <basilisk@internode.on.net>
Wed, 2 Apr 2025 18:32:35 +0000 (20:32 +0200)
committerChristian Brabandt <cb@256bit.org>
Wed, 2 Apr 2025 18:32:35 +0000 (20:32 +0200)
Problem:  missing out-of-memory checks in buffer.c
Solution: handle out-of-memory situations during allocation
          (John Marriott)

closes: #17031

Signed-off-by: John Marriott <basilisk@internode.on.net>
Signed-off-by: Christian Brabandt <cb@256bit.org>
src/buffer.c
src/version.c

index 68388db088818c7686058ad6397a0e61c3000914..8277b726c2d4106afe1254ca05100e9bd93deea8 100644 (file)
@@ -2926,6 +2926,8 @@ ExpandBufnames(
                p = home_replace_save(buf, p);
            else
                p = vim_strsave(p);
+           if (p == NULL)
+               return FAIL;
 
            if (!fuzzy)
            {
@@ -4030,8 +4032,11 @@ maketitle(void)
            else
            {
                p = transstr(gettail(curbuf->b_fname));
-               vim_strncpy(buf, p, SPACE_FOR_FNAME);
-               vim_free(p);
+               if (p != NULL)
+               {
+                   vim_strncpy(buf, p, SPACE_FOR_FNAME);
+                   vim_free(p);
+               }
            }
 
 #ifdef FEAT_TERMINAL
@@ -4084,8 +4089,11 @@ maketitle(void)
                if (off < SPACE_FOR_DIR)
                {
                    p = transstr(buf + off);
-                   vim_strncpy(buf + off, p, (size_t)(SPACE_FOR_DIR - off));
-                   vim_free(p);
+                   if (p != NULL)
+                   {
+                       vim_strncpy(buf + off, p, (size_t)(SPACE_FOR_DIR - off));
+                       vim_free(p);
+                   }
                }
                else
                {
@@ -4767,25 +4775,29 @@ build_stl_str_hl(
                size_t new_fmt_len = parsed_usefmt
                                                 + str_length + fmt_length + 3;
                char_u *new_fmt = (char_u *)alloc(new_fmt_len * sizeof(char_u));
-               char_u *new_fmt_p = new_fmt;
-
-               new_fmt_p = (char_u *)memcpy(new_fmt_p, usefmt, parsed_usefmt)
-                                                              + parsed_usefmt;
-               new_fmt_p = (char_u *)memcpy(new_fmt_p , str, str_length)
-                                                                 + str_length;
-               new_fmt_p = (char_u *)memcpy(new_fmt_p, "%}", 2) + 2;
-               new_fmt_p = (char_u *)memcpy(new_fmt_p , s, fmt_length)
-                                                                 + fmt_length;
-               *new_fmt_p = 0;
-               new_fmt_p = NULL;
-
-               if (usefmt != fmt)
-                   vim_free(usefmt);
-               VIM_CLEAR(str);
-               usefmt = new_fmt;
-               s = usefmt + parsed_usefmt;
-               evaldepth++;
-               continue;
+
+               if (new_fmt != NULL)
+               {
+                   char_u *new_fmt_p = new_fmt;
+
+                   new_fmt_p = (char_u *)memcpy(new_fmt_p, usefmt, parsed_usefmt)
+                                                                  + parsed_usefmt;
+                   new_fmt_p = (char_u *)memcpy(new_fmt_p , str, str_length)
+                                                                     + str_length;
+                   new_fmt_p = (char_u *)memcpy(new_fmt_p, "%}", 2) + 2;
+                   new_fmt_p = (char_u *)memcpy(new_fmt_p , s, fmt_length)
+                                                                     + fmt_length;
+                   *new_fmt_p = 0;
+                   new_fmt_p = NULL;
+
+                   if (usefmt != fmt)
+                       vim_free(usefmt);
+                   VIM_CLEAR(str);
+                   usefmt = new_fmt;
+                   s = usefmt + parsed_usefmt;
+                   evaldepth++;
+                   continue;
+               }
            }
 #endif
            break;
index 7882f5eb769b4a084e1ed0f577f76c73c50ec31f..6f54a94f506593571cc966c757065b3b760891ec 100644 (file)
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1270,
 /**/
     1269,
 /**/