From 713bf9e996d8c9a2cc5003ee0c95f12055756ae5 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Sat, 16 Mar 2019 16:38:41 +0100 Subject: [PATCH] patch 8.1.1010: Lua interface leaks memory Problem: Lua interface leaks memory. Solution: Clear typeval after copying it. --- src/if_lua.c | 9 +++------ src/version.c | 2 ++ 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 @@ -779,6 +779,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1010, /**/ 1009, /**/ -- 2.47.2