vim-patch:9.2.0121: patch memory leak in list_extend_func() in list.c (#38205)

Problem:  memory leak in list_extend_func() in list.c
Solution: Free l1 on early return (Huihui Huang)

closes: vim/vim#19572

7ed37dc534

Co-authored-by: Huihui Huang <625173@qq.com>
This commit is contained in:
zeertzjq
2026-03-09 07:44:20 +08:00
committed by GitHub
parent 60b997b71d
commit 9a9b9c581c

View File

@@ -668,16 +668,15 @@ static void extend_list(typval_T *argvars, const char *arg_errmsg, bool is_new,
if (argvars[2].v_type != VAR_UNKNOWN) {
int before = (int)tv_get_number_chk(&argvars[2], &error);
if (error) {
return; // Type error; errmsg already given.
goto cleanup; // Type error; errmsg already given.
}
if (before == tv_list_len(l1)) {
item = NULL;
} else {
item = tv_list_find(l1, before);
if (item == NULL) {
semsg(_(e_list_index_out_of_range_nr), (int64_t)before);
return;
goto cleanup;
}
}
} else {
@@ -694,6 +693,12 @@ static void extend_list(typval_T *argvars, const char *arg_errmsg, bool is_new,
} else {
tv_copy(&argvars[0], rettv);
}
return;
cleanup:
if (is_new) {
tv_list_unref(l1);
}
}
/// "extend()" or "extendnew()" function.