summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2019-03-16 16:38:41 +0100
committerBram Moolenaar <Bram@vim.org>2019-03-16 16:38:41 +0100
commit713bf9e996d8c9a2cc5003ee0c95f12055756ae5 (patch)
tree36526c28b091a7a1bec87a67f53335cea9d3f81a
parent1f271efbbb2004c3e1b90492a3585a6d9ebd7893 (diff)
patch 8.1.1010: Lua interface leaks memoryv8.1.1010
Problem: Lua interface leaks memory. Solution: Clear typeval after copying it.
-rw-r--r--src/if_lua.c9
-rw-r--r--src/version.c2
2 files changed, 5 insertions, 6 deletions
diff --git a/src/if_lua.c b/src/if_lua.c
index 12643f90c8..9cedf43433 100644
--- 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);
diff --git a/src/version.c b/src/version.c
index 2c91664f6d..dc2d73d44e 100644
--- 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,