# HG changeset patch # User Stu Tomlinson # Date 1097678445 0 # Node ID 1843023b818983f52b5502ee7bd9b2ef750378f2 # Parent 4e376556566e2c2e1c2dbc54805f60265ccde34a [gaim-migrate @ 11109] This fixes the crash after signon on MSN when you have Miranda users on your buddy list. I also tidied up the printing of SLP debug info when it's enabled, but it's not enabled unless you explicitly enable it, so you probably won't notice. committer: Tailor Script diff -r 4e376556566e -r 1843023b8189 src/protocols/msn/msg.c --- a/src/protocols/msn/msg.c Wed Oct 13 12:26:10 2004 +0000 +++ b/src/protocols/msn/msg.c Wed Oct 13 14:40:45 2004 +0000 @@ -658,20 +658,17 @@ if (msg->msnslp_message) { - g_string_append_printf(str, "%u ", msg->msnslp_header.session_id); - g_string_append_printf(str, "%u ", msg->msnslp_header.id); - g_string_append_printf(str, "%llu ", msg->msnslp_header.offset); - g_string_append(str, "\r\n"); - g_string_append_printf(str, "%llu ", - msg->msnslp_header.total_size); - g_string_append_printf(str, "%u ", msg->msnslp_header.length); - g_string_append_printf(str, "%u ", msg->msnslp_header.flags); - g_string_append(str, "\r\n"); - g_string_append_printf(str, "%u ", msg->msnslp_header.ack_id); - g_string_append_printf(str, "%u ", msg->msnslp_header.ack_sub_id); - g_string_append_printf(str, "%lld ", msg->msnslp_header.ack_size); - g_string_append(str, "\r\n"); + g_string_append_printf(str, "Session ID: %u\r\n", msg->msnslp_header.session_id); + g_string_append_printf(str, "ID: %u\r\n", msg->msnslp_header.id); + g_string_append_printf(str, "Offset: %llu\r\n", msg->msnslp_header.offset); + g_string_append_printf(str, "Total size: %llu\r\n", msg->msnslp_header.total_size); + g_string_append_printf(str, "Length: %u\r\n", msg->msnslp_header.length); + g_string_append_printf(str, "Flags: 0x%x\r\n", msg->msnslp_header.flags); + g_string_append_printf(str, "ACK ID: %u\r\n", msg->msnslp_header.ack_id); + g_string_append_printf(str, "SUB ID: %u\r\n", msg->msnslp_header.ack_sub_id); + g_string_append_printf(str, "ACK Size: %lld\r\n", msg->msnslp_header.ack_size); +#ifdef DEBUG_SLP_VERBOSE if (body != NULL) { if (text_body) @@ -696,9 +693,9 @@ g_string_append(str, "\r\n"); } } +#endif - g_string_append_printf(str, "%u ", msg->msnslp_footer.value); - g_string_append(str, "\r\n"); + g_string_append_printf(str, "Footer: %u\r\n", msg->msnslp_footer.value); } else { diff -r 4e376556566e -r 1843023b8189 src/protocols/msn/slp.h --- a/src/protocols/msn/slp.h Wed Oct 13 12:26:10 2004 +0000 +++ b/src/protocols/msn/slp.h Wed Oct 13 14:40:45 2004 +0000 @@ -25,6 +25,7 @@ #define _MSN_SLP_H_ /* #define DEBUG_SLP 1 */ +/* #define DEBUG_SLP_VERBOSE 1 */ /* #define DEBUG_SLP_FILES 1 */ #include "slpcall.h" diff -r 4e376556566e -r 1843023b8189 src/protocols/msn/slplink.c --- a/src/protocols/msn/slplink.c Wed Oct 13 12:26:10 2004 +0000 +++ b/src/protocols/msn/slplink.c Wed Oct 13 14:40:45 2004 +0000 @@ -447,7 +447,6 @@ slpmsg->session_id = msg->msnslp_header.session_id; slpmsg->size = msg->msnslp_header.total_size; slpmsg->flags = msg->msnslp_header.flags; - slpmsg->buffer = g_malloc(slpmsg->size); if (slpmsg->session_id) { @@ -471,10 +470,19 @@ } } } + if (!slpmsg->fp) + { + slpmsg->buffer = g_try_malloc(slpmsg->size); + if (slpmsg->buffer == NULL) + { + gaim_debug_error("msn", "Failed to allocate buffer for slpmsg\n"); + return; + } + } } else { - slpmsg = msn_slplink_message_find(slplink, msg->msnslp_header.id); + slpmsg = msn_slplink_message_find(slplink, msg->msnslp_header.session_id, msg->msnslp_header.id); } if (slpmsg != NULL) @@ -486,7 +494,13 @@ } else { - memcpy(slpmsg->buffer + offset, data, len); + if ((offset + len) > slpmsg->size) + { + gaim_debug_error("msn", "Oversized slpmsg\n"); + g_return_if_reached(); + } + else + memcpy(slpmsg->buffer + offset, data, len); } } else @@ -544,7 +558,7 @@ } MsnSlpMessage * -msn_slplink_message_find(MsnSlpLink *slplink, long id) +msn_slplink_message_find(MsnSlpLink *slplink, long session_id, long id) { GList *e; @@ -552,7 +566,7 @@ { MsnSlpMessage *slpmsg = e->data; - if (slpmsg->id == id) + if ((slpmsg->session_id == session_id) && (slpmsg->id == id)) return slpmsg; } diff -r 4e376556566e -r 1843023b8189 src/protocols/msn/slplink.h --- a/src/protocols/msn/slplink.h Wed Oct 13 12:26:10 2004 +0000 +++ b/src/protocols/msn/slplink.h Wed Oct 13 14:40:45 2004 +0000 @@ -70,7 +70,7 @@ void msn_slplink_unleash(MsnSlpLink *slplink); void msn_slplink_send_ack(MsnSlpLink *slplink, MsnMessage *msg); void msn_slplink_process_msg(MsnSlpLink *slplink, MsnMessage *msg); -MsnSlpMessage *msn_slplink_message_find(MsnSlpLink *slplink, long id); +MsnSlpMessage *msn_slplink_message_find(MsnSlpLink *slplink, long session_id, long id); void msn_slplink_append_slp_msg(MsnSlpLink *slplink, MsnSlpMessage *slpmsg); void msn_slplink_remove_slp_msg(MsnSlpLink *slplink, MsnSlpMessage *slpmsg);