jmsellens@watdragon.waterloo.edu (11/15/88)
From: "John M. Sellens" <jmsellens>
X Window System Bug Report
xbugs@expo.lcs.mit.edu
VERSION:
R3
CLIENT MACHINE and OPERATING SYSTEM:
Any
DISPLAY:
Any
WINDOW MANAGER:
Any
AREA:
Xlib
SYNOPSIS:
XrmParseCommand() doesn't parse well, and has null pointer problems.
DESCRIPTION:
If XrmParseCommand() is called with a command line with the last
argument "missing" (e.g. the last arg is "-geometry") it doesn't
notice, and it indirects through various null pointers. This code
doesn't check to see that there is actually a folling argument, and
the PutCommandResource() macro is called with NULL, and then calls
XrmQPutStringResource() which does strlen(0) among other things.
Similarly for XrmPutLineResource().
case XrmoptionSepArg:
--(*argc);
++argv; --myargc; --(*argc);
PutCommandResource(*argv);
break;
case XrmoptionResArg:
++argv; --myargc; --(*argc); --(*argc);
XrmPutLineResource(pdb, *argv);
break;
REPEAT BY:
Try it on a Sun and watch the core dump:
xclock -geometry
(Under R2 for sure, but I haven't installed R3 on our Suns yet, but
it should do the same thing.)
SAMPLE FIX:
?? There is no way for XrmParseCommand() to indicate errors to its
caller. One alternative is to leave the offending argument in the
argument list (in this case, the "-geometry"), but this is not good
because then the caller will complain about "-geometry" being invalid
or bad syntax or something, when the real error is that it requires
a following argument which wasn't there. XrmParseCommand() could
print an error message, but not elegantly, because it does not know
that name of the caller, so it can't print a reasonable message.
There is something in lib/X/ParseCmd.c to print an error message, but
it is meant to handle internal programming errors, rather than a
user's command line error. There is no error handler available
for handling this kind of error.