lua: fix invocation of foreach() with nil type and implicit self
authorJo-Philipp Wich <jow@openwrt.org>
Thu, 5 Nov 2015 17:47:34 +0000 (18:47 +0100)
committerJo-Philipp Wich <jow@openwrt.org>
Thu, 5 Nov 2015 17:53:09 +0000 (18:53 +0100)
The check for nil on the 2nd argument misses the offset in order to skip over
implicit self which results in
  `bad argument #2 to 'foreach' (string expected, got nil)`
when invoking `uci.cursor():foreach("test", nil, function(s) end)`.

The same call works fine when using dot instead of colon notation.

Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
lua/uci.c

index 6ba7da0..1cb31a5 100644 (file)
--- a/lua/uci.c
+++ b/lua/uci.c
@@ -303,7 +303,7 @@ uci_lua_foreach(lua_State *L)
        ctx = find_context(L, &offset);
        package = luaL_checkstring(L, 1 + offset);
 
        ctx = find_context(L, &offset);
        package = luaL_checkstring(L, 1 + offset);
 
-       if (lua_isnil(L, 2))
+       if (lua_isnil(L, 2 + offset))
                type = NULL;
        else
                type = luaL_checkstring(L, 2 + offset);
                type = NULL;
        else
                type = luaL_checkstring(L, 2 + offset);