--- 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) {