[Pidgin] #16188: Jabber capabilities not updated properly when new presence recieved

Pidgin trac at pidgin.im
Sat Apr 12 01:09:56 EDT 2014

#16188: Jabber capabilities not updated properly when new presence recieved
 Reporter:  wpettersson  |       Owner:  deryni
     Type:  defect       |      Status:  new
Milestone:               |   Component:  XMPP
  Version:  2.10.9       |  Resolution:
 Keywords:  voice video  |

Comment (by wpettersson):

 Problem was down to a difference between jabber_caps_exts_known (which
 determines whether to update capabilities) and
 jabber_resource_has_capability. It seems JabberCapsNodeExts stores, for
 each capability, a GList in the GHashTable *exts (caps.h:65).
 jabber_resource_has_capability only "finds" a capability if there is a
 corresponding GList in the hash table, and if the GList contains the
 string representation of the capability. However, jabber_caps_exts_known
 only checks for the entry in the hash table, it doesn't check whether the
 string is in the corresponding GList.

 As a result, if you ever got to a situation where a capability has an
 entry in the hash table, but the capability does not exist in the
 corresponding GList then for any new presence jabber_caps_exts_known will
 say "We already know about that, and won't update but
 jabber_resource_has_capability will always say "No, don't have that

 I've attached a patch which fixes the problem for me by adding the extra
 check to jabber_caps_exts_known.

 A few notes, though.

 caps.h:61 warns against using the hash table. Seeing as it was used
 previously, I wasn't sure if my change was ok. Instead of using
 "jabber_caps_exts_known" to check for whether a capability is known, we
 could just use jabbeer_resource_has_capability on line 1052 of presence.c,
 but then there's that hack mentioned on line 360 of caps.c so I don't know
 how those two would cooperate.

Ticket URL: <https://developer.pidgin.im/ticket/16188#comment:1>
Pidgin <https://pidgin.im>

More information about the Tracker mailing list