BUG/MINOR: lua: Check argument type to convert it to IP mask in arg validation

In hlua_lua2arg_check() function, before converting an argument to an IPv4 or
IPv6 mask, we must be sure to have an integer or a string argument (ARGT_SINT or
ARGT_STR).

This patch must be backported to all supported versions.
This commit is contained in:
Christopher Faulet 2020-08-07 09:11:22 +02:00
parent 8e09ac8592
commit e663a6e326

View File

@ -752,11 +752,17 @@ __LJMP int hlua_lua2arg_check(lua_State *L, int first, struct arg *argp,
break;
case ARGT_MSK4:
memcpy(trash.area, argp[idx].data.str.area,
argp[idx].data.str.data);
trash.area[argp[idx].data.str.data] = 0;
if (!str2mask(trash.area, &argp[idx].data.ipv4))
WILL_LJMP(luaL_argerror(L, first + idx, "invalid IPv4 mask"));
if (argp[idx].type == ARGT_SINT)
len2mask4(argp[idx].data.sint, &argp[idx].data.ipv4);
else if (argp[idx].type == ARGT_STR) {
memcpy(trash.area, argp[idx].data.str.area,
argp[idx].data.str.data);
trash.area[argp[idx].data.str.data] = 0;
if (!str2mask(trash.area, &argp[idx].data.ipv4))
WILL_LJMP(luaL_argerror(L, first + idx, "invalid IPv4 mask"));
}
else
WILL_LJMP(luaL_argerror(L, first + idx, "integer or string expected"));
argp[idx].type = ARGT_MSK4;
break;
@ -772,11 +778,17 @@ __LJMP int hlua_lua2arg_check(lua_State *L, int first, struct arg *argp,
break;
case ARGT_MSK6:
memcpy(trash.area, argp[idx].data.str.area,
argp[idx].data.str.data);
trash.area[argp[idx].data.str.data] = 0;
if (!str2mask6(trash.area, &argp[idx].data.ipv6))
WILL_LJMP(luaL_argerror(L, first + idx, "invalid IPv6 mask"));
if (argp[idx].type == ARGT_SINT)
len2mask6(argp[idx].data.sint, &argp[idx].data.ipv6);
else if (argp[idx].type == ARGT_STR) {
memcpy(trash.area, argp[idx].data.str.area,
argp[idx].data.str.data);
trash.area[argp[idx].data.str.data] = 0;
if (!str2mask6(trash.area, &argp[idx].data.ipv6))
WILL_LJMP(luaL_argerror(L, first + idx, "invalid IPv6 mask"));
}
else
WILL_LJMP(luaL_argerror(L, first + idx, "integer or string expected"));
argp[idx].type = ARGT_MSK6;
break;