Re: hippo-dbus-im mugshot crasher in f8

On Mon, 2007-10-29 at 23:44 -0400, Havoc Pennington wrote:
> Hi,
> On 10/29/07, Colin Walters <walters redhat com> wrote:
> > See:
> >
> >
> > We can delete all this pidgin code, right?
> Most of it is still used afaik. The only obsolete thing is exporting
> the non-data-model API from hippo-dbus-im.c, but the crash doesn't
> look related to that.
> It's kind of hard to diagnose from the backtrace, but apparently in
> hippo-dbus-im.c:hippo_dbus_im_update_buddy() this line crashes?
>  buddy = g_hash_table_lookup(im->buddies, buddy_id);
> It doesn't look like either of those args to the hash lookup could be
> NULL, though, unless perhaps a return_if_fail(whatever, NULL) is
> tripped someplace.

OK, I ran into this problem overnight and happened to be running Mugshot
in a debugger ... it's actually a different hash table lookup - it's in:

    if (g_hash_table_lookup(id->icon_requests, icon_hash) != NULL)
        return; /* we have a request pending already */

And the problem is that icon_hash is NULL. 

The existing buddy looks like:
{resource_id = 0x9b567b0 "online-desktop:/o/pidgin/buddy/aim.m<...>", 
  protocol = 0x9b568a8 "aim", name = 0x9b568c8 "m<....>", alias = 0x0, 
  is_online = 1, status = 0x9b569e0 "Available", webdav_url = 0x0, 
  icon_hash = 0x9bfb218 "c6435469345f5a1974d435837d4a2d249c57f69e", 
  icon_data_url = 0x9cc3178 "data:image/jpg;base64,/9j/4AAQSkZJRg..."}

So the problem in particular is the transition from icon_hash != NULL
to icon_hash == NULL.

I doubt it's actually someone removing their AIM avatar/photo; more
likely there was a communication breakdown somewhere upstream of this
code or a bug in the Pidgin code.


    /* has_icon_hash() allows icon==NULL. It checks whether                                                                         
     * the buddy we have stored has a matching hash, including                                                                      
     * matching hash of NULL                                                                                                        
    if (!hippo_dbus_im_has_icon_hash(resource_id, icon)) {
+         if (icon != NULL)
+             make_icon_request(id, icon, resource_id);
-         make_icon_request(id, icon, resource_id);
    } else {
        g_debug("It looks like we already have icon %s", icon ? icon : "(none)");

Be a good short term fix? ... just leave the old icon
in place until we get another notification.

- Owen

Attachment: signature.asc
Description: This is a digitally signed message part

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]