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

Bug#234556: xlibs: many clients get BadLength error from X_ChangeProperty request



Hi all,

I simply don't get it...

====================================
621		    ESET(0);
3: dpy->bufptr - dpy->buffer = 2048
2: todo = 780
1: size = 780
(gdb) 
622		    write_stat = _X11TransWrite(dpy->trans_conn,
3: dpy->bufptr - dpy->buffer = 2048
2: todo = 780
1: size = 780
(gdb) 
_X11TransWrite (ciptr=0x83b0cf0, buf=0x83b0cf0 "@g\023@\003",
size=138087664)
    at Xtrans.c:843
====================================

The piece of code corresponding is here:

====================================
	while (size) {
	    ESET(0);
	    write_stat = _X11TransWrite(dpy->trans_conn,
					bufindex, (int) todo);
====================================

With "_X11TransWrite" defined by:
====================================
static int
TRANS(SocketWrite) (XtransConnInfo ciptr, char *buf, int size)
{
...
====================================

So, "_X11TransWrite" should have its last parameter set to "todo" 
(i.e. 780) and NOT 138087664.

How can this be possible ????




Here is the complete trace:

=================================
GNU gdb 6.0
Copyright 2003 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you
are
welcome to change it and/or distribute copies of it under certain
conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for
details.
This GDB was configured as "i386-linux"...
(gdb) break Color.c:99
Breakpoint 1 at 0x808c406: file Color.c, line 99.
(gdb) run :6
Starting program:
/home/fleury/devel/xfree_bug/src/xc/programs/Xserver/Xnest :6

Breakpoint 1, xnestCreateColormap (pCmap=0x83b7310) at Color.c:99
99	    XQueryColors(xnestDisplay, xnestColormap(pCmap), colors,
ncolors);
(gdb) break XlibInt.c:605 if (dpy->bufptr - dpy->buffer == 780)
Breakpoint 2 at 0x400a5d88: file XlibInt.c, line 605.
(gdb) c
Continuing.

Breakpoint 2, _XFlushInt (dpy=0x83b0750, cv=0x0) at XlibInt.c:605
605		size = todo = dpy->bufptr - dpy->buffer;
(gdb) disp size
1: size = 1
(gdb) disp todo
2: todo = 0
(gdb) disp dpy->bufptr - dpy->buffer
3: dpy->bufptr - dpy->buffer = 780
(gdb) s
606		if (!size) return;
3: dpy->bufptr - dpy->buffer = 780
2: todo = 780
1: size = 1
(gdb) 
605		size = todo = dpy->bufptr - dpy->buffer;
3: dpy->bufptr - dpy->buffer = 780
2: todo = 780
1: size = 1
(gdb) 
606		if (!size) return;
3: dpy->bufptr - dpy->buffer = 780
2: todo = 780
1: size = 780
(gdb) 
612		for (ext = dpy->flushes; ext; ext = ext->next_flush)
3: dpy->bufptr - dpy->buffer = 780
2: todo = 780
1: size = 780
(gdb) 
608		dpy->flags |= XlibDisplayWriting;
3: dpy->bufptr - dpy->buffer = 780
2: todo = 780
1: size = 780
(gdb) 
610		dpy->bufptr = dpy->bufmax;
3: dpy->bufptr - dpy->buffer = 780
2: todo = 780
1: size = 780
(gdb) 
608		dpy->flags |= XlibDisplayWriting;
3: dpy->bufptr - dpy->buffer = 780
2: todo = 780
1: size = 780
(gdb) 
612		for (ext = dpy->flushes; ext; ext = ext->next_flush)
3: dpy->bufptr - dpy->buffer = 780
2: todo = 780
1: size = 780
(gdb) 
610		dpy->bufptr = dpy->bufmax;
3: dpy->bufptr - dpy->buffer = 780
2: todo = 780
1: size = 780
(gdb) 
612		for (ext = dpy->flushes; ext; ext = ext->next_flush)
3: dpy->bufptr - dpy->buffer = 2048
2: todo = 780
1: size = 780
(gdb) 
620		while (size) {
3: dpy->bufptr - dpy->buffer = 2048
2: todo = 780
1: size = 780
(gdb) 
614		bufindex = dpy->buffer;
3: dpy->bufptr - dpy->buffer = 2048
2: todo = 780
1: size = 780
(gdb) 
620		while (size) {
3: dpy->bufptr - dpy->buffer = 2048
2: todo = 780
1: size = 780
(gdb) 
621		    ESET(0);
3: dpy->bufptr - dpy->buffer = 2048
2: todo = 780
1: size = 780
(gdb) 
622		    write_stat = _X11TransWrite(dpy->trans_conn,
3: dpy->bufptr - dpy->buffer = 2048
2: todo = 780
1: size = 780
(gdb) 
_X11TransWrite (ciptr=0x83b0cf0, buf=0x83b0cf0 "@g\023@\003",
size=138087664)
    at Xtrans.c:843
843	    return ciptr->transptr->Write (ciptr, buf, size);
(gdb) disp size
4: size = 138087664
(gdb) s
_X11TransSocketWrite (ciptr=0x83b0db0, buf=0x83b0db0 "<\001\002", 
    size=138087856) at Xtranssock.c:1750
1750	    return write (ciptr->fd, buf, size);
(gdb) 
1744	{
(gdb) 
1750	    return write (ciptr->fd, buf, size);
(gdb) 
1752	}
(gdb) 
_X11TransWrite (ciptr=0x30c, buf=0x30c <Address 0x30c out of bounds>,
size=780)
    at Xtrans.c:844
844	}
4: size = 780
(gdb) 
_XFlushInt (dpy=0x83b0750, cv=0x0) at XlibInt.c:624
624		    if (write_stat >= 0) {
3: dpy->bufptr - dpy->buffer = 2048
2: todo = 780
1: size = 780
(gdb) quit
The program is running.  Exit anyway? (y or n) 
=================================






Reply to: