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

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

4.2 BUGLIST ABSTRACTS from MT XINU, part 2 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...

curses/termcap--usr.lib		      root%oregon-grad.csnet   1 Aug 84    +FIX
	Both the curses library and the termcap library have a global
	variable _ospeed; hence when both libraries are used, the ld
	loader gives this error message:
	
	_ospeed: ld:/usr/lib/libcurses.a(cr_tty.o): multiply defined
	
	   It appears that the intention was that curses' ospeed is for
	internal use only and should not have been global, whereas
	the ospeed in the termcap package is intentionally global.

    REPEAT BY:
	(This problem was discovered while loading the libraries via
	Franz Lisp, and I haven't come up with a simple demo of it
	elsewhere.  The fix below cured the problem, however.)
_______________________________________________________________________________
dbx--ucb			      ucbvax!decwrl!goldberg   Jun 13 83  
	Dbx can't set the value of variables declared double.

    REPEAT BY:
	In
		main(){double i; i = 3.0;}
	if a breakpoint is set and then the command
	"set i=3.0" is given, the error message "incompatible types"
	is returned.  "set i=3" works, but then "print i" returns
	gibberish, as expected.
_______________________________________________________________________________
dbx--ucb			      ucbvax!decwrl!goldberg   Jun 8 83   
	If a program has a declaration of an array which is external,
	asking dbx to display an element of it fails with the the
	error message "subscript out of range".

    REPEAT BY:
	tst.c:
	
	#include "tst.h"
	struct foo  arr[10];
	
	main () {
	    int     i;
	    for (i = 0; i < 10; i++)
	(*)	        arr[i].a = i;
	}
	
	tst.h:
	
	struct foo {
	    int     a,
		    b;
	};
	
	extern struct foo  arr[];
	
	Run dbx with a breakpoint at the line marked (*), and at the breakpoint do a
	"print arr[0]".
_______________________________________________________________________________
dbx--ucb			    mazama!pete (Peter Mora)   13 Sep 84  
	dbx doesnt work for fortran,
	(1) says "procedure not active" when "print"ing from a subroutine
	(try printing c from junk1 below). actually, it seems to
	not print any argument passed to the subroutine such as c,r and
	n in the subroutine below.
	(2) gives adresses rather than variable names in subroutines
	(3) in the 4.1 era when it sort of worked, it printed complex
	numbers incorrectly as the (imag,real) rather than (real,imag).
	now, it isnt even capable of printing an array but maybe
	if it can be fixed the real-imag reversal problem should
	be fixed too.
	(4) numerous other problems, example: dbx crashed when you
	dbx "program below"
	stop at 7
	run
	print c
	Illegal instruction (ie: CRASH)

    REPEAT BY:
	try program below
	
	
	real r(100)
	complex c(100)
	n=100
	do 1 i=1,100
	c(i)=cmplx(float(i),-float(i))
	1	r(i)=i
	call junk1(r,c,n)
	a=2
	b=3
	end
	subroutine junk1(r,c,n)
	complex c(n)
	real r(n)
	a=1
	b=2
	d=4
	e=10
	do 1 i=1,n
	c(i)=-c(i)
	1	r(i)=e*r(i)
	f=11
	return
	end
	
_______________________________________________________________________________
dbx--ucb			      ucbvax!decwrl!goldberg   Jun 17 83  
	When the program below is run with a breakpoint at the line
	marked with a (*), it doesn't halt at the breakpoint, although
	it does print "Hello".

    REPEAT BY:
	main(){
	    int i,j,stat[10];
	
	    for (j = 0; j < i; j++)
		if (stat[j] == 3)
		    break;
	(*) if (j == i)
		printf("Hello");
	    }
_______________________________________________________________________________
dbx--ucb		    jerry@ucbopal.CC (Jerry Berkman)   26 Sep 84  
	New version of dbx on monet says "... not active" when asked
	about values of fortran subroutine arguments and common block
	elements.  Old version of dbx in /usr/ucb/dbx on opal prints
	out the values.

    REPEAT BY:
	#	bug in dbx - can't display args and common block elements from f77
	cat << 'EOT' >! dbxbug.f
	common /const/ pi
	pi = 3.14159
	r = 2.0
	
	call sub(r)
	end
	
	subroutine sub(rr)
	
	ix=0
	j=rr/ix
	return
	end
	'EOT'
	f77 -g dbxbug.f
	a.out
	dbx << 'EOT'
	list
	print pi
	print r
	print rr
	'EOT'
_______________________________________________________________________________
dbx--ucb			      ucbvax!decwrl!goldberg   Jun 4 83   
	When an executable file (say a.out) is being debugged by
	"dbx a.out", and the dbx job is pushed into the background
	with ^Z, an attempt to execute a.out succeeds.  Unfortunately
	bizarre results can follow.  I suspect that an attempt to
	execute a.out should result in the message "Text file busy."
	as happens in 4.1.

    REPEAT BY:
	I assume that dbx is supposed to mark executables as busy.
	If not, I have examples that behave wrongly when executed
	while a dbx job is stopped.
_______________________________________________________________________________
dbx--ucb			      ucbvax!decwrl!goldberg   Jun 27 83  
	If a program with a large global array is run under dbx,
	upon exiting dbx thrashing will occur.

    REPEAT BY:
	run dbx on the program
	
	int arr[1000000];
	main(){int i; i = arr[1];}
	
	Do a 'run' followed by a 'quit'.  At this point vmstat reveals
	the system paging out at a very hig rate (200 pages/sec), with
	system times of 70% (on an unloaded 780).
_______________________________________________________________________________
dbx/object.c--ucb		  sam@ucbmonet (Sam Leffler)   22 Oct 83   +FIX
	The symbol table info generated by the C compiler for
	enumerated types which are a member of a structure or union
	causes dbx to blow up;  changes are needed for both the
	compiler and dbx.

    REPEAT BY:
	Try cc -g enum.c on the following
	struct foo {
		enum { RED, GREEN, BLUE } b;
	};
	
	main()
	{
	}
	then invoke dbx, it will blow up with an "assertion failed"
	message.
_______________________________________________________________________________
dbx/object.c--ucb			sdcsvax!sdchema!donn   8 Jun 84    +FIX
	Sometimes when debugging with dbx, mysterious functions like
	'$b4' or '$b23' appear in the stack trace when the 'where'
	command is given.  These functions appear to share lines with
	the function that appears to call them -- for example, if you
	are stopped in function 'f' which appears to be called by
	function '$b4' which is in turn called by function 'g', then
	'f' will appear to be called from the same source file and at
	the same line number in '$b4' as '$b4' is in 'g'.  Moreover it
	is impossible to examine local variables in 'g'.
	
	The common feature of all functions 'g' mentioned above is
	that they contain blocks or compound statements that have
	their own declarations.  If you stop in an inner block
	with declarations, you can print out that block's local
	variables (although none of the outer local variables),
	which is a good indication that they are connected with
	the bug.

    REPEAT BY:
	Clip out the following program and compile it with 'cc -g':
	
	----------------------------------------------------------------
	#include <stdio.h>
	
	int	f();
	
	main()
	{
		int	x;
	
		x	= 1;
		if (x > 0) {
			int	y;
	
			y	= 3;
			x	= f(y);
		}
		printf( "%d\n", x );
		exit( 0 );
	}
	
	int f( z )
		int	z;
	{
		z = z + 1;
		return ( z );
	}
	----------------------------------------------------------------
	
	Run dbx on the object.  If you put a breakpoint anywhere in the
	program, run it and check the stack when you stop, you will
	find that there is a mysterious function '$b1' that is always
	present.  The variable 'x' in main() will not be accessible but
	you can get at 'z' when 'f' is active, and you can get at 'y'
	at any time (clearly a bug).
_______________________________________________________________________________
dd.c--bin	       hpda!hpdsd!hpdsa!eric (Eric B. Wertz)   23 Mar 84   +FIX
	If file arguments given via "if=" and "of=" are the same, the
	file gets trashed.
	Programs like cp(1) usually catch this.

    REPEAT BY:
	% cat foo
	This is a test file.
	% dd if=foo of=foo
	0+0 records in
	0+0 records out			(oh dear, this doesn't look good...)
	% cat foo
	%				(sure enough...)
_______________________________________________________________________________
df.c--bin			   Jeff Mogul <mogul@coyote>   1 Feb 84    +FIX
	This affects systems with removeable packs.  If a disk
	is listed in /etc/fstab, but is offline for some reason,
	df dies when it tries to list the drive.

    REPEAT BY:
	umount a disk mentioned in /etc/fstab;
	take it off line;
	type "df"
_______________________________________________________________________________
dict/words--misc			    arnold@UCBINGRES   28 Apr 83   +FIX
	at least since 4.1c came up, there are two misspellings in /usr/dict/words.
	They are
		conser6ative
	and
		conservadmsm	(presumably "conservatism")
	I don't know if there are others, but you might consider getting the 
	dictionary again, just to be sure.
			Ken
_______________________________________________________________________________
diff/diffdir.c--bin		     gray@ucbarpa (Bob Gray)   27 Jan 84   +FIX
	diff directory1 directory2
	would fail to diff . files such as .login.
	(Originally reported by someone at Oregon for 4.1)

    REPEAT BY:
	diff directory1 directory2
	where both directories contain files such as .login.
_______________________________________________________________________________
diff/diffdir.c--bin	      John Romine <jromine@uci-750b>   23 Aug 84   +FIX
	Diff doesn't list differences in files more than one subdirectory
	deep when using the -r & -l options.

    REPEAT BY:
	Run "diff -r -l d1 d2", where directories d1 and d2 have a
	subdirectory containing a file which differs.  Diff won't list it.
_______________________________________________________________________________
directory--man			     rlee@sri-spam (Ron Lee)   20 Jul 84   +FIX
	The directory operations described in DIRECTORY(3) makes use of the 
	header file <sys/dir.h>.  Since <sys/dir.h> declares some of its 
	structures with defined types u_long, the header will not compile
	properly without first declaring the defined types by including 
	<sys/types.h>.  So the synopsis for DIRECTORY(3) should read in
	its C code:
		    #include <sys/types.h>
		    #include <sys/dir.h>

    REPEAT BY:
	Compile (cc) a C program with <sys/dir.h> as an include file as
	suggested by /usr/man/man3/directory.3   .

    FIX:
	Precede "#include <sys/types.h>"  before the include file <sys/dir.h>. 
_______________________________________________________________________________
dmesg.c--etc				sdcsvax!sdchema!donn   29 Jan 84   +FIX
	'dmesg -' is supposed to summarize the kernel messages that
	have accumulated since the last time 'dmesg -' was run.  If the
	file '/usr/adm/msgbuf' does not exist then 'dmesg -' acts just
	like 'dmesg', putting a copy of the entire message buffer on
	the standard output every time it is run.  No indication of
	failure is returned or printed by 'dmesg -' when it fails to
	find '/usr/adm/msgbuf'.

    REPEAT BY:
	Remove '/usr/adm/msgbuf' on an active system where 'dmesg - >>
	/usr/adm/messages' is run every ten minutes by 'cron'.
	'/usr/adm/messages' will grow by several megabytes a week.
_______________________________________________________________________________
dump--etc		  genji@UCBTOPAZ.CC (Genji Schmeder)   13 Oct 83  
	rmtopen return value inconsistent
_______________________________________________________________________________
dump--etc		     dlw@ucbopal.CC (David L Wasley)   2 Mar 84    +FIX
	There is a serious bug in 4.2 bsd dump/restore. It can
	prevent restore from working even though the tape is "good".
	I posted a full description of this bug under
		Index:	/usr/src/etc/restore
	even though the real bug is in ``dump''. This is because
	it is necessary to fix ``restore'' in order to be able to
	use existing dump tapes.
	
	The problem is that restore needs the full inode bitmap
	for the filesystem. Dump, as distributed, truncates the
	map to the smallest size possible (the highest inode of
	interest). This causes restore to FAIL in some cases.

    REPEAT BY:
	newfs /dev/rra0h ra81
	dump 0 /dev/rra0h
	...(add stuff to the filesystem)...
	dump 3 /dev/rra0h
	
	Now try to restore it.
_______________________________________________________________________________
dump/dump.h--etc	  genji@UCBTOPAZ.CC (Genji Schmeder)   9 Oct 83    +FIX
	Return codes from dump and rdump are defined
	X_FINOK   1
	X_REWRITE 2
	X_ABORT   3
	It is obvious that X_FINOK means success and the
	others indicate different degrees of failure.
	However, the functions dealing with remote tapes,
	(in dumprmt.c) return 0 for success and 1 for failure.
	This inconsistency is not simply resolved by
	merely changing dumprmt.c function returns, since those
	functions are also used by /etc/rrestore command.
	I suggest you redefine dump return codes like this
	X_FINOK   0
	X_ABORT   1
	X_REWRITE 2
	Then no change will be needed in dumprmt.c or rrestore.
	Also, you should mention the return code values in
	dump manual page.		--Genji
_______________________________________________________________________________
dump/dumpitime.c--etc			sdcsvax!sdchema!donn   27 Mar 84   +FIX
	When you run dump, it typically prints out an estimate of the
	number of tapes it needs and the expected number of 1K blocks
	of data on those tapes.  If a file on the filesystem being
	dumped has holes in it, the estimate can be way off.  (A hole
	is a place in a file where no blocks have been allocated,
	typically found in database files.  See lseek(2) if you're
	mystified.)

    REPEAT BY:
	Make a file with holes in it and try to dump the file system.
	In our case dump came back with:
	
		DUMP: estimated 1794142 tape blocks on 50.53 tape(s).
	
	It should have said:
	
		DUMP: estimated 132608 tape blocks on 3.74 tape(s).
	
	This is unnerving to say the least.
_______________________________________________________________________________
dump/dumpitime.c--etc		  sun!shannon (Bill Shannon)   12 Sep 83   +FIX
	When you do a full dump of a file system the "Date of last
	level x dump" message has nothing substituted for the x.

    REPEAT BY:
	dump 0f /dev/null /dev/rhp0a
_______________________________________________________________________________
dump/dumpmain.c--etc root%oregon-grad.csnet@csnet-relay.arpa   27 Mar 84   +FIX
	"dump" reports incorrect estimates of tape use when
	given the "c" (cartridge) key.  This will probably
	have more serious consequences if multiple-cartridge
	dumps are attempted.

    REPEAT BY:
	Dump root to /dev/null:
	
	    % dump 0cf /dev/null /
	
	Again, using correct length of 1700' (1800' minus slop)
	for a DC300XL tape cartridge (450', four tracks):
	
	    % dump 0csf 1700 /dev/null /
	
	Estimate of tape usage will be different (correct) in second
	example, which explicitly specifies length.
_______________________________________________________________________________
dump/dumpmain.c--etc       genji@ucbopal.CC (Genji Schmeder)   26 Jul 84   +FIX
	/etc/dump does not object to writing output file
	onto the very filesystem being dumped.
	This procedure cannot be completed and the filesystem
	may be filled.
_______________________________________________________________________________
dump/dumpmain.c--etc		 root.Oregon-Grad@Rand-Relay   17 Aug 83   +FIX
	"dump" and "rdump" report incorrect estimated tape number
	estimates for 9-track tapes.

    REPEAT BY:
	Execute any dump command, without the "c" key (i.e., for 9-track),
	and preferably one that will dump slightly under 1 tape full.
	The printout of estimated blocks is correct, but number of tapes
	is high by about 50%, e.g.:
	Before fix:
		DUMP: estimated 34721 tape blocks on 1.42 tape(s).
	After fix:
		DUMP: estimated 34721 tape blocks on 0.89 tape(s).
_______________________________________________________________________________
dump/dumpoptr.c--etc				 allegra!rdg   Jul 2 83    +FIX
	the dump program searches the file /etc/fstab to translate
	file system names into device names.  when one file system
	name happens to be the same as a prefix of another file
	system name, dump may select the wrong device!
	the dump program then dumps the wrong file system.

    REPEAT BY:
	create one file system called "l1" and a second file system
	named "l1backup".  make the appropriate entries in fstab
	with the "l1" entry occuring after the "l1backup" entry.
	now issue the command:
	dump 0u l1
	the device on which l1backup is mounted will be dumped.

    FIX:
	the file dumpoptr.c contains the proceedure which searches
	the fstab entries for the desired named file system.
	during the search, it uses strncmp to look for a match
	checking no more than strlen(filesystemname) characters.
	thus, it never bothers to match the NULL at the end of the
	filesystemname string with the NULL which must also be present
	in the name contained in the fstab entry.  
	to correct the problem, one more character must be checked.
	
	the statement
	
	keylength = min(strlen(key), sizeof (dt->fs_file));
	
	should be changed to
	
	keylength = min(strlen(key)+1, sizeof (dt->fs_file));
_______________________________________________________________________________
dump/dumptape.c--etc     Dave Johnson <ddj%Brown@UDel-Relay>   11 Oct 83   +FIX
	dump stops writing on a tape volume long before the real end
	of tape, and uses more volumes than it estimated.  The estimated
	amount is fairly accurate, but the tape length used is not accounted
	for the same way.  In particular, the inter-record gap is estimated
	at 0.3" for 6250, but the value used is hardwired at 0.7" in dumptape.c
	and dumprtape.c (which is the 800 and 1600 bpi value).

    REPEAT BY:
	Dump a filesystem of larger than 145 megabytes, using the non-rewind
	tape drive at 6250 bpi.  When it asks to change tapes, look how close
	it got to the end of the tape (almost 500 feet left when I tried it).
_______________________________________________________________________________
dump/dumptraverse.c--etc srradia@watmath.UUCP (sanjay Radia)   5 Oct 84    +FIX
		A serious bug exists in dump.
	Dump makes a pass through all the inodes and marks the inodes to be
	dumped in dirmap & nodmap. However, if the system is busy the inodes
	can be deleted and possibly reallocated for other files.
	In the next pass, when dumping inodes, dump does not bother to check to see if
	the inodes are still allocated and in the case of directories does not check to
	see the inode is still a directory.
	
		Now, the dump tape has a bunch of directories (directory-zone) followed
	by non-directories and as soon as restore sees a non-directory it thinks it has
	scanned the directory-zone. Thus if a directory inode is delelted (and maybe
	realloced to a file) between the 1st & 2nd passes of dump, the dump tape
	will not be correctly read by restore (you will loose some (a lot) of the
	directory information).

    REPEAT BY:
		Create about 3 directories and start a dump on the file system.
	When dump asks you to mount the tape delete one of the three
	directories (the one with the lowest inode #). Now continue with the
	dump. 
		Do a "/etc/restore ivd". You will see that restore will not
	know of any directories with inodes greater than the the one you deleted
	(ie they will be marked as regular files and not as directories). You
	can check this out by doing a "lc" in restore's interactive mode.
_______________________________________________________________________________
ed--man			       Jay Lepreau <lepreau@utah-cs>   5 Apr 84    +FIX
	It says the 'n' command is there but it's not.  This was
	apparently added in sys III or later.  I expect there
	are other missing commands too which are doc'ed.

    REPEAT BY:
	man ed
	ed /etc/group
	1n

    FIX:
	Either fix man page, or get new ed (when 4.x requires a USG
	license perhaps).
_______________________________________________________________________________
efl--usr.bin		   Vincent Broman <broman%BUGS@Nosc>   16 Feb 84   +FIX
		efl(1) crashes in flames (i.e. in infinite recursion) when run even
	on trivial programs. One of the causes is that the author included a
	"very stupid" memory allocator in his program, called at various levels as
	intalloc(), alloc(), calloc(), malloc(), cfree(), and free().
	It is not able to handle allocations of more than 256 longwords at a chunk.
	Unfortunately, he uses stdio, which trustingly calls malloc() and free()
	with 4096 byte arguments in _filbuf() and fclose(). Worse, his fatal error
	handler also calls exit() --> _cleanup() --> fclose().

    REPEAT BY:
	echo '' > a.e
	efl a.e

    FIX:
		Use setbuf(3S) after each fopen().  May not solve everything.
	Please run programs once before distributing them.
_______________________________________________________________________________
error--ucb			 mazama!stew (Stewart Levin)   19 Jan 84  
	Under some circumstances error ignores the suffix touch list
	specified by the -t flag and improperly brings include files
	up under vi.

    REPEAT BY:
	Running the command    checkout test.c    with the files
	|								|
	| checkout:							|
	|								|
	| #! /bin/csh							|
	| lint -lc $* -n |& error -v -t ".c"				|
	|								|
	| test.c:							|
	|								|
	| #include "test.main"						|
	| MAIN()							|
	| {								|
	 | return((int) pi);						|
	| }								|
	|								|
	| test.main:							|
	|								|
	| #include "test.h"						|
	| main()							|
	| {								|
	| MAIN();							|
	| }								|
	|								|
	| test.h:							|
	|								|
	| #include <stdio.h>						|
	| #include <math.h>						|
	| #ifndef pi							|
	| static double snftEkd=3.1415926535897932384626434;		|
	| #define pi snftEkd						|
	| #endif							|
	|								|

    FIX:
	Reinstall 4.1bsd error, removing the signal call in onintr()
_______________________________________________________________________________
error/errorinput.c--ucb     jerry@ucbopal.CC (Jerry Berkman)   17 Sep 84   +FIX
	Get extra output from error which confuses users.  For script
	under 'Repeat-By:', the initial output is:
	
			2 non specific errors follow
		[unknown] Error. No assembly.
		[unknown] Error. No assembly.
		2 files contain errors "file1.f" (2), "file2.f" (1)
	
		File "file1.f" has 2 errors.
			2 of these errors can be inserted into the file.
	
		File "file2.f" has 1 error.
			1 of these errors can be inserted into the file.
		You touched file(s): "file1.f", "file2.f"
	
	After the fix:
	
		2 files contain errors "file1.f" (2), "file2.f" (1)
	
		File "file1.f" has 2 errors.
			2 of these errors can be inserted into the file.
	
		File "file2.f" has 1 error.
			1 of these errors can be inserted into the file.
		You touched file(s): "file1.f", "file2.f"

    REPEAT BY:
	#
	cat << 'EOT' >! file1.f
	integer foobar(30)
	foobar(2) = a^b
	cal wow
	end
	'EOT'
	cat << 'EOT' >! file2.f
	print *, ' hi '
	badd
	end
	'EOT'
	f77 file1.f file2.f |& error
_______________________________________________________________________________
error/errormain.c--ucb		     felix!zemon (Art Zemon)   25 May 84   +FIX
	Error(1) will not work if it is run when not attached to a
	terminal.  For example, error(1) will fail when run under
	control of at(1) or the MDQS batch(1) command.
	
	The reason is that error(1) always attempts to open
	/dev/tty.  Error(1) exits if the open fails.  It is only
	necessary to open /dev/tty if the -q option is given.
	
	This applies to error(1) as distributed with 4.2bsd.  It
	probably also applies to earlier versions.  The sccsid line
	from out version of error(1) is:
	    *sccsid = "@(#)errormain.c	1.4 (Berkeley) 5/4/82";

    REPEAT BY:
	Execute something like this within an MDQS batch queue using
	the C shell:
	( cc ... |& error > error-stdout ) >& error-stderr
	
	"error-stdout" should contain standard status information
	from error(1) and "error-stderr" should be empty.  Instead,
	"error-stdout" will be empty and "error-stderr" will contain
	the message "error: Can't open /dev/tty to query the user.".
_______________________________________________________________________________
error/errortouch.c--ucb     jerry@ucbopal.CC (Jerry Berkman)   17 Sep 84  
	According to the manual:
		-n  	Do not touch any files; all error messages are sent to
			the standard output.
		-t	... Files whose suffixes do not appear in the suffix
			list are not touched ...
	However, these have no effect at all unless -q is also specified.
	I.e.  error -n   still touches files.  The -n and -t options only
	effect oktotouch() in errortouch.c; it is only called by preview().
	It is clear preview() can only return false unless -q is specified;
	so the effect of -n and -t are lost unless -q is specified.
	
	Here is the output for the 'Repeat-By:' script:
	
			1 non specific errors follow
		[unknown] Error. No assembly.
		1 file contains errors "bla.f" (1)
	
		File "bla.f" has 1 error.
			1 of these errors can be inserted into the file.
		You touched file(s): "bla.f"
	
	Either fix the code or fix the man page.

    REPEAT BY:
	#
	cat << 'EOT' >! bla.f
		fooey
	'EOT'
	f77 bla.f |& error -n
_______________________________________________________________________________
ex--ucb			     ucsfcgl!blia!eric (Eric Allman)   16 Feb 84  
	If the "version" command is in a .exrc file, the version number
	is printed out twice.  This does not occur if the :version
	command is issued from inside vi.

    REPEAT BY:
	Add the line "version" to your .exrc file.
	Enter vi.  The version number will be printed out twice.
	(You probably have to unsetenv EXINIT for this to work.)
_______________________________________________________________________________
ex--ucb			     hamachi@ucbkim (Gordon Hamachi)   19 Dec 83  
	When I use the ":f" command to change the name of the file I'm editing,
	vi gets confused about the r/w status of the new file.  It remembers
	the status of the old file (which may be read-only) even though the
	status of the new file may be different.

    REPEAT BY:
	I run vi on a file that is read-only r--r--r--, "% vi protected".
	While in vi I change the name of the file, ":f writeable" and then
	write the file, ":w writeable".  Then I try to write it again,
	":w writeable".  I get an error message saying "File is read-only",
	even though the mode of writeable is rw-r--r--.  Note, this is NOT
	a problem that ":w! writeable" solves.
_______________________________________________________________________________
ex--ucb		     raphael@wisc-crys.arpa (Raphael Finkel)   22 Mar 84  
	If a cycle of symbolic links exists, when vi is asked to open one of the
	files in the cycle, it gets a system error 62, which it should report as
	too many levels of symbolic links.  (Cat, for example, reports the error
	correctly.)  Instead, it reports "system error 62".

    REPEAT BY:
	ln -s tmp tmp1
	ln -s tmp1 tmp
	vi tmp
_______________________________________________________________________________
ex--ucb					 leres (Craig Leres)   8 Dec 83   
	Vi version 3.7 has trouble when the interrupt character is
	typed too soon after the escape character.

    REPEAT BY:
	Enter vi and (rapidly) type the sequence <escape><interrupt>,
	hit ^L to fix the screen foobar that results, and then observe
	that a line containing the word "Interrupt" has replaced the
	current line.
_______________________________________________________________________________
ex--ucb						   ttang@Uci   Nov 1 83   
	There was a problem with vi.  If a user were in the middle of his
	file while doing the editing and gave a command such as "nn^B"; i.e.
	a string of digits nn and a control-B(he wanted to go nn pages
	backward).  Vi just logged him off the system and gave a segmentation
	fault(core dumped) message.  This shouldn't happen this way and vi
	should ignore this command.

    REPEAT BY:
	Edit an existing file with vi, move to the next couple of pages,
	then enter say "99^B".  Vi will emit the message: Segmentation fault
	(core dumped) and log you off.  I believe that will happen for any
	such command as: "nnn^x" where control-x is any valid command.
	
	
	Operating system: 4.1absd.
	
	/ttang
_______________________________________________________________________________
ex--ucb		      khalsa@ucbear (=Guruprem Singh Khalsa)   26 Jul 84  
	Vi (ex in visual mode) does not reinitialize the screen
	correctly when a stopped editing session is brought back into
	the foreground, IF the cursor happens to have been on the
	'wrapped-around' portion of a line which exceeds the width of
	the screen when the job was stopped.  Vi leaves the screen
	completely blank, and just puts the cursor in the right place!

    REPEAT BY:
	Edit any file.  Generate a long line, which must be 'wrapped' onto
	more than one line on the screen.
	
	Normal:  Put the cursor on any character of the early part of the line.
	Stop the job with control-Z.  Bring the job back into the foreground
	with 'fg'.  Note that everything is as it should be.
	
	Bug:  Put the cursor on any portion of the 'wrapped' part of the
	long line.  Stop the job with control-Z.  Bring the job back into the
	foreground with 'fg'.  Note that the screen is blank, and that the
	cursor is out in the middle of nowhere.  Press the escape key.  Note
	that the screen is now properly refreshed, and that the cursor is
	where it should be.
	
	It turns out that pressing any key gets things to show up on
	the screen again, so it's not a serious problem, but naive
	users will be non-plussed by this behavior, should they happen
	to stumble into it.

    FIX:
	Have the program note when the cursor is on a 'wrapped' portion of
	a long line, and have it refresh the screen when it discovers
	it is being revived after being stopped in that state.  The code
	should catch SIGCONT.
	
	
	
	Thank you.
	
	Guruprem Singh Khalsa
	Principal Programmer
	Electrical Engineering and Computer Sciences
	Computer Systems Support Group
	181M Cory Hall
	2-6744
_______________________________________________________________________________
ex/ex_vadj.c--ucb			 ihnp4!cmcl2!rna!dan   13 Apr 84   +FIX
		On ANSI/VT-100 like terminals which have termcap's CS, RC, SC
	defined, VI ignores AL and DL (insert line and delete line) (which in
	itself is probably not good) and emulates the AL and DL functions by
	changing the scrolling region and scrolling in or out a line.
		The code which emulates DL with CS had LI-1 coded as 23, which
	assumes a 24line VT100. 23line VT100's (i.e. VT100's with "status-line")
	and other terminals like the CIT-500 which has 64 lines failed to
	emulate correctly.

    REPEAT BY:
		Set termcap entry of a VT100 to something other than 24 lines
	(e.g. 23 lines) and enter VI and delete a line.
_______________________________________________________________________________
ex/ex_vops2.c--ucb  sdcsvax!sdccsu3!madden@Nosc (Jim Madden)   2 Nov 83    +FIX
	When asked to do a put of a partial line which causes a
	wrapmargin overflow, vi will frequently mangle the new
	text or other nearby parts of the file because of mis-guided
	attempts to optimize the screen display.  Further, if
	abbreviations defined by "abbr" commands appear in the new
	text, they will be expanded during the put.  (This might
	be regarded as feature.)

    REPEAT BY:
	The following short list of vi commands will cause the
	problem if executed on an 80 column terminal:
	vi NEWTESTFILE
	:set wrapmargin 8
	aa b c d e f g h\E^y$$pppp
	
	At the fourth p command, the inserted text will not be the
	expected "a b c d e f g h" but will be truncated to "a b c d
	e".  Successive p commands will cause other unexpected
	results.
_______________________________________________________________________________
explain--bin				 eggert@ucsbcsl.UUCP   13 Jan 83   +FIX
	The command `explain' crashes when the current directory is not
	writable, because it creates its temporary file in the current
	directory.  It doesn't need to create a temporary file at all.
	Here is the old (4.1bsd) version of explain:
	
	trap 'rm $$; exit' 1 2 3 15
	D=/usr/lib/explain.d
	while echo "phrase?";read x
	do
	cat >$$ <<dn
	/$x.*	/s/\(.*\)	\(.*\)/use "\2" for "\1"/p
	dn
	case $x in
	[a-z]*)
	sed -n -f $$ $D; rm $$;;
	*) rm $$;;
	esac
	done

    FIX:
	Here is a fixed version:
	
	D=/usr/lib/explain.d
	while	echo 'phrase?'
		read x
	do
		case $x in
		[a-z]*)	sed -n /"$x"'.*	/s/\(.*\)	\(.*\)/use "\2" for "\1"/p' $D
		esac
	done
_______________________________________________________________________________
expr(1)--bin      ariel!vax135!floyd!clyde!watmath!utzoo!bin   May 14 84   +FIX
	In the function ematch(), expbuf is declared with the #define'd
	constant ESIZE (= 256).  But, the function compile is called as
	follows:
	
		compile(p, expbuf, &expbuf[512], 0);
	
	The wired-in 512 should be changed to ESIZE.
	
	This bug is present in at least V7, System 3, and 4.1BSD.
	-- 
				David Trueman @ U of Toronto Zoology
				{allegra,ihnp4,linus,decvax}!utzoo!david

    REPEAT BY:
	Inspection.

    FIX:
	231c231
	< 	compile(p, expbuf, &expbuf[512], 0);
	---
	> 	compile(p, expbuf, &expbuf[ESIZE], 0);
_______________________________________________________________________________
f77--usr.bin				sdcsvax!sdchema!donn   31 May 84   +FIX
	Another f77 bug...  Sometimes a comparison of two CHARACTER*1
	values gets the wrong result.  Specifically this occurs when
	one operand of the comparison is a CHARACTER*1 expression (a
	function call or a type conversion) and the other operand is
	any CHARACTER*1 value.  This is another bug contributed by
	Jerry Berkman at UC Berkeley; he apparently got it from a
	friend.  This bug is so specific that it's sheer luck that
	anyone ever managed to exercise it.

    REPEAT BY:
	Clip out the following program (courtesy of Jerry Berkman)
	and compile it.
	
	----------------------------------------------------------------
		character*1 getchr,ich
		ich=getchr("A")
		if(ich.ne.getchr("A")) write(6,100)
	100	format("Error in character functions")
		stop
		end
	
		character*1 function getchr(ich)
		character*1 ich
		print 8000, ich, ichar(ich)
	8000	format('in getchr with ich = ',a1,' (',16r,i6.2,')')
		getchr=ich
		return
		end
	----------------------------------------------------------------
	
	When run it prints 'Error in character functions' (surprise!).
	A little poking around reveals the following gaffe in the
	assembly language code:
	
	----------------------------------------------------------------
		pushl	$1		# 'ich=getchr("A")'
		pushal	{0101,00}
		pushl	$1
		pushal	-1(fp)
		calls	$4,_getchr_
		movb	-1(fp),{ich}(r11)
		pushl	$1		# 'if(ich.ne.getchr("A")) ...'
		pushal	{0101,00}
		pushl	$1
		pushal	-1(fp)
		calls	$4,_getchr_
		cvtbl	-1(fp),r1
		cmpl	r0,r1		# Oops!  What's in r0?  Not 'ich'!
		jeql	L15
	----------------------------------------------------------------
_______________________________________________________________________________
f77--usr.lib		     dlw@ucbopal.CC (David L Wasley)   7 Jun 84    +FIX
	The runtime I/O system will hang with some illegal format specs.
	It should either "work" or abort. The symptom here is that the
	program appears to never return from the READ statement.
	
	Repeat By:
	Try the following:
		program badio
		character*20	fmt
		fmt = "(0f0.0)"
		read (*, fmt) x
		end
_______________________________________________________________________________
f77--usr.bin		m128a4@ucbbrahms (Matthew P. Wiener)   4 Oct 84   
	assigns apparently do not work with statement numbers that
	appear later than the assign statement itself.

    REPEAT BY:
	Create a file called dumb.F containing:
		program dumb
		integer	line,i
	#ifndef BUG
	100	format(i5)
	#endif
		i=123
		assign 100 to line
		print line,i
		stop
	#ifdef BUG
	100	format(i5)
	#endif
		end
	Compiled as 'f77 dumb.F', it works, with output '  123'.
	Compiled as 'f77 -DBUG dumb.F', it doesn't, and I get:
	*	write sfe: [100] error in format
	*	logical unit 6, named 'stdout'
	*	lately: writing sequential formatted external IO
	*	part of last format: ^D
	
_______________________________________________________________________________
f77--usr.bin				sdcsvax!sdchema!donn   27 Mar 84   +FIX
	F77 considers two variables from the same COMMON block to be
	the same variable for the purposes of common subexpression
	elimination.  This is almost always wrong.

    REPEAT BY:
	Copy the following program into a file com.f.  Compile it with
	the optimizer turned on.
	
	----------------------------------------------------------------
		program com
	
		common /x/ a, b, c, d
		integer result, a, b, c, d
	
		a = 2
		b = 3
		c = 4
		d = 5
	
		result = a * b + c * d
	
		print *, result
	
		stop
		end
	----------------------------------------------------------------
	
	The expected result of running the program is '26'.  What the
	program actually prints is '12'.  To see why, here is the code
	produced (comments and other prettification added):
	
	----------------------------------------------------------------
		.globl	_MAIN_
		.set	LF1,4
	_MAIN_:
		.word	LWM1
		subl2	$LF1,sp
		jmp	L12
	L13:
		movl	$2,_x_
		movl	$3,_x_+4
		movl	$4,_x_+8
		movl	$5,_x_+12
		mull3	_x_+4,_x_,-4(fp)
		addl3	-4(fp),-4(fp),{result}	# Mistake!
		pushal	v.3
		calls	$1,_s_wsle
		pushl	$4
		pushab	{result}
		pushal	{1}
		pushal	{3}
		calls	$4,_do_lio
		calls	$0,_e_wsle
		pushl	$0
		pushal	{00,00}
		calls	$2,_s_stop
		ret
		.align	1
	_com_:
		.word	LWM1
	L12:
		moval	v.1,r11
		jmp	L13
	----------------------------------------------------------------
	
	The two multiplies were treated as common subexpressions, and
	the same temporary [-4(fp)] was used to store both results.
_______________________________________________________________________________
f77--usr.bin				sdcsvax!sdchema!donn   2 Apr 84    +FIX
	An f77 program that uses certain constant integer exponents
	greater than 4 will not get the proper results if the optimizer
	is turned on.  In general the values produced are much larger
	than they should be.

    REPEAT BY:
	Compile the following program with the optimizer turned on
	and run it:
	
	----------------------------------------------------------------
		program powbug
	
		integer i
	
		i = 10
		i = i ** 5
	
		print *, i
	
		stop
		end
	----------------------------------------------------------------
	
	If your f77 is broken it will print '1000000' instead of
	'100000'.
_______________________________________________________________________________
f77--usr.bin		     dlw@ucbopal.CC (David L Wasley)   6 Jun 84    +FIX
	Under some circumstances entry points required by routines
	in libU77.a are not found because they exist in earlier libs.

    REPEAT BY:
	I don't have a specific case in front of me, but it has been
	reported to me by several users.
_______________________________________________________________________________
f77--usr.bin		      astrovax!draine (Bruce Draine)   25 Feb 84  
	Incorrect evaluation of complex arithmetic expressions
	involving library functions CCOS and CSIN.  For example,
	the fortran expression
		A=CCOS(Y)/CSIN(Y)
	with A and Y having been previously "typed" by a
		COMPLEX A,Y
	statement, is not being evaluated correctly for arbitrary
	values of the complex variable Y.
	It is not known to what extent this problem may also be
	endemic to other constructions [e.g., A=CSIN(Y)/CCOS(Y) ].

    REPEAT BY:
		Compiling and running the following simple program:
	
	C PROGRAM TO TEST APPARENT BUG IN F77 COMPILER
	C B.T.DRAINE,PRINCETON UNIV. OBS., 84/2/19
	      COMPLEX Y,A,B,C
	      Y=(4.601765,-3.839218)
	      WRITE(6,9900)Y
	 9900 FORMAT(' Y=',1P2E14.7)
	C INDIRECT EVALUATION OF COTANGENT(Y)
	      A=CCOS(Y)
	      B=CSIN(Y)
	      C=A/B
	      WRITE(6,9969)A,B
	 9969 FORMAT(' A=CCOS(Y)=',1P2E14.7,' B=CSIN(Y)=',2E14.7)
	      WRITE(6,9970)C
	 9970 FORMAT(' C=A/B=',1P2E14.7)
	C DIRECT EVALUATION
	      C=CCOS(Y)/CSIN(Y)
	      WRITE(6,9971)C
	 9971 FORMAT(' C=CCOS(Y)/CSIN(Y)=',1P2E14.7)
	      STOP
	      END
	
	The following output is generated by this program running under
	4.2 BSD on our Vax-11/750 with FPA:
	
	***** testf77 compiled with no options 84/2/19 *****
	output follows:
	 Y= 4.6017652e+00-3.8392179e+00
	 A=CCOS(Y)=-2.5673470e+00-2.3091778e+01 B=CSIN(Y)=-2.3113155e+01 2.5649724e+00
	 C=A/B= 2.0288443e-04 9.9909759e-01
	 C=CCOS(Y)/CSIN(Y)= 1.0000000e+00-1.4885653e-09
	
	***** testf77 compiled with -C option 84/2/19 *****
	output follows:
	 Y= 4.6017652e+00-3.8392179e+00
	 A=CCOS(Y)=-2.5673470e+00-2.3091778e+01 B=CSIN(Y)=-2.3113155e+01 2.5649724e+00
	 C=A/B= 2.0288443e-04 9.9909759e-01
	 C=CCOS(Y)/CSIN(Y)= 1.0000000e+00-1.4885653e-09

    FIX:
	Unknown to me.
_______________________________________________________________________________
f77--usr.bin				sdcsvax!sdchema!donn   28 May 84   +FIX
	When an f77 program is compiled with the optimizer enabled,
	side effects of an expression are evaluated twice if that
	expression is squared.  This was originally pointed out to
	me by Jerry Berkman at UC Berkeley.

    REPEAT BY:
	Put the following f77 subroutine in a file fsq.f and compile
	it to assembly language with the optimizer turned on:
	
	----------------------------------------------------------------
		subroutine fsq( x )
	
		real f, x
	
		x = f( x ) ** 2
	
		return
		end
	----------------------------------------------------------------
	
	If the bug is present in your compiler you should see the
	following (although probably not so pretty):
	
	----------------------------------------------------------------
		.globl	_fsq_
		.set	LF1,4
	_fsq_:
		.word	LWM1
		subl2	$LF1,sp
		jmp	L12
	L15:
		pushl	4(ap)
		calls	$1,_f_
		movl	r0,-4(fp)
		pushl	4(ap)
		calls	$1,_f_
		mulf2	-4(fp),r0
		movl	r0,*4(ap)
		ret
		.align	1
	L12:
		jmp	L15
	----------------------------------------------------------------
_______________________________________________________________________________
f77--usr.bin		   allegra!astrovax!gam (Gary Mamon)   19 Mar 84  
	4.2 F77 mishandles the following in single precision:
	
		z = x1**alpha + x2**alpha + ... + xlast**alpha
	
	where alpha is a floating point constant, and z and x sub i
	are real variables.
	F77 returns for z the value N*xlast**alpha, where N is the
	number of terms in the sum.
	
	Furthermore F77 mishandles the following in both single and
	double precision.
	
		z = (x1-y1)**alpha + (x2-y2)**alpha
	
	where again alpha is a floating point constant, and z, the 
	x sub i and the y sub i are real (real*8 in double precision)
	variables.

    REPEAT BY:
	compiling and running the following source with f77.
	
	x = 6.
	y = 8.
	x2 = 1.
	y2 = 1.
	z = x**2.+y**2.
	z2 = (x2-x)**2.+(y2-y)**2.
	print *,z,z2
	stop
	end
	
	The program will print "128 98" instead of "100 74"
	
	The same program starting with the line
	
	implicit real*8 (a-h,o-z)
	
	will print "100 98" instead of "100 74"

    FIX:
		Unknown.
	
	Comment:
		This is one of several 4.2 BSD F77 bugs already discovered at
		our site. The majority of Fortran users here are now using the
		4.1BSD F77 compiler.
_______________________________________________________________________________

              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.