]> source.dussan.org Git - rspamd.git/commitdiff
[Fix] Do not call implicit strlen to avoid issues
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 26 Sep 2019 11:07:29 +0000 (12:07 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 26 Sep 2019 11:07:29 +0000 (12:07 +0100)
src/libmime/message.c
src/libserver/cfg_rcl.c
src/libutil/addr.c
src/lua/lua_ip.c
src/lua/lua_task.c
src/lua/lua_tcp.c
src/lua/lua_udp.c
src/rspamadm/control.c
src/rspamd.c
test/rspamd_upstream_test.c

index ef725e72ce3ec913618ee5ee464e535c187c045d..9e9d27d8af686c132f0d2955646119206afb0e2c 100644 (file)
@@ -1287,7 +1287,7 @@ rspamd_message_parse (struct rspamd_task *task)
                if (recv->real_ip) {
                        if (!rspamd_parse_inet_address (&task->from_addr,
                                        recv->real_ip,
-                                       0)) {
+                                       strlen (recv->real_ip))) {
                                msg_warn_task ("cannot get IP from received header: '%s'",
                                                recv->real_ip);
                                task->from_addr = NULL;
index 86d674c087d8e985187f10d076c609c608927404..04bd9eefc5a2ca66e9c4798e1f857b591823e2b8 100644 (file)
@@ -3260,7 +3260,7 @@ rspamd_rcl_parse_struct_addr (rspamd_mempool_t *pool,
        if (ucl_object_type (obj) == UCL_STRING) {
                val = ucl_object_tostring (obj);
 
-               if (!rspamd_parse_inet_address (target, val, 0)) {
+               if (!rspamd_parse_inet_address (target, val, strlen (val))) {
                        g_set_error (err,
                                CFG_RCL_ERROR,
                                EINVAL,
index 9e2e76f232ed0bd271caa5515b53ad2ca0ac5749..7ab5e11eed843e598feae359c646089560cb65b3 100644 (file)
@@ -689,13 +689,13 @@ rspamd_parse_inet_address_common (rspamd_inet_addr_t **target,
        guint iplen;
        gulong portnum;
 
-       g_assert (src != NULL);
-       g_assert (target != NULL);
-
        if (srclen == 0) {
-               srclen = strlen (src);
+               return FALSE;
        }
 
+       g_assert (src != NULL);
+       g_assert (target != NULL);
+
        rspamd_ip_check_ipv6 ();
 
        if (src[0] == '/' || src[0] == '.') {
@@ -1387,7 +1387,7 @@ rspamd_parse_host_port_priority (const gchar *str,
                        }
                }
 
-               if (!rspamd_parse_inet_address (&cur_addr, str, 0)) {
+               if (!rspamd_parse_inet_address (&cur_addr, str, strlen (str))) {
                        msg_err_pool_check ("cannot parse unix socket definition %s: %s",
                                        str,
                                        strerror (errno));
index 942817b5ca6a302806c257d44cc75773921d37bd..8318125ba13ace08a9db34540468683c8fbf8242 100644 (file)
@@ -369,13 +369,14 @@ lua_ip_from_string (lua_State *L)
        LUA_TRACE_POINT;
        struct rspamd_lua_ip *ip;
        const gchar *ip_str;
+       gsize len;
 
-       ip_str = luaL_checkstring (L, 1);
+       ip_str = luaL_checklstring (L, 1, &len);
        if (ip_str) {
                ip = lua_ip_new (L, NULL);
 
-               if (!rspamd_parse_inet_address (&ip->addr, ip_str, 0)) {
-                       msg_warn ("cannot parse ip: %s", ip_str);
+               if (!rspamd_parse_inet_address (&ip->addr, ip_str, len)) {
+                       msg_warn ("cannot parse ip: %*s", (gint) len, ip_str);
                        ip->addr = NULL;
                }
        }
@@ -559,7 +560,7 @@ rspamd_lua_ip_push_fromstring (lua_State *L, const gchar *ip_str)
        else {
                ip = g_malloc0 (sizeof (struct rspamd_lua_ip));
 
-               if (rspamd_parse_inet_address (&ip->addr, ip_str, 0)) {
+               if (rspamd_parse_inet_address (&ip->addr, ip_str, strlen (ip_str))) {
 
                        pip = lua_newuserdata (L, sizeof (struct rspamd_lua_ip *));
                        rspamd_lua_setclass (L, "rspamd{ip}", -1);
index d2d0c872acc1b7a74aa74d63adaeed9a36f61c89..af1a12fae038f91774e7d103f372908a50c961d1 100644 (file)
@@ -3856,7 +3856,8 @@ lua_task_set_from_ip (lua_State *L)
 {
        LUA_TRACE_POINT;
        struct rspamd_task *task = lua_check_task (L, 1);
-       const gchar *ip_str = luaL_checkstring (L, 2);
+       gsize len;
+       const gchar *ip_str = luaL_checklstring (L, 2, &len);
        rspamd_inet_addr_t *addr = NULL;
 
        if (!task || !ip_str) {
@@ -3866,7 +3867,7 @@ lua_task_set_from_ip (lua_State *L)
        else {
                if (!rspamd_parse_inet_address (&addr,
                                ip_str,
-                               0)) {
+                               len)) {
                        msg_warn_task ("cannot get IP from received header: '%s'",
                                        ip_str);
                }
index 10c57cea44d97f4cddfca11d0d802f9d8b26717e..18c022c38ea7c37ca47b62f118a05ed62e96cb3b 100644 (file)
@@ -1760,7 +1760,7 @@ lua_tcp_request (lua_State *L)
                }
        }
 
-       if (rspamd_parse_inet_address (&cbd->addr, host, 0)) {
+       if (rspamd_parse_inet_address (&cbd->addr, host, strlen (host))) {
                rspamd_inet_address_set_port (cbd->addr, port);
                /* Host is numeric IP, no need to resolve */
                lua_tcp_register_watcher (cbd);
@@ -1942,7 +1942,7 @@ lua_tcp_connect_sync (lua_State *L)
                }
        }
 
-       if (rspamd_parse_inet_address (&cbd->addr, host, 0)) {
+       if (rspamd_parse_inet_address (&cbd->addr, host, strlen (host))) {
                rspamd_inet_address_set_port (cbd->addr, (guint16)port);
                /* Host is numeric IP, no need to resolve */
                if (!lua_tcp_make_connection (cbd)) {
index 94d27bf63bbc7a5ab224e8cf58e2ec084e2e737b..966ce9788a1214be18efdef8064572b9749b954e 100644 (file)
@@ -373,7 +373,7 @@ lua_udp_sendto (lua_State *L) {
                if (lua_type (L, -1) == LUA_TSTRING) {
                        host = luaL_checkstring (L, -1);
 
-                       if (rspamd_parse_inet_address (&addr, host, 0)) {
+                       if (rspamd_parse_inet_address (&addr, host, strlen (host))) {
                                if (port != 0) {
                                        rspamd_inet_address_set_port (addr, port);
                                }
index cdc5044565f3aea8e4f8471abd2f9f990883f494..2f73d09ca1e58d1ab3e6d5c21af03269c4cecb8a 100644 (file)
@@ -220,7 +220,7 @@ rspamadm_control (gint argc, gchar **argv, const struct rspamadm_command *_cmd)
                exit (1);
        }
 
-       if (!rspamd_parse_inet_address (&addr, control_path, 0)) {
+       if (!rspamd_parse_inet_address (&addr, control_path, strlen (control_path))) {
                rspamd_fprintf (stderr, "bad control path: %s\n", control_path);
                exit (1);
        }
index 08f91674b1cabe0e361dd27635d5fbd90c26f513..aa8a6235b3020e6b61e286b7d312ee30453dffff 100644 (file)
@@ -1323,7 +1323,7 @@ main (gint argc, gchar **argv, gchar **env)
        if (rspamd_main->cfg->control_socket_path) {
                if (!rspamd_parse_inet_address (&control_addr,
                                rspamd_main->cfg->control_socket_path,
-                               0)) {
+                               strlen (rspamd_main->cfg->control_socket_path))) {
                        msg_err_main ("cannot parse inet address %s",
                                        rspamd_main->cfg->control_socket_path);
                }
index 7813f9c228f908abde0b916bfc2225ed2e5809d4..12e478793f9ea07c11cd76f5bc32909ebb1a00e5 100644 (file)
@@ -83,9 +83,9 @@ rspamd_upstream_test_func (void)
                        RSPAMD_UPSTREAM_PARSE_DEFAULT,
                        NULL));
        up = rspamd_upstream_get (nls, RSPAMD_UPSTREAM_RANDOM, NULL, 0);
-       rspamd_parse_inet_address (&paddr, "127.0.0.2", 0);
+       rspamd_parse_inet_address (&paddr, "127.0.0.2", strlen ("127.0.0.2"));
        g_assert (rspamd_upstream_add_addr (up, paddr));
-       rspamd_parse_inet_address (&paddr, "::1", 0);
+       rspamd_parse_inet_address (&paddr, "::1", strlen ("::1"));
        g_assert (rspamd_upstream_add_addr (up, paddr));
        /* Rewind to start */
        addr = rspamd_upstream_addr_next (up);