changeset 9133:c42c3ac3466e

[gaim-migrate @ 9915] "Enclosed patch (against currrent CVS) fixes a crash that can happen during resolving the buddy list in SILC prpl." -- Pekka Riikonen committer: Tailor Script <tailor@pidgin.im>
author Christian Hammond <chipx86@chipx86.com>
date Sun, 30 May 2004 20:53:02 +0000
parents 9c1358090c6f
children 6d7bb1274755
files ChangeLog src/protocols/silc/buddy.c
diffstat 2 files changed, 49 insertions(+), 45 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Sun May 30 20:41:51 2004 +0000
+++ b/ChangeLog	Sun May 30 20:53:02 2004 +0000
@@ -3,6 +3,8 @@
 version 0.79cvs:
 	Bug Fixes:
 	* Non-looping animated icons no longer cause Gaim to freeze
+	* Fixed a crash in SILC that sometimes happened when resolving
+	  the buddy list (Pekka Riikonen)
 
 version 0.78 (05/30/2004):
 	New Features:
--- a/src/protocols/silc/buddy.c	Sun May 30 20:41:51 2004 +0000
+++ b/src/protocols/silc/buddy.c	Sun May 30 20:53:02 2004 +0000
@@ -311,7 +311,7 @@
 static void
 silcgaim_buddy_keyagr(GaimBlistNode *node, gpointer data)
 {
-	GaimBuddy *buddy; 
+	GaimBuddy *buddy;
 
 	buddy = (GaimBuddy *)node;
 	silcgaim_buddy_keyagr_do(buddy->account->gc, buddy->name, FALSE);
@@ -797,56 +797,58 @@
 	/* Now that we have the public key and we trust it now we
 	   save the attributes of the buddy and update its status. */
 
-	silc_dlist_start(client_entry->attrs);
-	while ((attr = silc_dlist_get(client_entry->attrs)) != SILC_LIST_END) {
-		attribute = silc_attribute_get_attribute(attr);
-
-		switch (attribute) {
-
-		case SILC_ATTRIBUTE_USER_INFO:
-			if (!silc_attribute_get_object(attr, (void *)&vcard,
-						       sizeof(vcard)))
-				continue;
-			break;
+	if (client_entry->attrs) {
+		silc_dlist_start(client_entry->attrs);
+		while ((attr = silc_dlist_get(client_entry->attrs))
+		       != SILC_LIST_END) {
+			attribute = silc_attribute_get_attribute(attr);
 
-		case SILC_ATTRIBUTE_STATUS_MESSAGE:
-			if (!silc_attribute_get_object(attr, (void *)&message,
-						       sizeof(message)))
-				continue;
-			break;
+			switch (attribute) {
+			case SILC_ATTRIBUTE_USER_INFO:
+				if (!silc_attribute_get_object(attr, (void *)&vcard,
+							       sizeof(vcard)))
+					continue;
+				break;
 
-		case SILC_ATTRIBUTE_EXTENSION:
-			if (!silc_attribute_get_object(attr, (void *)&extension,
-						       sizeof(extension)))
-				continue;
-			break;
+			case SILC_ATTRIBUTE_STATUS_MESSAGE:
+				if (!silc_attribute_get_object(attr, (void *)&message,
+							       sizeof(message)))
+					continue;
+				break;
+
+			case SILC_ATTRIBUTE_EXTENSION:
+				if (!silc_attribute_get_object(attr, (void *)&extension,
+							       sizeof(extension)))
+					continue;
+				break;
 
-		case SILC_ATTRIBUTE_SERVER_PUBLIC_KEY:
-			if (serverpk.type)
-				continue;
-			if (!silc_attribute_get_object(attr, (void *)&serverpk,
-						       sizeof(serverpk)))
-				continue;
-			break;
+			case SILC_ATTRIBUTE_SERVER_PUBLIC_KEY:
+				if (serverpk.type)
+					continue;
+				if (!silc_attribute_get_object(attr, (void *)&serverpk,
+							       sizeof(serverpk)))
+					continue;
+				break;
 
-		case SILC_ATTRIBUTE_USER_DIGITAL_SIGNATURE:
-			if (usersign.data)
-				continue;
-			if (!silc_attribute_get_object(attr, (void *)&usersign,
-						       sizeof(usersign)))
-				continue;
-			break;
+			case SILC_ATTRIBUTE_USER_DIGITAL_SIGNATURE:
+				if (usersign.data)
+					continue;
+				if (!silc_attribute_get_object(attr, (void *)&usersign,
+							       sizeof(usersign)))
+					continue;
+				break;
 
-		case SILC_ATTRIBUTE_SERVER_DIGITAL_SIGNATURE:
-			if (serversign.data)
-				continue;
-			if (!silc_attribute_get_object(attr, (void *)&serversign,
-						       sizeof(serversign)))
-				continue;
-			break;
+			case SILC_ATTRIBUTE_SERVER_DIGITAL_SIGNATURE:
+				if (serversign.data)
+					continue;
+				if (!silc_attribute_get_object(attr, (void *)&serversign,
+							       sizeof(serversign)))
+					continue;
+				break;
 
-		default:
-			break;
+			default:
+				break;
+			}
 		}
 	}