X-Git-Url: http://git.archive.openwrt.org/?a=blobdiff_plain;ds=sidebyside;f=lua%2Fuci.c;h=638290076b391514610b14647f6caf3a9afb9443;hb=31d4b691d96af442e8dfcefbb7acf85a448bba5c;hp=98e0a2f3d905562f7a8b19c0c140941f73f2f90c;hpb=e4516d01a7d2b0a5a8def7b5791c7d4032138287;p=project%2Fuci.git diff --git a/lua/uci.c b/lua/uci.c index 98e0a2f..6382900 100644 --- a/lua/uci.c +++ b/lua/uci.c @@ -364,6 +364,8 @@ uci_lua_get_any(lua_State *L, bool all) err = UCI_ERR_INVAL; goto error; } + if (s) + free(s); if (!err) return 1; @@ -484,6 +486,8 @@ uci_lua_rename(lua_State *L) goto error; error: + if (s) + free(s); return uci_push_status(L, ctx, false); } @@ -533,6 +537,8 @@ uci_lua_reorder(lua_State *L) goto error; error: + if (s) + free(s); return uci_push_status(L, ctx, false); } @@ -545,6 +551,7 @@ uci_lua_set(lua_State *L) bool istable = false; int err = UCI_ERR_MEM; char *s = NULL; + const char *v; int i, nargs, offset = 0; ctx = find_context(L, &offset); @@ -591,8 +598,14 @@ uci_lua_set(lua_State *L) if (istable) { if (lua_objlen(L, nargs) == 1) { i = 1; - if (ptr.o) + if (ptr.o) { + v = ptr.value; + ptr.value = NULL; err = uci_delete(ctx, &ptr); + if (err) + goto error; + ptr.value = v; + } } else { i = 2; err = uci_set(ctx, &ptr); @@ -616,6 +629,8 @@ uci_lua_set(lua_State *L) error: + if (s) + free(s); return uci_push_status(L, ctx, false); } @@ -665,6 +680,8 @@ uci_lua_package_cmd(lua_State *L, enum pkg_cmd cmd) } err: + if (s) + free(s); return uci_push_status(L, ctx, false); }