Gross bug in System V make

gwyn%brl-vld at sri-unix.UUCP gwyn%brl-vld at sri-unix.UUCP
Thu Mar 15 03:18:06 AEST 1984


From:      Doug Gwyn (VLD/VMB) <gwyn at brl-vld>

In UNIX System V (Release 1.0) "make" there is a horrible bug that is
masked by a freak accident.  The bug surfaced as a side-effect of
de-linting the source code.  Ron Natalie was the first victim of the
newly-awakened bug.

Source file dosys.c, in routine doexec(), allocates auto variables:
	CHARSTAR argv[200];
	int status;
where `status' is not actually used and `argv' is used to assemble
arguments to be passed in a call to execvp().  In source file misc.c,
"make" provides its own version of execvp() in order to handle execv()
errors; in particular, when an ENOEXEC occurs make's execvp() does
something like
	*--argv = "sh";
	execv(shell, argv);
to run the (assumed) shell script.  HOWEVER, note that decrementing
argv is really stupid.  On the PDP-11 and the VAX the result is to
stuff a pointer to "sh" into `status' in doexec()!  If it weren't
for the coincidence that `status' wasn't being used for anything
worthwhile anyway, this bug would have turned up long ago.

I have a quick patch for this bug and several others.  Would the
USG "make" maintainers please get in touch with me.

Yuck!



More information about the Comp.unix.wizards mailing list