From 9fca06579d61d6360520db98092bce13d30d39ce Mon Sep 17 00:00:00 2001 From: Wilmer van der Gaast Date: Mon, 15 Mar 2010 10:26:25 +0000 Subject: Deal with stupid (on first sight, at least) Yahoo! server behaviour causing double free()s on testing ATM. Apparently it's perfectly legal to give buddy information with an "end buddy" marker but no "begin buddy". --- protocols/yahoo/libyahoo2.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'protocols') diff --git a/protocols/yahoo/libyahoo2.c b/protocols/yahoo/libyahoo2.c index 5b2ff44e..1bfc2e59 100644 --- a/protocols/yahoo/libyahoo2.c +++ b/protocols/yahoo/libyahoo2.c @@ -1343,7 +1343,11 @@ static void yahoo_process_status(struct yahoo_input_data *yid, break; case 301: /* End buddy */ if (!strcmp(pair->value, "315") && u) { - users = y_list_prepend(users, u); + /* Sometimes user info comes in an odd format with no + "begin buddy" but *with* an "end buddy". Don't add + it twice. */ + if (!y_list_find(users, u)) + users = y_list_prepend(users, u); u = yd->half_user = NULL; } break; -- cgit v1.2.3