diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2014-01-06 16:59:33 +0000 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2014-01-06 16:59:33 +0000 |
commit | 02c5329cc042d2f58a0af8920888f29d41c43c7b (patch) | |
tree | 1621bc3dda8b084dbc557c31586f343e2bdea011 /src/lua/lua_ip.c | |
parent | 3acedc39adb56990a6241936814938afaf96b8bb (diff) | |
download | rspamd-02c5329cc042d2f58a0af8920888f29d41c43c7b.tar.gz rspamd-02c5329cc042d2f58a0af8920888f29d41c43c7b.zip |
Validate IP addresses before pushing them to lua.
Diffstat (limited to 'src/lua/lua_ip.c')
-rw-r--r-- | src/lua/lua_ip.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/src/lua/lua_ip.c b/src/lua/lua_ip.c index a040901b8..014b35493 100644 --- a/src/lua/lua_ip.c +++ b/src/lua/lua_ip.c @@ -244,18 +244,23 @@ lua_ip_push (lua_State *L, int af, gpointer data) { struct rspamd_lua_ip *ip, **pip; - ip = g_slice_alloc (sizeof (struct rspamd_lua_ip)); - - ip->af = af; - if (af == AF_INET6) { - memcpy (&ip->data, data, sizeof (struct in6_addr)); + if (!rspamd_ip_is_valid (data, af)) { + lua_pushnil (L); } else { - memcpy (&ip->data, data, sizeof (struct in_addr)); + ip = g_slice_alloc (sizeof (struct rspamd_lua_ip)); + + ip->af = af; + if (af == AF_INET6) { + memcpy (&ip->data, data, sizeof (struct in6_addr)); + } + else { + memcpy (&ip->data, data, sizeof (struct in_addr)); + } + pip = lua_newuserdata (L, sizeof (struct rspamd_lua_ip *)); + lua_setclass (L, "rspamd{ip}", -1); + *pip = ip; } - pip = lua_newuserdata (L, sizeof (struct rspamd_lua_ip *)); - lua_setclass (L, "rspamd{ip}", -1); - *pip = ip; } void |