[comp.windows.x] Illegal databases confuse XrmParseCommand

rhl@grendel.Princeton.EDU (Robert Lupton (the Good)) (03/09/91)

With the MIT X11R4 server, passing a garbage XrmDatabase to XrmParseCommand
causes a bus error (NULL is OK). As XrmParseCommand is supposed to set
rather than modify a database this is a little surprising (I imagine
that it is cleaning up), and doesn't appear to be documented. 

This was a nasty bug to find --- it depended on the state of the stack left
by the main programme that this was a subroutine of.

			Robert

/********************************************************************/
#include <X11/Xlib.h>
#include <X11/Xresource.h>

static XrmOptionDescRec options[] = {
   {"-display",		".display",	 XrmoptionSepArg,	NULL},
};

int
main(ac,av)
int ac;
char *av[];
{
   char *option_type;
   XrmDatabase args_db;
   XrmValue value;
   
   XrmInitialize();

   args_db = (XrmDatabase)1;		/* point somewhere illegal... */
   XrmParseCommand(&args_db,options,1,av[0],&ac,av);
   XrmGetResource(args_db,"foo.display","",&option_type,&value);

   return(0);
}

rws@expo.lcs.mit.EDU (Bob Scheifler) (03/09/91)

    As XrmParseCommand is supposed to set rather than modify a database

What aspect of the (official) documentation implies this to you?
In the Xlib manual, the beginning of section 10.11.4, it says
"modify a resource database".  The description of the database argument
is given as "Specifies the resource database.", not "Returns a newly
created resource database.".  The following paragraph says "loads
recognized options into the specified database".  It all sounds to
me like you're supposed to pass in a valid database.