From: Stu T. <nos...@us...> - 2004-10-13 14:42:31
|
Update of /cvsroot/gaim/gaim/src/protocols/msn In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25553/src/protocols/msn Modified Files: msg.c slp.h slplink.c slplink.h Log Message: 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. Index: msg.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/protocols/msn/msg.c,v retrieving revision 1.36 retrieving revision 1.37 diff -u -d -p -r1.36 -r1.37 --- msg.c 6 Jun 2004 03:42:54 -0000 1.36 +++ msg.c 13 Oct 2004 14:40:45 -0000 1.37 @@ -658,20 +658,17 @@ msn_message_show_readable(MsnMessage *ms 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 @@ msn_message_show_readable(MsnMessage *ms 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 { Index: slp.h =================================================================== RCS file: /cvsroot/gaim/gaim/src/protocols/msn/slp.h,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -p -r1.5 -r1.6 --- slp.h 25 Aug 2004 01:43:54 -0000 1.5 +++ slp.h 13 Oct 2004 14:40:45 -0000 1.6 @@ -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" Index: slplink.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/protocols/msn/slplink.c,v retrieving revision 1.14 retrieving revision 1.15 diff -u -d -p -r1.14 -r1.15 --- slplink.c 12 Oct 2004 15:40:15 -0000 1.14 +++ slplink.c 13 Oct 2004 14:40:45 -0000 1.15 @@ -447,7 +447,6 @@ msn_slplink_process_msg(MsnSlpLink *slpl 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 @@ msn_slplink_process_msg(MsnSlpLink *slpl } } } + 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 @@ msn_slplink_process_msg(MsnSlpLink *slpl } 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 @@ msn_slplink_process_msg(MsnSlpLink *slpl } 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 @@ msn_slplink_message_find(MsnSlpLink *slp { MsnSlpMessage *slpmsg = e->data; - if (slpmsg->id == id) + if ((slpmsg->session_id == session_id) && (slpmsg->id == id)) return slpmsg; } Index: slplink.h =================================================================== RCS file: /cvsroot/gaim/gaim/src/protocols/msn/slplink.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -p -r1.2 -r1.3 --- slplink.h 6 Jun 2004 03:42:54 -0000 1.2 +++ slplink.h 13 Oct 2004 14:40:45 -0000 1.3 @@ -70,7 +70,7 @@ void msn_slplink_send_slpmsg(MsnSlpLink 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); |