]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch memory leak in list_extend_func() in list.c v9.2.0121
authorHuihui Huang <625173@qq.com>
Sun, 8 Mar 2026 19:37:22 +0000 (19:37 +0000)
committerChristian Brabandt <cb@256bit.org>
Sun, 8 Mar 2026 19:37:22 +0000 (19:37 +0000)
Problem:  memory leak in list_extend_func() in list.c
Solution: Free l1 on early return (Huihui Huang)

closes: #19572

Signed-off-by: Huihui Huang <625173@qq.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
src/list.c
src/version.c

index 310d8516b89a4a013fb4ea13e1cb2c015b0f2fd8..cd12bcb0a010c474a6464fa48675959f0635ba29 100644 (file)
@@ -3025,8 +3025,7 @@ list_extend_func(
        {
            before = (long)tv_get_number_chk(&argvars[2], &error);
            if (error)
-               return;         // type error; errmsg already given
-
+               goto cleanup;           // type error; errmsg already given
            if (before == l1->lv_len)
                item = NULL;
            else
@@ -3035,7 +3034,7 @@ list_extend_func(
                if (item == NULL)
                {
                    semsg(_(e_list_index_out_of_range_nr), before);
-                   return;
+                   goto cleanup;
                }
            }
        }
@@ -3043,7 +3042,7 @@ list_extend_func(
            item = NULL;
        if (type != NULL && check_typval_arg_type(
                    type, &argvars[1], func_name, 2) == FAIL)
-           return;
+           goto cleanup;
        list_extend(l1, l2, item);
 
        if (is_new)
@@ -3054,6 +3053,11 @@ list_extend_func(
        }
        else
            copy_tv(&argvars[0], rettv);
+       return;
+
+cleanup:
+       if (is_new)
+           list_unref(l1);
     }
 }
 
index 5fd399c977cfc7735b41c8a6697e78b3f2061f78..4ad7d6aee51c10c7a13d6389d29622c87a456ea8 100644 (file)
@@ -734,6 +734,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    121,
 /**/
     120,
 /**/