*BSD News Article 3763


Return to BSD News archive

Newsgroups: comp.unix.bsd
Path: sserve!manuel!munnari.oz.au!network.ucsd.edu!usc!elroy.jpl.nasa.gov!decwrl!csus.edu!netcom.com!elh
From: elh@netcom.com (Ed Hudson)
Subject: Re: apparent csh bug, 386bsd (WITH FIX)
Message-ID: <-y9mcz-.elh@netcom.com>
Date: Mon, 17 Aug 92 17:28:39 GMT
Organization: Netcom - Online Communication Services  (408 241-9760 guest) 
References: <1992Aug15.201227.11858@noose.ecn.purdue.edu>
Keywords: free(), core.csh
Lines: 62


hi.

	/* many, many thanks to the jolitz's, gnu, cgd...
	 * this stuff is really sex on wheels!
	 */

	i ran into the same csh bug that bri@pegasus.mit.edu and
	tgt@neon.ecn.purdue.edu have reported (but for me, it was
	with 5 character directory names).  what follows is a work-around,
	not a real fix - but solves all of the problems that i've had.
	i haven't posted this to the net before, because i wanted to post
	a real fix for the real problem.

	i believe that the 'csh' bug is a memory allocation problem
	of some kind.

	my 'fix' is to just allocated 4 additional bytes on each call to
	malloc.  having done this, i have seen no other problems with
	the csh.

*** /usr/src/bin/csh/alloc.c	Mon Aug 10 21:14:15 1992
--- /usr/src/bin/csh/Orig/alloc.c	Mon Aug 10 21:08:09 1992
***************
*** 156,163 ****
      register int bucket = 0;
      register unsigned shiftr;
  
- nbytes= nbytes + 4;
- 
      /*
       * Convert amount of memory requested into closest block size stored in
       * hash buckets which satisfies request.  Account for space used per block
--- 156,161 ----


	in any event, here's my data on the bug problem:


	i've encountered a problem that i believe is a memory allocation bug
	in csh.

	i have a prompt setting alias in my .cshrc for "cd", that looks like:

		alias cd 'cd \,* > /dev/null; set noglob; set xdirs = `dirs`; set prompt = "$user@$hostname $xdirs[1]:q \, % "; unset noglob xdirs'

	the bug manifests itself when i type:

		cd
		cd bin01

	the csh says "Segmentation fault", and on a repeated attempt, dies.

	it seems to occur whenever the target directory is 5 characters in name length.
	i think that it is blowing up when the statement "set xdirs = `dirs`" is executed.
	if i modify /usr/src/bin/csh/alloc.c so that the number of bytes requested is automatically
	increased by 4 (on entry to malloc), then the problem goes away.

	i'm not sufficiently expert with gdb or the structure of csh to debug this
	properly.

	my hardware is:	DTK 486-25, AD1542b, WD8013, 16meg, maxtor 8380.