diff src/protocols/msn/slplink.c @ 10092:1843023b8189

[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 <tailor@pidgin.im>
author Stu Tomlinson <stu@nosnilmot.com>
date Wed, 13 Oct 2004 14:40:45 +0000
parents 65967ba9e66d
children 65e7df286076
line wrap: on
line diff
--- 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;
 	}