changeset 16009:3b524e8110ab v8.1.1010

patch 8.1.1010: Lua interface leaks memory commit https://github.com/vim/vim/commit/713bf9e996d8c9a2cc5003ee0c95f12055756ae5 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Mar 16 16:38:41 2019 +0100 patch 8.1.1010: Lua interface leaks memory Problem: Lua interface leaks memory. Solution: Clear typeval after copying it.
author Bram Moolenaar <Bram@vim.org>
date Sat, 16 Mar 2019 16:45:05 +0100
parents 1ef7f0cb7c61
children 77ebdfdfb1cd
files src/if_lua.c src/version.c
diffstat 2 files changed, 5 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/if_lua.c
+++ b/src/if_lua.c
@@ -844,10 +844,7 @@ luaV_list_add (lua_State *L)
     lua_settop(L, 2);
     luaV_checktypval(L, 2, &v, "adding list item");
     if (list_append_tv(l, &v) == FAIL)
-    {
-	clear_tv(&v);
 	luaL_error(L, "failed to add item to list");
-    }
     clear_tv(&v);
     lua_settop(L, 1);
     return 1;
@@ -872,10 +869,7 @@ luaV_list_insert (lua_State *L)
     lua_settop(L, 2);
     luaV_checktypval(L, 2, &v, "inserting list item");
     if (list_insert_tv(l, &v, li) == FAIL)
-    {
-	clear_tv(&v);
 	luaL_error(L, "failed to add item to list");
-    }
     clear_tv(&v);
     lua_settop(L, 1);
     return 1;
@@ -981,6 +975,7 @@ luaV_dict_newindex(lua_State *L)
     char_u *key = (char_u *) luaL_checkstring(L, 2);
     dictitem_T *di;
     typval_T v;
+
     if (d->dv_lock)
 	luaL_error(L, "dict is locked");
     if (key == NULL)
@@ -1104,6 +1099,7 @@ luaV_funcref_call(lua_State *L)
 	{
 	    luaV_checktypval(L, i + 2, &v, "calling funcref");
 	    list_append_tv(f->args.vval.v_list, &v);
+	    clear_tv(&v);
 	}
 	status = func_call(f->tv.vval.v_string, &f->args,
 							NULL, f->self, &rettv);
@@ -1571,6 +1567,7 @@ luaV_list(lua_State *L)
 		{
 		    luaV_checktypval(L, -1, &v, "vim.list");
 		    list_append_tv(l, &v);
+		    clear_tv(&v);
 		}
 		lua_pop(L, 1); /* value */
 	    } while (notnil);
--- a/src/version.c
+++ b/src/version.c
@@ -780,6 +780,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1010,
+/**/
     1009,
 /**/
     1008,