diff -r b52bf81539dd -r 6f60b7fe3381 src/protocols/toc/toc.c --- a/src/protocols/toc/toc.c Thu Sep 13 22:57:53 2001 +0000 +++ b/src/protocols/toc/toc.c Thu Sep 13 23:42:44 2001 +0000 @@ -221,20 +221,21 @@ * so we just return here like everything went through fine */ return 0; + if (olen < 0) + len = escape_message(buf); + else + len = olen; + /* One _last_ 2048 check here! This shouldn't ever * get hit though, hopefully. If it gets hit on an IM * It'll lose the last " and the message won't go through, * but this'll stop a segfault. */ - if (strlen(buf) > (MSG_LEN - sizeof(hdr))) { + if (len > MSG_LEN) { debug_printf("message too long, truncating\n"); - buf[MSG_LEN - sizeof(hdr) - 3] = '"'; - buf[MSG_LEN - sizeof(hdr) - 2] = '\0'; + buf[MSG_LEN - 1] = '\0'; + len = MSG_LEN; } - if (olen < 0) - len = escape_message(buf); - else - len = olen; hdr.ast = '*'; hdr.type = type; hdr.seqno = htons(tdt->seqno++ & 0xffff); @@ -759,10 +760,11 @@ static void toc_set_config(struct gaim_connection *gc) { - char buf[MSG_LEN], snd[BUF_LEN * 2]; - toc_build_config(gc, buf, MSG_LEN, FALSE); + char *buf = g_malloc(MSG_LEN), snd[BUF_LEN * 2]; + toc_build_config(gc, buf, MSG_LEN - strlen("toc_set_config \\{\\}"), FALSE); g_snprintf(snd, MSG_LEN, "toc_set_config {%s}", buf); sflap_send(gc, snd, -1, TYPE_DATA); + g_free(buf); } static void toc_get_info(struct gaim_connection *g, char *name)