changeset 21218:1f4d0375f947 v8.2.1160

patch 8.2.1160: Vim9: memory leak in allocated types Commit: https://github.com/vim/vim/commit/6110e79a5872dd6c5529f909d1bd670e3325927b Author: Bram Moolenaar <Bram@vim.org> Date: Wed Jul 8 19:35:21 2020 +0200 patch 8.2.1160: Vim9: memory leak in allocated types Problem: Vim9: memory leak in allocated types. Solution: Free the type pointers.
author Bram Moolenaar <Bram@vim.org>
date Wed, 08 Jul 2020 19:45:04 +0200
parents d9d839c4d070
children 8ad4d2754054
files src/proto/vim9compile.pro src/userfunc.c src/version.c src/vim9compile.c src/vim9script.c
diffstat 5 files changed, 13 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/proto/vim9compile.pro
+++ b/src/proto/vim9compile.pro
@@ -1,5 +1,6 @@
 /* vim9compile.c */
 int check_defined(char_u *p, size_t len, cctx_T *cctx);
+void clear_type_list(garray_T *gap);
 type_T *typval2type(typval_T *tv);
 int check_type(type_T *expected, type_T *actual, int give_msg);
 char_u *skip_type(char_u *start);
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -1069,10 +1069,7 @@ func_clear_items(ufunc_T *fp)
     VIM_CLEAR(fp->uf_arg_types);
     VIM_CLEAR(fp->uf_def_arg_idx);
     VIM_CLEAR(fp->uf_va_name);
-    while (fp->uf_type_list.ga_len > 0)
-	vim_free(((type_T **)fp->uf_type_list.ga_data)
-						  [--fp->uf_type_list.ga_len]);
-    ga_clear(&fp->uf_type_list);
+    clear_type_list(&fp->uf_type_list);
 
 #ifdef FEAT_LUA
     if (fp->uf_cb_free != NULL)
--- a/src/version.c
+++ b/src/version.c
@@ -755,6 +755,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1160,
+/**/
     1159,
 /**/
     1158,
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -321,6 +321,14 @@ alloc_type(garray_T *type_gap)
     return type;
 }
 
+    void
+clear_type_list(garray_T *gap)
+{
+    while (gap->ga_len > 0)
+	vim_free(((type_T **)gap->ga_data)[--gap->ga_len]);
+    ga_clear(gap);
+}
+
     static type_T *
 get_list_type(type_T *member_type, garray_T *type_gap)
 {
--- a/src/vim9script.c
+++ b/src/vim9script.c
@@ -126,7 +126,7 @@ free_imports(int sid)
     }
     ga_clear(&si->sn_imports);
     ga_clear(&si->sn_var_vals);
-    ga_clear(&si->sn_type_list);
+    clear_type_list(&si->sn_type_list);
 }
 
 /*