# HG changeset patch # User Elliott Sales de Andrade # Date 1216086121 0 # Node ID 3249c367577b2249d8bed4ef4e864142f44678b7 # Parent 48024418982cc0c75bad2920db9ff0263c3480cb When sending MSN OIM's, wrap Base64'd text at 76 characters. Because it's Base64-encoded, this problem doesn't necessarily occur at exactly 76 characters of text to *send*. Really fixes #5379. diff -r 48024418982c -r 3249c367577b libpurple/protocols/msn/oim.c --- a/libpurple/protocols/msn/oim.c Mon Jul 14 04:55:34 2008 +0000 +++ b/libpurple/protocols/msn/oim.c Tue Jul 15 01:42:01 2008 +0000 @@ -270,16 +270,31 @@ static gchar * msn_oim_msg_to_str(MsnOim *oim, const char *body) { - char *oim_body,*oim_base64; + GString *oim_body; + char *oim_base64; + char *c; + int len; + + purple_debug_info("msn", "Encoding OIM Message...\n"); + len = strlen(body); + c = oim_base64 = purple_base64_encode((const guchar *)body, len); + purple_debug_info("msn", "Encoded base64 body:{%s}\n", oim_base64); - purple_debug_info("msn", "encode OIM Message...\n"); - oim_base64 = purple_base64_encode((const guchar *)body, strlen(body)); - purple_debug_info("msn", "encoded base64 body:{%s}\n", oim_base64); - oim_body = g_strdup_printf(MSN_OIM_MSG_TEMPLATE, - oim->run_id,oim->send_seq,oim_base64); + oim_body = g_string_new(NULL); + g_string_printf(oim_body, MSN_OIM_MSG_TEMPLATE, + 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); + g_string_append_c(oim_body, '\n'); + c += 76; + } + g_string_append(oim_body, c); + g_free(oim_base64); - return oim_body; + return g_string_free(oim_body, FALSE); } /*