Mercurial > pidgin
comparison libpurple/protocols/oscar/oscar.c @ 25934:3461bf74cbf1
Fix a crash in this branch that I introduced a few days ago. bname
was null here because it got initialized at a time when b was null.
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Wed, 28 Jan 2009 07:12:43 +0000 |
parents | a8c86e97d4f0 |
children | 8c8948b9f602 |
comparison
equal
deleted
inserted
replaced
25933:a8c86e97d4f0 | 25934:3461bf74cbf1 |
---|---|
805 OscarData *od; | 805 OscarData *od; |
806 PurplePresence *presence = NULL; | 806 PurplePresence *presence = NULL; |
807 PurpleStatus *status = NULL; | 807 PurpleStatus *status = NULL; |
808 gchar *message = NULL, *itmsurl = NULL, *tmp; | 808 gchar *message = NULL, *itmsurl = NULL, *tmp; |
809 gboolean is_away; | 809 gboolean is_away; |
810 const char *bname; | |
811 | 810 |
812 od = purple_connection_get_protocol_data(gc); | 811 od = purple_connection_get_protocol_data(gc); |
813 | 812 |
814 bname = purple_buddy_get_name(b); | |
815 if (userinfo == NULL) | 813 if (userinfo == NULL) |
816 userinfo = aim_locate_finduserinfo(od, bname); | 814 userinfo = aim_locate_finduserinfo(od, purple_buddy_get_name(b)); |
817 | 815 |
818 if ((user_info == NULL) || ((b == NULL) && (userinfo == NULL))) | 816 if ((user_info == NULL) || ((b == NULL) && (userinfo == NULL))) |
819 return; | 817 return; |
820 | 818 |
821 if (b == NULL) | 819 if (b == NULL) |
884 message = tmp; | 882 message = tmp; |
885 } | 883 } |
886 | 884 |
887 if (b) { | 885 if (b) { |
888 if (purple_presence_is_online(presence)) { | 886 if (purple_presence_is_online(presence)) { |
889 if (oscar_util_valid_name_icq(bname) || is_away || !message || !(*message)) { | 887 if (oscar_util_valid_name_icq(purple_buddy_get_name(b)) || is_away || !message || !(*message)) { |
890 /* Append the status name for online ICQ statuses, away AIM statuses, and for all buddies with no message. | 888 /* Append the status name for online ICQ statuses, away AIM statuses, and for all buddies with no message. |
891 * If the status name and the message are the same, only show one. */ | 889 * If the status name and the message are the same, only show one. */ |
892 const char *status_name = purple_status_get_name(status); | 890 const char *status_name = purple_status_get_name(status); |
893 if (status_name && message && !strcmp(status_name, message)) | 891 if (status_name && message && !strcmp(status_name, message)) |
894 status_name = NULL; | 892 status_name = NULL; |
899 (message && *message) ? message : ""); | 897 (message && *message) ? message : ""); |
900 g_free(message); | 898 g_free(message); |
901 message = tmp; | 899 message = tmp; |
902 } | 900 } |
903 | 901 |
902 } else if (aim_ssi_waitingforauth(od->ssi.local, | |
903 aim_ssi_itemlist_findparentname(od->ssi.local, purple_buddy_get_name(b)), | |
904 purple_buddy_get_name(b))) | |
905 { | |
906 /* Note if an offline buddy is not authorized */ | |
907 tmp = g_strdup_printf("%s%s%s", | |
908 _("Not Authorized"), | |
909 (message && *message) ? ": " : "", | |
910 (message && *message) ? message : ""); | |
911 g_free(message); | |
912 message = tmp; | |
904 } else { | 913 } else { |
905 if (aim_ssi_waitingforauth(od->ssi.local, | 914 g_free(message); |
906 aim_ssi_itemlist_findparentname(od->ssi.local, bname), | 915 message = g_strdup(_("Offline")); |
907 bname)) { | |
908 /* Note if an offline buddy is not authorized */ | |
909 tmp = g_strdup_printf("%s%s%s", | |
910 _("Not Authorized"), | |
911 (message && *message) ? ": " : "", | |
912 (message && *message) ? message : ""); | |
913 g_free(message); | |
914 message = tmp; | |
915 } else { | |
916 g_free(message); | |
917 message = g_strdup(_("Offline")); | |
918 } | |
919 } | 916 } |
920 | 917 |
921 } | 918 } |
922 | 919 |
923 purple_notify_user_info_add_pair(user_info, _("Status"), message); | 920 purple_notify_user_info_add_pair(user_info, _("Status"), message); |