[comp.windows.x] Has this X11R4 server bug been reported yet ?

graeme@labtam.labtam.oz (Graeme Gill) (12/19/90)

	There seems to be a bug in ddx/miwindow.c that crashes the X11R4
server. It seems likely that it will crash almost every implementation
based on the generic MIT server

	This shar file contains a little client program called miwindowbug
to exercise the bug. There is also an Imakefile.

	If this bug seems to be undiscovered, I will post a bug report.

	Graeme Gill
	Labtam Australia
	
#!/bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #!/bin/sh line.
# 2. Save the resulting text in a file
# 3. Execute the file with /bin/sh (not csh) to create
# Files unpacked will be owned by you and have default permissions.
echo extracting - Imakefile
sed 's/^X//' > Imakefile << 'SHAR_EOF'
X       INCLUDES = -I$(TOP)
X        DEPLIBS = $(DEPXLIB)
XLOCAL_LIBRARIES = $(XLIB)
X  SYS_LIBRARIES = -lm
X
XSimpleProgramTarget(miwindowbug)
SHAR_EOF
touch 1219140190 Imakefile
echo extracting - miwindowbug.c
sed 's/^X//' > miwindowbug.c << 'SHAR_EOF'
X/*
X * Demonstrate bug in miwindow.c
X * 
X * Author:	Graeme Gill
X * 
X * Organisation: Labtam Australia
X * 
X */
X
X#include <stdio.h>
X#include <X11/Xlib.h>
X#include <X11/Xutil.h>
X
X/* stuff for X windows */
Xchar miwindowbug[] = {"miwindowbug"};
XDisplay *mydisplay;
XWindow mywindow;
XGC mygc;
XXEvent myevent;
XXSizeHints myhint;
Xint myscreen;
Xunsigned long myforeground,mybackground;
Xint done;
X
Xmain(argc,argv)
Xint argc;
Xchar **argv;
X	{
X	int i,j;
X
X	/* open the display */
X	mydisplay = XOpenDisplay("");
X	if(!mydisplay)
X		error("Unable to open display");
X	myscreen = DefaultScreen(mydisplay);
X	mybackground = BlackPixel(mydisplay,myscreen);
X	myforeground = WhitePixel(mydisplay,myscreen);
X
X	myhint.x = 20;
X	myhint.y = 20;
X	myhint.width = 150;
X	myhint.height = 150;
X	myhint.flags = PPosition | USSize;
X
X	mywindow = XCreateSimpleWindow(mydisplay,
X			DefaultRootWindow(mydisplay),
X			myhint.x,myhint.y,myhint.width,myhint.height,
X			5, myforeground,mybackground);
X	XSetStandardProperties(mydisplay,mywindow,miwindowbug,miwindowbug,None,
X	       argv,argc, &myhint);
X
X	mygc = XCreateGC(mydisplay,mywindow,0,0);
X	XSetBackground(mydisplay,mygc,mybackground);
X	XSetForeground(mydisplay,mygc,myforeground);
X
X	XSelectInput(mydisplay,mywindow,
X	     ButtonPressMask | ExposureMask);
X
X	XMapRaised(mydisplay,mywindow);
X
X	/* Main event loop */
X	done = 0;
X	while(done == 0)
X		{
X		XNextEvent(mydisplay,&myevent);
X		switch(myevent.type)
X			{
X			case Expose:
X				if(myevent.xexpose.count == 0)
X					{
X					XFillRectangle(mydisplay,mywindow,mygc,10,10,100,100);
X					/* This is perfectly legal ! */
X					XClearArea(mydisplay,mywindow,20,20,0xffff,0xffff,False);
X					}
X				break;
X			case MappingNotify:
X				XRefreshKeyboardMapping(&myevent);
X				break;
X			case ButtonPress:
X				done = 1;
X				break;
X			}
X		}
X	XFreeGC(mydisplay,mygc);
X	XDestroyWindow(mydisplay,mywindow);
X	XCloseDisplay(mydisplay);
X	exit(0);
X	}
X
X		error(s)
X		char *s;
X			{
X			fprintf(stderr,"Error; miwindowbug: %s\n",s);
X			if(mydisplay)
X				{
X				if(mygc)
X					XFreeGC(mydisplay,mygc);
X				if(mywindow)
X					XDestroyWindow(mydisplay,mywindow);
X				XCloseDisplay(mydisplay);
X				}
X			exit(-1);
X			}
X
X
SHAR_EOF
touch 1219140090 miwindowbug.c

klee@wsl.dec.com (Ken Lee) (12/20/90)

In article <5795@labtam.labtam.oz>, graeme@labtam.labtam.oz (Graeme Gill) writes:
> XClearArea(mydisplay,mywindow,20,20,0xffff,0xffff,False);

Yes, I think I've seen this problem reported here 3 or 4 times.  The
sample server is not very good about checking for out-of-bounds
conditions.

-- 
Ken Lee
DEC Western Software Laboratory, Palo Alto, Calif.
Internet: klee@wsl.dec.com
uucp: uunet!decwrl!klee