# HG changeset patch # User Mark Doliner # Date 1064886639 0 # Node ID 4003419d753b12b202cfd55099d2e1b7945190b2 # Parent 237ad253dd3482958c7b588a607d65bef35bd21e [gaim-migrate @ 7609] I found my memleak and I made server-stored buddy icons from other people work again (both problems started with my away changes from this morning). committer: Tailor Script diff -r 237ad253dd34 -r 4003419d753b src/protocols/oscar/locate.c --- a/src/protocols/oscar/locate.c Tue Sep 30 01:32:29 2003 +0000 +++ b/src/protocols/oscar/locate.c Tue Sep 30 01:50:39 2003 +0000 @@ -209,13 +209,11 @@ cur->capabilities = userinfo->capabilities; cur->present |= userinfo->present; - if ((userinfo->away != NULL) && (userinfo->away_len > 0)) { - free(cur->away); - free(cur->away_encoding); - cur->away = (char *)malloc(userinfo->away_len); - memcpy(cur->away, userinfo->away, userinfo->away_len); - cur->away_encoding = strdup(userinfo->away_encoding); /* XXX - This seems to leak occasionally */ - cur->away_len = userinfo->away_len; + if (userinfo->iconcsumlen > 0) { + free(cur->iconcsum); + cur->iconcsum = (fu8_t *)malloc(userinfo->iconcsumlen); + memcpy(cur->iconcsum, userinfo->iconcsum, userinfo->iconcsumlen); + cur->iconcsumlen = userinfo->iconcsumlen; } if ((userinfo->info != NULL) && (userinfo->info_len > 0)) { @@ -226,6 +224,15 @@ cur->info_encoding = strdup(userinfo->info_encoding); /* XXX - This seems to leak occasionally */ cur->info_len = userinfo->info_len; } + + if ((userinfo->away != NULL) && (userinfo->away_len > 0)) { + free(cur->away); + free(cur->away_encoding); + cur->away = (char *)malloc(userinfo->away_len); + memcpy(cur->away, userinfo->away, userinfo->away_len); + cur->away_encoding = strdup(userinfo->away_encoding); /* XXX - This seems to leak occasionally */ + cur->away_len = userinfo->away_len; + } } static void aim_locate_dorequest(aim_session_t *sess) { @@ -1133,10 +1140,7 @@ while (sess->locate.userinfo) { del = sess->locate.userinfo; sess->locate.userinfo = sess->locate.userinfo->next; - free(del->sn); - free(del->info); - free(del->avail); - free(del->away); + aim_info_free(del); free(del); } }