[Pidgin] #15327: CAP plugin crash FIX

Pidgin trac at pidgin.im
Fri Sep 21 11:21:35 EDT 2012


#15327: CAP plugin crash FIX
--------------------+-----------------------------------------------------
 Reporter:  Euro    |      Owner:  rekkanoryo
     Type:  defect  |     Status:  new
Milestone:          |  Component:  unclassified
  Version:  2.10.6  |   Keywords:  crash cap plugin segfault skype tooltip
--------------------+-----------------------------------------------------
 I have found a way to reproduce the a crash:

 1. enabled the cap plugin
 2. connect to skype account via the pidgin-skype plugin
 3. have a not-authorized contact in your list "(To pending)"
 4. hover this user in pidgin
 5. BANG SEGFAULT!

 So it has to do with tooltip callback in the plugin:

 {{{
 static void drawing_tooltip(PurpleBlistNode *node, GString *text, gboolean
 full);
 }}}

 The last log messages shown were:

 {{{
 (17:05:36) g_log: purple_status_get_name: assertion `status != NULL'
 failed
 (17:05:36) g_log: purple_status_get_id: assertion `status != NULL' failed
 (17:05:36) g_log: purple_status_get_id: assertion `status != NULL' failed
 }}}
 (in this cases these functions return NULL)

 So i searched the plugin code for calls to ''purple_status_get_id'' and
 found this line:

 cap.c line 97
 {{{
 if(strcmp(purple_status_get_id(get_status_for(buddy)), "offline") == 0) {
 }}}

 So if ''get_status_for(buddy)'' returns NULL (because of a non-authorized
 Buddy [ano: it should return invisible, but the skype plugin seems to have
 a bug here]) it leads to:

 {{{
 strcmp(NULL, "offl...
 }}}
 , what causes the SEGFAULT.

 Fix for line 97:
 {{{
 char *status = purple_status_get_id(get_status_for(buddy));
 // btw. gchar *status_id is already defined above in the function, i dont
 know why it is not used here
 if(status != NULL && strcmp(status, "offline") == 0) {
 }}}

 I dont now where and how to send a patch, sorry.

 PS: Sorry for my english-skills :D

-- 
Ticket URL: <https://developer.pidgin.im/ticket/15327>
Pidgin <http://pidgin.im>
Pidgin


More information about the Tracker mailing list