[net.sources] 4.2 BUGLIST, Part 3 of 10

vance@mtxinu.UUCP (Vance Vaughan) (11/07/84)

4.2 BUGLIST ABSTRACTS from MT XINU, part 3 of 10:

	The following is part of the 4.2 buglist abstracts as processed by
	Mt Xinu.  The initial line of each abstract gives the offending
	program or source file and source directory (separated by --),
	who submitted the bug, when, and whether or not it contained
	a proposed fix.  Due to license restrictions, no source is
	included in these abstracts.

	Important general information and disclaimers about this and
	other lists is appended at the end of the list...

f77--usr.bin		    jerry@ucbopal.CC (Jerry Berkman)   29 Feb 84  
	In double precision, if you raise an expression x to a variable
	power y, and if the expression contains a power and at least
	another operation, then Fortran "may" return y**y instead of x**y.

    REPEAT BY:
		Compile and run following program in which both z and z2 should
		be identical.
	
	c	implicit real*8 (a-z)
		data x/2.0d0/, y/3.0d0/
	c
		z = (x**2.d0+1.d0)**(-y)
		anum = x**2.d0+1.d0
		power = -y
		z2 = anum**power
		print *,' x,y,anum,power,z,z2 =',x,y,anum,power,z,z2
		end
_______________________________________________________________________________
f77--usr.bin				sdcsvax!sdchema!donn   8 Jun 84    +FIX
	This bug only strikes when the optimizer is OFF.  If a DO
	loop variable is used for other purposes in a routine and in
	particular is used in the loop initialization, limit or
	increment at the same time it is used as the loop variable, the
	parameter containing the loop variable will appear to be
	garbage.  This bug was originally sent to me by Robert Elz
	of the University of Melbourne.

    REPEAT BY:
	Compile the following program with 'f77 -S' (examples are
	courtesy of Robert Elz):
	
	----------------------------------------------------------------
		k = 1
		i = 1
		do 10 k = k, 10
		i = i + k
	10	continue
		print i
		end
	----------------------------------------------------------------
	
	In the assembly language output we see that the register is
	initialized from itself, instead of the memory version of the
	loop variable:
	
	----------------------------------------------------------------
		movl	$1,{k}(r11)
		movl	$1,{i}(r11)
		movl	r10,r10				<<<<<<<<<<<
		cmpl	r10,$10
		jgtr	L16
	L17:
		movl	r10,{k}(r11)
		addl3	r10,{i}(r11),r0
		movl	r0,{i}(r11)
	L15:
		incl	r10
		cmpl	r10,$10
		jleq	L17
	L16:
		movl	r10,{k}(r11)
		clrl	-104(fp)
		movl	$6,-100(fp)
		movl	{i}(r11),-92(fp)
		addl3	$-104,fp,r0
		pushl	r0
		calls	$1,_s_wsfe
		calls	$0,_e_wsfe
	L14:
		ret
	----------------------------------------------------------------
_______________________________________________________________________________
f77--usr.bin		    jerry@ucbopal.CC (Jerry Berkman)   7 Dec 83   
	When my declarations are in an 'include' file,
	I get:
		'Compiler error: Impossible tag 0 in cpexpr'
	if instead I put the declarations in the .f file, I get syntax error!
	I should get the syntax error whether the declarations are in
	the script or not.

    REPEAT BY:
		Run the following script:
	
	#
	cat << 'EOT' >! before
		subroutine tabit( text, fldlen, okv )
		character text(fldlen)
		integer fldlen
		logical okv(1)
	'EOT'
	cat << 'EOT' >! incs
		include 'outbuf.com'
		include 'params.com'
	'EOT'
	cat << 'EOT' >! after
		integer blanks
	
		if(blanks.gt.1) then
			outptr = outptr - blanks + 1
			outbuf(outptr) = tab
		endif
		end
	'EOT'
	cat << 'EOT' >! outbuf.com
		character outbuf(80), tab
		integer outptr
		common /outbc/ outbuf, tab
		common /outbi/ outptr
	'EOT'
	cat << 'EOT' >! params.com
		character eol, tab
		parameter ( eol=char(0), tab='\t' )
	'EOT'
	cat before incs after >! prog1.f
	f77 prog1.f
	cat before outbuf.com params.com after >! prog2.f
	f77 prog2.f
	rm before after incs outbuf.com params.com prog1.f prog2.f
_______________________________________________________________________________
f77--usr.bin				sdcsvax!sdchema!donn   6 Apr 84    +FIX
	This bug is the same as the one reported by trq@astrovax.UUCP
	with the subject 'problem with mixed-mode in f77'.  Basically
	it randomly applies to f77 programs that have an expression in
	which a value of a type other than INTEGER is multiplied by the
	constant 0.  Admittedly few real programs explicitly multiply
	by zero -- the main sources of examples are programs which have
	PARAMETER variables that are set to zero.

    REPEAT BY:
	Put the following program in a file named constbug.f:
	
	----------------------------------------------------------------
		program constbug
	
		integer iwrblk
	
		iwrblk = 1 + 0 * 1.0
		print *, iwrblk
	
		stop
		end
	----------------------------------------------------------------
	
	If you compile this program with the optimizer on, the compiler
	says:
	
	----------------------------------------------------------------
	constbug.f:
	   MAIN constbug:
	Compiler error line 5 of constbug.f: Impossible type 0 in routine mkconv
	
	compiler error.
	----------------------------------------------------------------
	
	If you compile the program with the optimizer off, it prints '0'.
	(What you would expect it to print is '1'.)
_______________________________________________________________________________
f77--usr.bin	      allegra!astrovax!trq (Thomas R. Quinn)   18 Mar 84  
	Assigning an integer to the sum of an integer and "0" times "iparam"
	where the value of "iparam" is defined in a parameter statement results
	in the integer being assigned the value "0".

    REPEAT BY:
	Compile and run the following program under f77.
	
	
	parameter(IRED = 256)
	iwrblk = 10 + 0*IRED
	print *,iwrblk
	end
	
	The program will print "0" instead of the correct value "10".  Note 
	that the statement
		print *, 10 + 0*IRED
	will print the correct value.
_______________________________________________________________________________
f77--usr.bin		    jerry@ucbopal.CC (Jerry Berkman)   28 Feb 84  
	Compilation error when subroutine and statement function
	have dummy argument of same name but different dimension.

    REPEAT BY:
	Try to compile the following:
	
	real vec(3)
	data vec / 2.0, 3.0, 4.0 /
	call sub(vec)
	end
	
	subroutine sub( x )
	real x(3)
	
	sumsq(x) = x*x
	
	sum = 0
	do 10 i=1,3
	sum = sum + sumsq(x(i))
	10	continue
	
	print *, sum
	end
_______________________________________________________________________________
f77--usr.bin			 leres@ucbarpa (Craig Leres)   6 Nov 83   
	The f77 compiler chokes on certain kinds of input, only when the -O
	flag is used.

    REPEAT BY:
	The following subroutine:
	
	subroutine fail(str, i, j)
	integer str(100)
	integer i, j
	str(min0(i,j)) = 0
	return
	end
	
	when compiled with -O, produces the error message:
	
	Compiler error line 4 of a.f: Impossible tag 4 in routine frtemp
_______________________________________________________________________________
f77/src/f2--usr.bin       ucsfcgl!ucsfcgl!gregc (Greg Couch)   3 Nov 83   
	The FORTRAN optomizer messes up under some strange conditions.
	See example program below.

    REPEAT BY:
	Compile the program below with and without optomization.  The version
	without optomization will print out eight lines, while the version
	with optomization never stops.
	
	C	exercise FORTRAN 77 optomization bug
	C
	integer i, j, x, y, xorg, xdd
	data xorg, xdd /10, 2/
	
	do 10 i = 1, xdd
		do 10 j = 1, 2
			x = xorg + (i - 1) * xdd
			call moveto(x, y)
			call moveto(x + 3, y)
	10	continue
	end
	
	subroutine moveto(x, y)
	integer x,y
	print *, x, y
	return
	end
_______________________________________________________________________________
f77/src/f77pass1/exec.c--usr.bin     sdcsvax!sdchema!donn ()   23 Nov 83   +FIX
	This problem occurs in the f77 compiler supplied on a tape
	made on 8/23/83.
	
	In f77 DO loops, a variable loop limit is squirreled away in a
	local variable so that it cannot be altered during the course
	of the loop.  (This is because the standard says that DO loop
	initializations, limits and increments are only evaluated once,
	when the loop is first entered.) Unfortunately the loop limit
	is saved in a temporary variable which may be reallocated when
	subroutine arguments are evaluated in the loop.  (Since f77
	requires that arguments be passed to subroutines by reference
	rather than by value, these temporaries are used to give an
	address to the output of an expression.) This leads to loops
	which are executed an unpredictable number of times, clearly a
	major error.  The problem is mitigated slightly by the fact
	that unless the loop is complicated, the loop limit quantity
	will migrate into register from its place on the stack, and
	after this it is safe from being clobbered.

    REPEAT BY:
	Copy the following f77 program into the file bug1.f:
	
	--------------------------------------------------------------
	program bug1
	integer i, j, k, l, m, n, o
	
	j = 2
	k = 3
	l = 4
	m = 5
	n = 6
	o = 7
	
	do 20 i=1,k
	
		j = j + l
		l = i + j
		j = l * j
		l = j - l
		m = l * i
		n = l * m
		o = m - l
		m = o + 3
		n = o / m
		o = j + n
		call dummy( i+1, j+2, l+3 )
	
		write(unit=6,fmt=10) i
	10		format('Loop pass ', i3)
	
	20	continue
	
	stop
	end
	
	subroutine dummy( a, b, c )
	integer a, b, c
	
	return
	end
	--------------------------------------------------------------
	
	Notice that the expected output is:
	
		Loop pass   1
		Loop pass   2
		Loop pass   3
	
	In fact this program goes into an infinite loop, counting up to
	infinity.  To see why, compile again using the command:
	
		f77 -d14 -S -O bug1.f
	
	F77pass1 will print the debugging comment that offset -4 is being
	reused.  If you look at the assembler output file bug1.s, you
	should see that the loop limit is stored at -4(fp), and that the
	call to dummy() clobbers -4(fp) with the value of i+1...  hence
	the infinite loop.
_______________________________________________________________________________
f77/src/f77pass1/regalloc.c--usr.bin sdcsvax!sdchema!donn ()   23 Nov 83   +FIX
	This problem occurs in the f77 compiler supplied on a tape
	made on 8/23/83.
	
	While compiling a program with 'f77 -O ...' that contains
	a computed GOTO, f77 stops with a 'Termination code 11' or
	'Termination code 132' and a core dump of f77pass1 is left
	behind.  This only occurs with a certain very large program
	which I have that is generated with a ratfor-like pre-
	processor and contains zillions of gotos and DO loops.

    REPEAT BY:
	The program that causes this is much too large to send by
	mail or news, but it is available on request.  I have tried
	replicating the problem with smaller programs, to no avail.
	The program contains the line:
	
		GOTO(16,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15),COMBO
_______________________________________________________________________________
f77/src/f77pass1/regalloc.c--usr.bin    sdcsvax!sdchema!donn   23 Nov 83   +FIX
	This problem occurs in the f77 compiler supplied on a tape
	made on 8/23/83.
	
	The f77 compiler generates code which contains instructions
	like 'movl r10,r10' when optimizing embedded loops.  Since
	these instructions are easy to find, it seems strange that they
	are missed; and in fact the reason for this appears to be that
	the register optimization code in alreg() is buggy.

    REPEAT BY:
	Copy out the following f77 program and call it 'bug3.f':
	
	----------------------------------------------------------------------
		program bug3
	
		integer i, j, k, l, m, n
	
		i = 1
		j = 2
		k = 3
		l = 4
		m = 5
		n = 6
	
		do 20 i = 1, 10
	
			do 10 j = 1, 10
	
				k = m * j
				l = n * i
				m = i * k
				n = j * l
	
	10		continue
	20	continue
	
		stop
		end
	----------------------------------------------------------------------
	
	Compile the program with 'f77 -O -S -c bug3.f'.  This program will
	have code in it that looks like this:
	
	----------------------------------------------------------------------
		movl	$1,v.2-v.1(r11)
		movl	$2,v.3-v.1(r11)
		movl	$3,v.4-v.1(r11)
		movl	$4,v.5-v.1(r11)
		movl	$5,v.6-v.1(r11)
		movl	$6,v.7-v.1(r11)
		movl	v.3-v.1(r11),r10
		movl	v.2-v.1(r11),r9
		movl	v.4-v.1(r11),r8
		movl	v.5-v.1(r11),r7
		movl	v.6-v.1(r11),r6
		movl	$1,r9
	L17:
		movl	r10,r10			/*** Redundant ***/
		movl	$1,r10
	L22:
		mull3	r10,r6,r8
		mull3	r9,v.7-v.1(r11),r7
		mull3	r8,r9,r6
		mull3	r7,r10,v.7-v.1(r11)
		aobleq	$10,r10,L22
		movl	r6,r6			/*** Redundant ***/
		movl	r7,r7			/*** Redundant ***/
		movl	r8,r8			/*** Redundant ***/
		movl	r10,r10			/*** Redundant ***/
		acbl	$10,$1,r9,L17
		movl	r6,v.6-v.1(r11)
		movl	r7,v.5-v.1(r11)
		movl	r8,v.4-v.1(r11)
		movl	r9,v.2-v.1(r11)
		movl	r10,v.3-v.1(r11)
		pushl	$0
		pushal	L25
		calls	$2,_s_stop
		ret
	----------------------------------------------------------------------
	
	(I have prettied up the output considerably here...)  The
	redundant moves are marked by comments.
_______________________________________________________________________________
f77/src/f77pass1/regalloc.c--usr.bin    sdcsvax!sdchema!donn   27 Nov 83   +FIX
	This problem occurs in the f77 compiler supplied on a tape
	made on 8/23/83.
	
	The new f77 compiler will put INTEGERs in register but not
	REALs even though the VAX allows REAL (4-byte floating point)
	values to appear in general registers.  This adds unnecessary
	overhead to programs which do lots of computations with REAL
	values (that is to say, virtually all typical f77 programs).

    REPEAT BY:
	Clip out the following f77 program and put it in a file named
	bug4.f:
	
	--------------------------------------------------------------------
		program bug4
	
		integer i
		real a, b, c
	
		a = 2.0
		b = 1.0
		c = 0.999
	
		do 100 i = 1, 1000000
	
			a = (a + b) * c
	
	100	continue
	
		stop
		end
	--------------------------------------------------------------------
	
	Compile this program with the command 'f77 -S -O -c bug4.f'.
	The assembler output shows that REAL variables are not put in
	register while integer values are.  The following is a
	pretty-printed version of the assembler file, where variables
	of the form 'v.4-v.1(r11)' are written '{variable}' and
	addresses of constants of the form 'L25' are written
	'{constant}' (you can get the pretty-printer by sending mail to
	me asking for it):
	
	--------------------------------------------------------------------
		.globl	_MAIN_
		.set	LF1,0
	_MAIN_:
		.word	LWM1
		subl2	$LF1,sp
		jmp	L12
	L13:
		movl	{0x4100},{a}
		movl	{0x4080},{b}
		movl	{0xbe77407f},{c}
		movl	{i},r10
		movl	$1,r10
	L17:
		addf3	{b},{a},r0
		mulf3	{c},r0,{a}
		aobleq	$1000000,r10,L17
		movl	r10,{i}
		pushl	$0
		pushal	{00,00}
		calls	$2,_s_stop
		ret
		.align	1
	_bug4_:
		.word	LWM1
	L12:
		moval	v.1,r11
		jmp	L13
	--------------------------------------------------------------------
	
	Notice that the INTEGER variable 'i' is put in register 10 but
	the only time that a register is used for a REAL is when it is
	necessary to hold the intermediate result of an expression
	computation; ordinary REAL variables are not assigned registers
	when DO loops are optimized.
_______________________________________________________________________________
fed--ucb		     hpda!hpdsd!edmund (Ed Trujillo)   7 Mar 84   
	fed only returns an error message once invoked.
	Apparently, the signal routine as called in fed bombs with
	a SIGSYS errno.  fed aborts even before it can process its
	argument list.

    REPEAT BY:
	Type in the command with or without an argument.
	
	% fed <font.file>
	Bad system call (core dumped)

    FIX:
		Move the signal(SIGSYS, onsig) from the bottom of the signal
		calls to the top.  This apparently fixed the problem as it
		works for my hp2648.
	17a18
	> 	signal(SIGSYS, onsig);
	23d23
	< 	signal(SIGSYS, onsig);
_______________________________________________________________________________
find--usr.bin				 decvax!popvax!neilr   9 May 84    +FIX
	When using find with long file names, segmentation fault occurs.
	
	No one bothered to change buffer from 200 higher.

    REPEAT BY:
	cd /tmp
	cp /dev/null aaaaaaaaaaa {more than 200 a's}
	find /tmp -print
	
	core dump will occur

    FIX:
	12c12
	< char	Pathname[200];
	---
	> char	Pathname[MAXPATHLEN + 1];
_______________________________________________________________________________
find--man			  donn@utah-cs (Donn Seeley)   5 Oct 84    +FIX
	The C-shell eats braces, and the syntax for the '-exec' feature
	of 'find' uses braces to indicate the position to interpolate a
	filename.  Novice users of the C-shell frequently forget to
	quote braces when using 'find', and this problem is exaggerated
	because the manual page uses the Bourne shell for its
	examples.

    REPEAT BY:
	The instigation for this is a Usenet posting by wall@berkeley
	which demonstrates confusion about braces and 'find'.  The
	message-ID on the article is <2343@ucbvax.ARPA>; I won't
	reproduce it here.

    FIX:
	I suggest the following changes:
	
	----------------------------------------------------------------
	> The end of the command must be punctuated by an escaped
	> semicolon.
	< A command argument `{}' is replaced by the
	< current pathname.
	---
	> The end of the command must be punctuated by a semicolon.
	> A command argument `{}' is replaced by the current pathname.
	> Some shells treat braces and semicolons specially,
	> so it is a good idea
	> to protect them by escaping or quoting them.
	----------------------------------------------------------------
	
	Then there is the example:
	
	----------------------------------------------------------------
	< \-atime +7 \-exec rm {} \\;
	---
	> \-atime +7 \-exec rm "{}" ";"
	----------------------------------------------------------------
	
	The syntax of 'find' leaves much to be desired,
	
	Donn Seeley    University of Utah CS Dept    donn@utah-cs.arpa
	40 46' 6"N 111 50' 34"W    (801) 581-5668    decvax!utah-cs!donn
_______________________________________________________________________________
find--usr.bin		  gillies@mit-comet (Donald Gillies)   13 Jun 84  
	I believe that find will not work when you attempt to find
	files from ABOVE a soft-linked directory.  I haven't looked 
	carefully at the code for find, but I tried two identical finds on
	(1) a real directory, and (2) a soft link to the same directory.
	Just ECHOing the filename worked for (1), but not
	for (2).  The find commands looked like:

    REPEAT BY:
	ln -s realdir softdir
	# works fine, slowly -- prints answers:
	find realdir \( -name '*.h' \) -newer datefile -echo {} \;
	# prints nothing, terminates quickly:
	find softdir \( -name '*.h' \) -newer datefile -echo {} \;

    FIX:
	
	
	find realdir \( -name '*.h' \) -newer datefile -echo {} \;
	# prints nothing, terminates quickly:
_______________________________________________________________________________
find.c--usr.bin		      sjk@sri-spam (Scott J. Kramer)   5 Dec 83    +FIX
	The "find" program doesn't recognize sockets in the UNIX domain.

    REPEAT BY:
	Try "find ... -type s ..." on a directory with sockets.
_______________________________________________________________________________
fp/fpMain.l--ucb		baden@ucbmonet (Scott Baden)   9 Oct 83    +FIX
	There are two system  calls, in the file 'fpMain.l', that are
	incompatible with some UNIX systems, resulting in core being
	dumped.  The calls are both '(syscall 13)'.

    REPEAT BY:
	simply run fp and type in any application for evaluation.
	+ : <3 4> will suffice.

    FIX:
	The two calls should be changed to '(sys:time)' (no argument).
_______________________________________________________________________________
fsck--etc     Dave Rosenthal <cmuitca!dave@cmu-cs-vlsi.arpa>   28 Sep 83   +FIX
	Fsck should remove sockets during preen mode.  When
	the system has crashed because Unix mode sockets
	have been used (see another bug/fix report),  the
	system comes up single user because fsck is nervous
	about socket inodes.  This problem has been observed
	on 4.1c Vax systems and SUN 0.3/0.4 systems.
	
	These fixes were developed with support from IBM.

    REPEAT BY:
	Attempt almost any operation with a Unix domain
	socket,  and observe the system trying to re-boot.
	The test programs in my submission about Unix
	domain sockets will cause the problem.
_______________________________________________________________________________
fsck.c--etc			chris@maryland (Chris Torek)   22 Oct 84   +FIX
	Under certain uncommon conditions, fsck will die with a
	segmentation fault instead of repairing a damaged file
	system.  The reason is that in order to calculate the number
	of disk blocks used by any particular inode, one must round
	up.  This is done by the ``howmany'' macro as follows:
	
		#define	howmany(x, y)	(((x)+((y)-1))/(y))
	
	if x is sufficiently large, then adding y-1 may make it
	negative.  This is precisely what happens to fsck.

    REPEAT BY:
	Create a file system error such that an inode has a di_size
	of 0x7fffffff (or something very close to but not greater
	than that), and run ``fsck'' on that file system.
_______________________________________________________________________________
ftp--ucb			   Mike Muuss <mike@brl-vgr>   8 Sep 83   
	Date:  1 Sep 1983 16:03:33 EDT
	From: Edward A. Cain <cain@edn-unix>
	Subject: early findings
	To: mike@brl
	
	Speaking of FTP. No matter which brl-vgr address I open the command connection
	to, when I do a RETR your server FTP opens a connection on the Class C
	address. Got that? If I open the FTP command connection to 128.20.1.1, your
	server FTP will open the data connection from 192.5.21.6. The port numbers
	are right, but my user ftp will of course be looking for something from
	the 128.20.1.1. That explains why I had such bad luck with ftp a few
	days ago.
	
	More some other day.
	
	Ed Cain

    REPEAT BY:
	Doing the above test with a machine with 2 interfaces to
	separate networks.
_______________________________________________________________________________
ftp--ucb				       jbn@FORD-WDL1   26 May 83  
	I think I understand why others are able to communicate with your FTP
	while we are not.  The TCP passive open mechanism is usually used to
	allow servers to wait for a connection attempt.  In such cases, the 
	``foreign-socket'' is entirely unspecified.  In the FTP case, though,
	the ``foreign-socket'' is fully specified, including the ``foreign-port''
	in the passive TCP open call.  I suspect that some TCP implementations
	do not require a matchup of ``foreign-port'' on passive open operations.
	The spec, though, reads ``A passive open may have either a fully
	specified foreign socket to wait for a particular connection or an
	unspecified foreign socket to wait for any call.''.  Clearly FTP uses
	the second case, and thus TCP should insist on all 4 parameters (foreign
	port, foreign host, local port, and local host) matching exactly before
	establishing the connection.
	
					    John Nagle
					    Ford Aerospace and Communications
_______________________________________________________________________________
ftp--ucb  Chris Torek <chris%umcp-cs.csnet@csnet-relay.arpa>   2 Mar 84   
	I tell our FTP to do a remote cwd to "pub"; I receive the message
		   vv
		550  pub: No such file or directory
		   ^^
	Judging by the message, I suspect someone's not trimming a blank
	somewhere.
	
	By the way, after I sent this I did a list, then tried to do
	something else, and got a "not responding: timeout" type message.
	This could be in the BBN FTP though; there are rumours of bugs
	in the "port" command.  Does 4.2 FTP use the funny port stuff?

    REPEAT BY:
	FTP (I am doing it from a 4.1+BBN TCP/IP system) to a 4.2 system
	and try to "cwd" to a legal directory.
_______________________________________________________________________________
ftp/cmds.c--ucb			   Jeff Mogul <mogul@coyote>   20 Mar 84   +FIX
	The syntax for the mls and mdir commands is
		mdir remote-pathname local-filename
	Unless local-filename is "-", ftp (cryptically and 
	uncharacteristicly) asks for confirmation (presumably,
	meaning "do you really want to write on this file?"
	
	However, if you type "n" or "N", it goes ahead and
	writes the file, while if you type anything else (a positive
	response) it gives up.
	
	Essentially the same bug causes a problem with a "globbed"
	local-filename that doesn't match any extant file; ftp will
	instead create a file with the metacharacters in the filename.

    REPEAT BY:
	% ftp localhost
	... login ...
	ftp> mls /etc /tmp/foo
	local-file /tmp/foo? y
	ftp>
	ftp> mls /etc /tmp/foo
	local-file /tmp/foo? n
	mls ac? ...
	 .
	 .
	 .
	ftp> mls /etc/ /tmp/This*does*not*exist
	local-file /tmp/This*does*not*exist? n
	 .
	 .
	 .
	ftp> bye
	% ls /tmp/This*does*not*exist
	This*does*not*exist
	%
_______________________________________________________________________________
ftp/getpass.c--ucb	  rws@mit-bold (Robert W. Scheifler)   31 Jan 84   +FIX
	User ftp truncates passwords to 8 characters, which loses
	completely when talking to non-Unix sites.

    REPEAT BY:
	ftp to a TOPS-20, for example, and try to login to an
	account with a long password.

    FIX:
	Change
		static char pbuf[9];
	to
		static char pbuf[51];
	and
		if (p < &pbuf[8])
	to
		if (p < &pbuf[50])
	or some other suitably large values.  (Geez, C+Unix=blech.)
_______________________________________________________________________________
ftpd.c--etc		Christopher A Kent <cak@Purdue.ARPA>   13 Jan 84   +FIX
		The FTP daemon doesn't properly log anonymous logins in
	/usr/adm/wtmp because the chroot to /usr/ftp is done before wtmp is
	opened; thus the open always fails. My previous fix to this was not
	wonderful, because while it correctly record logins, it never recorded
	logouts. This version does both. I also changed logging to be done via
	syslog(3), and now log the ident supplied by anonymous users as well as
	all connections.

    REPEAT BY:
	ftp to localhost, log in as ftp, quit, and do a last. No record.
_______________________________________________________________________________
ftpd/ftpd.c--etc	Christopher A Kent <cak@Purdue.ARPA>   25 Mar 84   +FIX
	On multi-homed hosts, ftpd won't always work because the code to 
	anchor the reply socket is incorrect; the getsockname() call
	has a bad argument, thus the filled in address is always 0.

    REPEAT BY:
	ftp to a multi-homed host on the same net as yours, but specify
	the alternate address as the host to connect to.
_______________________________________________________________________________
ftpd/ftpd.c--etc		   bloom@ucbcory (Jim Bloom)   20 Sep 83   +FIX
	It is possible under ftp to defeat the checking for null
	passwords in /etc/passwd.  This allows users to login
	without a password to access the system.

    REPEAT BY:
	ftp to a machine with a null passwd for some user (cory won't
	work).  Give the user name.  When asked for a passwd, respond
	with "@".  It will log one onto the machine as that user.
_______________________________________________________________________________
getgroups.2--man	   Mike Braca <mjb%Brown@UDel-Relay>   27 Sep 83   +FIX
	The man page for getgroups says the max number of groups that
	will be returned is given by NGRPS in <sys/param.h>,
	but it's really NGROUPS.

    REPEAT BY:
	N/A

    FIX:
	s/NGRPS/NGROUPS
_______________________________________________________________________________
getgroups.2--man	       lepreau@utah-cs (Jay Lepreau)   27 Oct 83   +FIX
	getgroups(2) returns the actual number of grps returned in gidset,
	and its first parameter is an int, the max number of grps to
	return.  (This happens to agree with the "4.2 system manual",
	section 1.1.3.)  It returns -1 and EINVAL if the max number of
	grps specified is not large enough to hold all of them. The max number
	is NGROUPS from param.h.  The manual page, however, says that:
	    1. it returns 0 on success, -1 on failure.
	    2. its first parameter is an int *, and that it is value-result.
	    3. the only possible error is EFAULT.
	    4. the max number is NGRPS.
	    5. "see also" refers to initgroups(3), should be 3x.
	
	The setgroups(2) man page also refers to NGRPS instead of NGROUPS.

    REPEAT BY:
	    Inspection of sys/kern_prot.c, or run this pgm:
	int gidset[20];
	int ngrps = 10;
	int ret, i;
	
	main()
	{
	    ret = getgroups(ngrps, gidset);
	    printf("ret = %d, ngrps = %d\ngidset:", ret, ngrps);
	    for (i = 0; i < 20; i++)
		printf(" %d", gidset[i]);
	    printf("\n");
	}
_______________________________________________________________________________
getitimer.2--man		  Chris Kent <kent@BERKELEY>   24 Jul 83   +FIX
	This manual page is awful. The timer value description is
	out of date (itimer_{value,interva;} don't exist!), and
	the difference between a "value" and an "interval" isn't
	explained.

    REPEAT BY:
	Read the page.

    FIX:
	Apparently, the name of the structure elements changed...
	Also, it seems that the "interval" is the automatically
	reloaded value of the timer, and the "value" is the time to 
	wait before firing once. This should be made clear.
	
	
	----------
_______________________________________________________________________________
getrlimit.2--man	   Mike Braca <mjb%Brown@UDel-Relay>   3 Oct 83    +FIX
	The man page for getrlimit(2) says the name for infinity is
	RLIMIT_INFINITY, but <resource.h> has RLIM_INFINITY. Personally
	I prefer RLIMIT for consistency, but what the hell.

    REPEAT BY:
	N/A

    FIX:
	s/RLIMIT_INFINITY/RLIM_INFINITY
_______________________________________________________________________________
gettable.c--etc		 jsq@ut-sally.ARPA (John Quarterman)   12 Feb 84   +FIX
	The method recommended by the DARPA Internet Network Information
	Center for updating host tables from the master on sri-nic
	is to fetch the version number regularly and then get the
	whole table when the version changes.  Gettable only allows
	fetching the whole table, not the version number.

    REPEAT BY:
	Look at the gettable man page or the source.
	Can't repeat something that can't be done.
_______________________________________________________________________________
gettable.c--etc			   salkind@nyu (Lou Salkind)   17 Nov 83   +FIX
	Gettable uses the nicname service instead of the hostname
	service to get the NIC host table.

    REPEAT BY:
	Typing the command.
_______________________________________________________________________________
getty/subr.c--etc			 decvax!popvax!neilr   15 May 84   +FIX
	Even if the ck flag was set in gettytab, the CRTKIL flag
	was never being set in the local mode word.
	Looks as though someone forgot to put the code in, since
	it is just like to ce and cb code (crterase and crtbs)

    REPEAT BY:
	make a gettytab entry with a :ck: entry
	login 
	stty everything
	crtkill won't be set
_______________________________________________________________________________
groups.2--man					       ralph   23 Mar 83   +FIX
	On the arpavax, the manual page for groups(2) refers to setgrp(2)
	in its SEE ALSO section; this should read setgroup(2).
_______________________________________________________________________________
h/ioctl.h--sys     <cmuitca!jag@cmu-cs-h.arpa@cmu-cs-h.arpa>   15 Jul 84   +FIX
	The code in tty_pty.c that handles TIOCREMOTE expects the ioctl to be
	passed one argument: the address of the REMOTE on/off value.  ioctl.h
	incorrectly defines TIOCREMOTE as:
	
	#define	TIOCREMOTE	_IO(t, 105)		/* remote input editing */
	
	This indicates no arguments, which leads to unpredictable behaviour.
_______________________________________________________________________________
h/un.h--sys		   spgggm@ucbopal.CC (Greg Minshall)   31 Jan 84   +FIX
	Doing a bind() in the Unix domain, if we pass the size of
	the sockaddr_un structure, we get EINVAL (on our system; on
	ucbarpa it seems to give EMSGSIZE).  This is because the Vax
	C compiler says that the size is 112 bytes, and therefore
	sys/sys/uipc_userreq.c in unp_bind() doesn't have room to
	stick on a null termination.  Really, sockaddr_un seems to
	be 111 bytes long, but apparently the compiler says "well, it's
	going to take me 112 bytes, since the next data structure will
	start at an even byte address".

    REPEAT BY:
	#include <sys/un.h>
	(more includes)
	int
	hintSet(path)
	char *path;		/* path name for hint */
	{
		int s, length, diddle, savedError;
		long mypid;
		struct sockaddr_un foo;
	
		s = socket(AF_UNIX, SOCK_DGRAM, 0);
	
		if (s == -1) {
			perror("hintSet: socket");
			exit(1);
		}
	
		length = strlen(path);
		if (length > sizeof foo.sun_path)
			length = sizeof foo.sun_path;
	
		strncpy(foo.sun_path, path, length);
	
		if (bind(s, &foo, (sizeof foo)-1) == -1) {
			if (	((savedError = errno) == EADDRINUSE) &&
				(open(path, O_RDONLY) == -1) &&
				(errno == EOPNOTSUPP) &&
				(unlink(path) != -1) &&
				(bind(s, &foo, (sizeof foo)-1) != -1) )
					;
			else {
				errno = savedError;
				perror("hintSet: bind");
				exit(1);
			}
		}
	
		return(s);
	}

    FIX:
	One of two things:  Change the C compiler (but, I'm not sure that
	would be a fix, or a failure).  Better yet, make
	sun_path[108] instead of sun_path[109].
_______________________________________________________________________________
h/{}.h--sys		    ihnp4!ihesa!bob (Bob Van Valzah)   18 Jul 84   +FIX
	Using userid and groupid greater than 32767 causes a host of
	problems in the kernel.  The most recent problem is that
	a file cannot be access by its group permission bits when its
	gid is greater than 32767.

    REPEAT BY:
	Make yourself a member of group 33000.
	as root:
	chgrp 33000 FileYouDontOwn
	chmod 770 FileYouDontOwn
	as you:
	touch FileYouDontOwn
	
	You will be denied access to the file because the kernel is
	looking at the other protection bits instead of the group bits.

    FIX:
	In the .h files listed below, instert "unisgned" in the
	declaration of the given fields.
	
	acct.h		ac_udi, ac_gid
	inode.h		ic_uid, ic_gid
	proc.h		p_uid
	quota.h		q_uid, dq_uid
	stat.h		st_uid, st_gid
	user.h		u_uid, u_gid, u_groups
	
	Bob Van Valzah
	Consultant to AT&T Bell Labs  (312) 979-3632  ..ihnp4!ihesa!bob
	Employed by   Lachman Assoc.  (312) 986-8840  ..ihnp4!laidbak!bob
_______________________________________________________________________________
ideas--sys	     raphael@wisc-crys.arpa (Raphael Finkel)   22 May 84  
	When Unix crashes, it may be a while since the last sync.  File that have
	recently been written to may not have information out yet.  The superblock
	may be wrong.  However, when Unix starts up again, it can determine the
	contents of core at the time of crash and save those contents in a file.
	I recommend that the equivalent of a sync be done (maybe optionally) during
	this time to try to bring the disk to a consistent state without losing
	information.

    REPEAT BY:
	The situation that is most irksome is leaving the editor a few seconds
	before the crash; the file often ends up empty after the crash.
_______________________________________________________________________________
ifconfig.c--etc				 sun!pugs (Tom Lyon)   1 Nov 83    +FIX
	1) Sense of arp flag is inverted.
	2) State of arp flag is not reported
	3) flags are trashed when hostname is followed by flag

    REPEAT BY:
	Hard to notice problems.
	Run 'ifconfig arp' and then attempt to communicate
	with a host which requires arp.
_______________________________________________________________________________
ifconfig.c--etc		       lepreau@utah-cs (Jay Lepreau)   5 Nov 83    +FIX
	Even with Tom Lyons' fixes, it did not work when setting
	the address of an interface the 1st time and also setting
	a flag.  Problem was that the SIFADDR ioctl can change the
	value of the flags, e.g., RUNNING and BROADCAST, but a later
	option setting will use the original value of flags.

    REPEAT BY:
	E.g., in /etc/rc.local, for an interlan, do:
		/etc/ifconfig il0 `hostname` -arp
	You should get an interface that's UP but not broadcast or running,
	which breaks a number of things (like rwhod).
_______________________________________________________________________________
init.c--etc				allegra!astrovax!wls   Jun 25 83   +FIX
	There is a race condition in /etc/init for 4.1 BSD.  If a HUP signal is
	sent to init, causing it to reread /etc/ttys, and at the same time
	someone logs out, it is possible for init to lose track of the fact
	that the logout occurred.  If this happens no new process is created
	for that port and the port is effectively dead.  In this state
	/etc/utmp is not updated so that the person still appears on the
	list of users logged in, but without a process.  The condition can be
	cleared by disabling the port, then reenabling it.
	  The bug is in the fact that merge() is called and the branch out of
	the loop is taken without checking that the pid returned by the wait
	might be valid.  On a loaded system it is quite possible for one of
	init's children to die in the window between the HUP signal and init's
	response to it.
	  We have a version of uucp that uses the same ports for dialing in and
	dialing out.  It regularly turns the dialin ports on and off, exposing
	the existence of this bug.

    REPEAT BY:
	Send a HUP to init and at the same time kill one of init's children
	that is a process group header (not an orphan process).  If the timing
	is just right init will not know of the child's death.  This is more
	likely to occur on a heavily loaded system.
_______________________________________________________________________________
init.c--etc		      Richard Johnson <raj@uci-750a>   9 Aug 84    +FIX
	The init program uses the assumption that if after running getty
	that fork returns in less than 1 minute, then getty failed.  This
	is not always true.

    REPEAT BY:
	Pick a terminal and keep logging in and back out again making sure
	you never stay logged in for more than 1 minute.  After about 5 times
	of logging in and out again, the console will produce the bogus
	message "init: getty failing; sleeping...".
_______________________________________________________________________________
ioinit(3F)--usr.lib    gvax.bill@Cornell.ARPA (Bill Nesheim)   25 Jun 84   +FIX
	Fortran programs using "ioinit" won't load

    REPEAT BY:
	Call ioinit from a fortran program.  Watch it die.

    FIX:
	run the command ar tv /usr/lib/libI77.a
	
	you will note that rather than ioinit.o, ioinit.f is
	included.
	
	recompile and re-archive libI77
_______________________________________________________________________________
iostat--usr.bin				     George R. Cross   6 May 84   
	   After the system has been running a few days, a call to iostat results in
	a report with a negative percentage in the ni column.  Here is an example:
	
	     tty          ra0           ra1           ra2          cpu
	 tin tout bps tps msps  bps tps msps  bps tps msps  us ni sy id
	   3   43   9   3  0.0    0   0  0.0    0   0  0.0  44-47  6  0

    REPEAT BY:
	Only occurs after system is running for a few days.  Works ok right
	after reboot. If iostat is given interval argument, like iostat 10,
	first line is garbled as above, following lines are ok.
_______________________________________________________________________________
iostat.c--usr.bin		 mazama!stew (Stewart Levin)   22 Mar 84   +FIX
	After we employed the kgclock (adapted to our ancient AR11) driver
	to gather I/O and profiling samples, some of the numbers given by
	iostat were off by a factor of 10.  As we were running the external
	clock at 10HZ and the internal clock runs at 100HZ, it was easy to
	find the cause.  iostat (and vmstat) were not reading the "phz"
	variable from the kernel's namelist and simply assuming it identical
	to the kernel's "hz" variable.

    REPEAT BY:
	Collecting samples using an external clock set to other than 100HZ.

    FIX:
	Read both "phz" and "hz" from /dev/kmem and use the former sampling
	rate if it is nonzero.  Be aware, however, that it may not have been
	calibrated correctly.  kgclock supposedly counts the number of external
	clock interupts occurring over a four second interval as measured using
	the system clock.  However when we looked at phz (using adb) it was 3
	not 10!   We cured the problem by explicitly initializing all relevant
	variables to zero on entry to the kgstart() routine.  I can't say for
	sure why it fixed the bug, but either an unitialized variable was
	the culprit or the system modifies its idea of the time between the
	kgprobe() and kgstart() calls.
_______________________________________________________________________________
last.c--ucb		      Jay Lepreau  <lepreau@utah-cs>   25 Nov 83   +FIX
	When remotely executed, last does not print out the response
	to SIGQUIT until something else forces it out.
	(QUIT prints out the "current" date in the wtmp file
	and continues.)
	
	A misfeature: I think your deletion in the 4.2 release version (changed
	from the prerelease version) of the "net-login-time" for pseudo-
	user "reboot" is a mistake-- that gives useful information,
	(average uptime), as mentioned in the man page.
	Repeat-By
	arpa last foo; ^\

    FIX:
	Add an fflush(stdout); right after the printf in onintr().
	For "reboot"-- add that code back in again.
_______________________________________________________________________________
lastcomm.c--ucb					   sun!Jskud   29 Nov 83   +FIX
	lastcomm does not format partial blocks
	uses explicit bn * DEV_BSIZE vice dbtob(bn) macro

    REPEAT BY:
	just invoke lastcomm, and you will note that very recent
	commands do not show up -- in fact, up to the last 16.
_______________________________________________________________________________
ld--bin		decvax!ubc-vision!sfucmpt!kurn (Andrew Kurn)   28 Feb 84   +FIX
		When asked to print load map, ld prints only those files which
	contributed code to the load module.  There is no way to get a listing of
	those modules which merely define storage (COMMON).

    REPEAT BY:
		Create an archive containing at least one module which does nothing
	but define a block of named storage.  The loader will not list it.
_______________________________________________________________________________
learn--bin		  wjcheng@ucbernie (Wunjei J. Cheng)   18 Dec 83  
	1. Can not specify the user directory.
	2. Can not specify the subject.

    REPEAT BY:
		1. "learn -tmpdir C 1.1f" does NOT work, but
		   "learn C 1.1f" does work.
		2. After type "learn -tmpdir", you will see some
		   of the guiding message missing and also cannot
		   specify the subject.
_______________________________________________________________________________
learn/copy.c--usr.bin			 ihnp4!cmcl2!rna!dan   18 Feb 84   +FIX
	1) Typing EOT to learn causes learn to loop on error from stdin.
	2) learn scripts files, eqn, vi cannot startup at all.

    REPEAT BY:
	(above)
_______________________________________________________________________________
leave.c--ucb	      Support Group (agent: Richard Johnson)   31 Jul 84   +FIX
	Leave doesn't work if you specify the time using the "+" syntax.
	When the bug causing this is fixed, it gives a bogus error message.

    REPEAT BY:
	Type "leave +1".  You'll never see the warning.
_______________________________________________________________________________
lex--usr.bin			      joe@fluke (Joe Kelsey)   14 Aug 84   +FIX
	Lines longer than 200 characters overflow lex line buffers,
	wreaking havoc in other data structures.

    REPEAT BY:
	Take the pathalias software as distributed and try out the
	new uucp maps.  Notice how things fall apart very quickly.

    FIX:
	Replace the #define YYLMAX 200 in function chd1 in header.c
	with #define YYLMAX BUFSIZ.  This will allow a more reasonable
	line limit and try to prevent overflowing buffers.  Grumble about
	sloppy programmers who can't use big buffers or dynamically 
	allow for larger limits.
_______________________________________________________________________________
lex--usr.bin			 mazama!stew (Stewart Levin)   2 Feb 84    +FIX
	The following lex program -
	
	/* Convert , to ,^ inside equation text */
	/* Assumes delim $$ for embedded equations */
	%Start	INEQN
	%%
	^".EQ"[.]*	{ ECHO; BEGIN INEQN; } 	/* enter equation text */
	^".EN"[.]*	{ ECHO; BEGIN 0; } 	/* exit equation text */
	<INEQN>"$"	{ ECHO; BEGIN 0; } 	/* exit equation text */
	<INEQN>","	{ ECHO; putchar('^'); } /* change , to ,^     */
	"$"		{ ECHO; BEGIN INEQN; }  /* enter equation text */
	%%
	
	gave the unexpected result of turning the line
	
	.EQ (10a,b)
	
	into
	
	.EQ (10a,^b)
	
	The reason is that a period is not considered a special character
	inside brackets.  The lex manual (page LEX-7) gives an example
	of [.\n]+ which they say would match the whole text.  Not so -
	this only matches repetitions of the two characters period and newline.
	
	The lex program that works is
	
	/* Convert , to ,^ inside equation text */
	/* Assumes delim $$ for embedded equations */
	%Start	INEQN
	%%
	^".EQ".*	{ ECHO; BEGIN INEQN; } 	/* enter equation text */
	^".EN".*	{ ECHO; BEGIN 0; } 	/* exit equation text */
	<INEQN>"$"	{ ECHO; BEGIN 0; } 	/* exit equation text */
	<INEQN>","	{ ECHO; putchar('^'); } 	/* change , to ,^     */
	"$"		{ ECHO; BEGIN INEQN; }  /* enter equation text */
	%%

    REPEAT BY:
	Running the above examples.

    FIX:
	Correct the example in the lex documentation.
_______________________________________________________________________________

              GENERAL INFORMATION ON THE 4.2 BUGLIST FROM MT XINU

          _________________________________________________________________

                           --IMPORTANT DISCLAIMERS--

          Material in this announcement and the  accompanying  reports
          has been edited and organized by MT XINU as a service to the
          UNIX community on a non-profit,  non-commercial  basis.   MT
          XINU  MAKES  NO  WARRANTY,  EXPRESSED  OR IMPLIED, ABOUT THE
          ACCURACY, COMPLETENESS, OR FITNESS FOR USE FOR  ANY  PURPOSE
          OF ANY MATERIAL INCLUDED IN THESE REPORTS.

          MT XINU welcomes comments in writing about the  contents  of
          these reports via uucp or US mail.  MT XINU cannot, however,
          accept telephone calls or enter into telephone conversations
          about this material.

          _________________________________________________________________

          Legal  difficulties  which  have delayed the distribution of
          4.2bsd buglist summaries by MT XINU have been  resolved  and
          three versions of the buglist are now available.

          The current buglist has been derived from reports  submitted
          to  4bsd-bugs@BERKELEY  (not  from reports submitted only to
          net.bugs.4bsd, for example).  Reports  are  integrated  into
          the  buglist as they are received, so that any distributions
          are current to within a week or so.

          Buglists now being distributed are  essentially  "raw".   No
          judgment  has been passed as to whether the submitted bug is
          real or not or whether it has been fixed. Only minimal edit-
          ing  has  been  done  to produce a manageable list.  Reports
          which are complaints (rather than  bug  reports)  have  been
          eliminated;  obscenities  and  content-free flames have been
          eliminated; and duplicates have been combined.  The  result-
          ing collection contains over 500 bugs.


          Three versions of the buglist are now  ready  for  distribu-
          tion:

          2-Liners:
               Two lines per bug, including a concise description, the
               affected   module,  the  submittor.  Approximately  55K
               bytes, it is  being  distributed  to  net.sources  con-
               currently with this announcement.

          All-but-Source:
               All material, except that all but the most inocuous  of
               source  material  has been removed to meet AT&T license
               restrictions.   Nearly  a  mega-byte,  this   will   be
               distributed  to  net.sources in several 50K byte pieces
               later this week.

               A paper listing or mag  tape  is  also  available,  see
               below.

               Please note that local  usenet  size  restrictions  may
               prevent   large   files   from  being  received  and/or
               retransmitted.  MT XINU will not dump this material  on
               the  net  a  second time; if your site has not received
               material of interest to you within a  reasonable  time,
               please send for a paper or tape copy.

          All-with-Source (FOR SOURCE LICENSEES ONLY):

               4.2 licensees who also  have  a  suitable  AT&T  source
               license  can obtain a tape containing all the material,
               including proposed source fixes where such were submit-
               ted.

               Once again, MT XINU has not evaluated, tested or passed
               judgment  on proposed fixes; all we have done is organ-
               ize the collection and eliminate obvious  irrelevancies
               and duplications.


          A free paper copy of the All-but-Source list can be obtained
          by sending mail to:
                  MT XINU
                  739 Allston Way
                  Berkeley CA 94710

                  attn: buglist

          or electronic mail to:

                  ucbvax!mtxinu!buglist

          (Be sure to include your US mail address!)

          For a tape, send a check for $110 or a  purchase  order  for
          $150  to  cover  MT  XINU's costs to the address given above
          (California orders add sales tax).  For the  All-with-Source
          list, mail us a request for the details of license verifica-
          tion at either of the above addresses.