commit 66d8b6e: [Fix] Do not call implicit strlen to avoid issues

Vsevolod Stakhov vsevolod at highsecure.ru
Thu Sep 26 11:14:05 UTC 2019


Author: Vsevolod Stakhov
Date: 2019-09-26 12:07:29 +0100
URL: https://github.com/rspamd/rspamd/commit/66d8b6e43447eeebe1ca1c2f79fa4b52173a1b6b

[Fix] Do not call implicit strlen to avoid issues

---
 src/libmime/message.c       |  2 +-
 src/libserver/cfg_rcl.c     |  2 +-
 src/libutil/addr.c          | 10 +++++-----
 src/lua/lua_ip.c            |  9 +++++----
 src/lua/lua_task.c          |  5 +++--
 src/lua/lua_tcp.c           |  4 ++--
 src/lua/lua_udp.c           |  2 +-
 src/rspamadm/control.c      |  2 +-
 src/rspamd.c                |  2 +-
 test/rspamd_upstream_test.c |  4 ++--
 10 files changed, 22 insertions(+), 20 deletions(-)

diff --git a/src/libmime/message.c b/src/libmime/message.c
index ef725e72c..9e9d27d8a 100644
--- a/src/libmime/message.c
+++ b/src/libmime/message.c
@@ -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;
diff --git a/src/libserver/cfg_rcl.c b/src/libserver/cfg_rcl.c
index 86d674c08..04bd9eefc 100644
--- a/src/libserver/cfg_rcl.c
+++ b/src/libserver/cfg_rcl.c
@@ -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,
diff --git a/src/libutil/addr.c b/src/libutil/addr.c
index 9e2e76f23..7ab5e11ee 100644
--- a/src/libutil/addr.c
+++ b/src/libutil/addr.c
@@ -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));
diff --git a/src/lua/lua_ip.c b/src/lua/lua_ip.c
index 942817b5c..8318125ba 100644
--- a/src/lua/lua_ip.c
+++ b/src/lua/lua_ip.c
@@ -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);
diff --git a/src/lua/lua_task.c b/src/lua/lua_task.c
index d2d0c872a..af1a12fae 100644
--- a/src/lua/lua_task.c
+++ b/src/lua/lua_task.c
@@ -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);
 		}
diff --git a/src/lua/lua_tcp.c b/src/lua/lua_tcp.c
index 10c57cea4..18c022c38 100644
--- a/src/lua/lua_tcp.c
+++ b/src/lua/lua_tcp.c
@@ -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)) {
diff --git a/src/lua/lua_udp.c b/src/lua/lua_udp.c
index 94d27bf63..966ce9788 100644
--- a/src/lua/lua_udp.c
+++ b/src/lua/lua_udp.c
@@ -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);
 				}
diff --git a/src/rspamadm/control.c b/src/rspamadm/control.c
index cdc504456..2f73d09ca 100644
--- a/src/rspamadm/control.c
+++ b/src/rspamadm/control.c
@@ -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);
 	}
diff --git a/src/rspamd.c b/src/rspamd.c
index 08f91674b..aa8a6235b 100644
--- a/src/rspamd.c
+++ b/src/rspamd.c
@@ -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);
 		}
diff --git a/test/rspamd_upstream_test.c b/test/rspamd_upstream_test.c
index 7813f9c22..12e478793 100644
--- a/test/rspamd_upstream_test.c
+++ b/test/rspamd_upstream_test.c
@@ -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);


More information about the Commits mailing list