Owen Taylor <[EMAIL PROTECTED]> writes:

> However, that doesn't explain your behavior above. It's either
> an Xserver or Xlib bug (unlikely, IMO, this stuff doesn't change
> much at all), or a bug in the application code outside of what
> you have quoted.

I'm sorry, I should have included the full code. The function is below. It
crashes on the beginning of the for loop when it hits *prop.

gdb output:

Program received signal SIGSEGV, Segmentation fault.
0x0804d006 in cachewin (win=54526107) at cache.c:97
97            for (n = 1; *prop; n++)
1: name = (unsigned char *) 0x805e838 "konqueror"
(gdb) info locals
win = 1
new = (cacheinfo *) 0x805fc50
items = 9
left = 0
name = (unsigned char *) 0x805e838 "konqueror"
prop = (unsigned char *) 0x0
type = 31
format = 8
n = 1
cwin = 0


the function:

void cachewin(Window win)
{
  cacheinfo *new;
  unsigned long items, left;
  unsigned char *name, *prop;
  Atom type;
  int format, n;
  Window cwin;

  cwin = client_window(win);
  if (win != cwin)
    {
      cacheinfo *ci;
      for (ci = cachehead; ci; ci = ci->next)
        {
          if (ci->win == cwin)
            ci->parent = win;
        }
      return;
    }

  XSelectInput(dpy, cwin, EnterWindowMask | LeaveWindowMask);

  if (XGetWindowProperty(dpy, win, XA_WM_NAME, 0, 1000, False,
                         AnyPropertyType, &type, &format, &items,
                         &left, &name) != Success || !items)
    return;

  XGetWindowProperty(dpy, win, XA_WM_CLASS, 0, 1000, False, AnyPropertyType,
                     &type, &format, &items, &left, &prop);
  new = xmalloc(sizeof(cacheinfo) + (items * sizeof(char *)));
  new->next = cachehead;
  new->win = win;
  new->names[0] = name;
  if (items)
    {
      for (n = 1; *prop; n++)
        {
          new->names[n] = prop;
          prop = strchr(prop, '\0') + 1;
        }
      new->numnames = n;
    }
  else
    new->numnames = 1;
  cachehead = new;
}




-- 
greg

_______________________________________________
XFree86 mailing list
[EMAIL PROTECTED]
http://XFree86.Org/mailman/listinfo/xfree86

Reply via email to