diff libpurple/protocols/msn/oim.c @ 23550:fe2e20ff3345

fixes a crash and probably more correct and definitely easier to understand splitting. Fixes #6343. Thanks Dimmuxx for testing since I was too lazy to do it myself
author Ka-Hing Cheung <khc@hxbc.us>
date Wed, 16 Jul 2008 02:39:15 +0000
parents 3249c367577b
children 73f61c445827
line wrap: on
line diff
--- a/libpurple/protocols/msn/oim.c	Wed Jul 16 00:59:19 2008 +0000
+++ b/libpurple/protocols/msn/oim.c	Wed Jul 16 02:39:15 2008 +0000
@@ -274,22 +274,27 @@
 	char *oim_base64;
 	char *c;
 	int len;
+	size_t base64_len;
 
 	purple_debug_info("msn", "Encoding OIM Message...\n");
 	len = strlen(body);
 	c = oim_base64 = purple_base64_encode((const guchar *)body, len);
+	base64_len = strlen(oim_base64);
 	purple_debug_info("msn", "Encoded base64 body:{%s}\n", oim_base64);
 
 	oim_body = g_string_new(NULL);
 	g_string_printf(oim_body, MSN_OIM_MSG_TEMPLATE,
-	                oim->run_id, oim->send_seq);
+		oim->run_id, oim->send_seq, "");
 
-	len = ((len / 3) + 1) * 4 - 76;
-	while ((c - oim_base64) < len) {
-		g_string_append_len(oim_body, c, 76);
+#define OIM_LINE_LEN 76
+	while (base64_len > OIM_LINE_LEN) {
+		g_string_append_len(oim_body, c, OIM_LINE_LEN);
 		g_string_append_c(oim_body, '\n');
-		c += 76;
+		c += OIM_LINE_LEN;
+		base64_len -= OIM_LINE_LEN;
 	}
+#undef OIM_LINE_LEN
+
 	g_string_append(oim_body, c);
 
 	g_free(oim_base64);