summaryrefslogtreecommitdiffstats
path: root/src/lua/lua_ip.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2014-01-06 16:59:33 +0000
committerVsevolod Stakhov <vsevolod@highsecure.ru>2014-01-06 16:59:33 +0000
commit02c5329cc042d2f58a0af8920888f29d41c43c7b (patch)
tree1621bc3dda8b084dbc557c31586f343e2bdea011 /src/lua/lua_ip.c
parent3acedc39adb56990a6241936814938afaf96b8bb (diff)
downloadrspamd-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.c23
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