libpurple/dnssrv.c

changeset 35382
1b75f8a4129c
parent 35378
5d9e2581005b
child 35489
e1452d2416ed
--- a/libpurple/dnssrv.c	Fri Feb 07 16:32:40 2014 -0500
+++ b/libpurple/dnssrv.c	Sat Feb 08 00:57:28 2014 +0100
@@ -137,6 +137,8 @@
 	size_t runningtotal;
 	int r;
 
+	g_return_val_if_fail(list != NULL, NULL);
+
 	runningtotal = 0;
 	cur = list;
 
@@ -157,6 +159,8 @@
 	r = runningtotal ? g_random_int_range(1, runningtotal + 1) : 0;
 	cur = list;
 	while (r > ((PurpleSrvResponseContainer *)cur->data)->sum) {
+		if (G_UNLIKELY(!cur->next))
+			break;
 		cur = cur->next;
 	}
 
@@ -180,6 +184,8 @@
 		/* Nothing to sort */
 		return;
 
+	g_return_if_fail(list != NULL);
+
 	/* First build a list of container structs */
 	for (i = 0, cur = list; i < num; i++, cur = cur->next) {
 		container = g_new(PurpleSrvResponseContainer, 1);
@@ -198,6 +204,7 @@
 		cur->data = container->response;
 		g_free(container);
 		cur = cur->next;
+		g_return_if_fail(cur);
 	}
 }
 
@@ -225,6 +232,9 @@
 	count = 1;
 	while (cur) {
 		PurpleSrvResponse *next_response;
+
+		g_return_val_if_fail(cur->data, list);
+
 		pref = ((PurpleSrvResponse *)cur->data)->pref;
 		next_response = cur->next ? cur->next->data : NULL;
 		if (!next_response || next_response->pref != pref) {

mercurial