summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--src/common/outbound.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/common/outbound.c b/src/common/outbound.c
index 936e0ede..cd0cd021 100644
--- a/src/common/outbound.c
+++ b/src/common/outbound.c
@@ -2569,7 +2569,8 @@ cmd_load (struct session *sess, char *tbuf, char *word[], char *word_eol[])
 char *
 split_up_text(struct session *sess, char *text, int cmd_length, char *split_text)
 {
-	unsigned int max;
+	unsigned int max, space_offset;
+	char *space;
 
 	/* maximum allowed text */
 	/* :nickname!username@host.com cmd_length */
@@ -2602,6 +2603,17 @@ split_up_text(struct session *sess, char *text, int cmd_length, char *split_text
 		}
 		max = i;
 
+		/* Try splitting at last space */
+		space = g_utf8_strrchr (text, max, ' ');
+		if (space)
+		{
+			space_offset = g_utf8_pointer_to_offset (text, space);
+
+			/* Only split if last word is of sane length */
+			if (max != space_offset && max - space_offset < 20)
+				max = space_offset + 1;
+		}
+
 		split_text = g_strdup_printf ("%.*s", max, text);
 
 		return split_text;