[gnu.bash.bug] core dump when ls aliased and globbing done

romine@XAGSUN.EPM.ORNL.GOV (Charles H. Romine) (06/15/89)

I know that a bug report has been `automailed' to you, but I figured it
wouldn't hurt to supply a few more details.  I'm running on a Sun3/50
OS4.0.1, using the X window system version 11 release 2.  Bash version
0.99, compiled with exactly one change to the Makefile (variable
`MAINTAINER').  Running the bash executable as default shell.  My
`.bash_profile' file is as follows:

PS1="\h% "
ignoreeof=1
auto_resume=1
no_exit_on_failed_exec=1
nolinks=1
PATH=~/bin:/usr/gnu/bin:/usr/ucb:/bin:/usr/bin:/usr/new:/usr/local:/usr/local/bin:/etc:/usr/etc:/usr/tex/bin:/usr/local/X11.2/bin:.
export PS1 ignoreeof auto_resume no_exit_on_failed_exec nolinks PATH
alias clean='rm -f *~ .*~ core *.bak #*'
alias dvips='dvips -nodialog'
alias e=emacs
alias h=history
alias lpq='rsh seq lpq'
alias ls='ls -F'
alias more=less
alias news='/usr/local/news -a -f -b'
alias print='cat $* | rsh seq lpr -Plw1'
alias printman='cat $* | rsh seq psditroff -man -'
alias qt='cat $* | rsh seq enscript -G -fCourier-Bold8&'
alias tclean='rm -f -i *.dvi *.ps *.log *.aux *.bbl *.blg'
alias xstart='xinit .xinit > /tmp/xinit.out ; kbd_mode -a'
function look ()
{
	for v in $*
		do /usr/bin/look -df $v /usr/sun1/local/src/ispell/web | awk\
			-f /usr/sun1/u0/romine/lib/ispell/expand.new.awk
	done
}

function malias()
{
	for v in $*
		do grep $v $HOME/.mailrc
	done
}

------- end of .bash_profile file ------

bash dumps core on the following keyboard input (assume `bash>' is
the prompt):

bash>ls -l  g*

Note that bash does *not* dump core if

1) the extra space before the g is supressed
2) ls is unaliased
3) no wildcards are used

The output from the dbx command `where' gives the following:

> dbx /usr/gnu/bin/bash
Reading symbolic information...
Read 15748 symbols
(dbx) where
kill(0x45c, 0x6) at 0x2ad3c
abort() at 0x24a09
programming_error(reason = 0x233fb "*m++ == MAGIC1", arg1 = 431020, arg2 = 7), l
ine 416 in "make_cmd.c"
realloc(mem = 0x693ac "ls -F -l  ", n = 72), line 606 in "alloc-files/malloc.c"
xrealloc(pointer = 0x48 "", size = 72), line 41 in "general.c"
alias_expand(string = 0x693cc "ls -l  g*"), line 225 in "alias.c"
pre_process_line(line = 0x690cc "ls -l  g*", print_changes = 1, addit = 1), line
 839 in "bison.simple"
shell_getc(), line 718 in "bison.simple"
read_token(command = 0), line 1003 in "bison.simple"
yylex(), line 940 in "bison.simple"
yyparse(), line 309 in "bison.simple"
read_command(), line 620 in "shell.c"
reader_loop(), line 560 in "shell.c"
main(argc = 1, argv = 0xefffbd4, env = 0xefffbdc), line 461 in "shell.c"
(dbx) quit
>

Hope this helps track it down -- I don't currently have time to debug
this myself, but I intend to do it soon.

					Chuck Romine
					romine@msr.epm.ornl.gov

chet@cwns5.INS.CWRU.Edu (Chet Ramey) (06/15/89)

In article <8906141821.AA01625@xagsun.epm.ornl.gov> romine@XAGSUN.EPM.ORNL.GOV (Charles H. Romine) writes:

>alias ls='ls -F'

>bash dumps core on the following keyboard input (assume `bash>' is
>the prompt):
>
>bash>ls -l  g*
>
>Note that bash does *not* dump core if
>
>1) the extra space before the g is supressed
>2) ls is unaliased
>3) no wildcards are used

What is happening is that this is tickling the one spot in expand_alias where
copying into a string is not checked for overflow.  It has to do with the way
bash discards whitespace when expanding an alias.  Here's a 2-line diff to
alias.c that seems to fix the problem.

*** bash-0.99/alias.c   Thu Jun  8 02:51:51 1989
--- src-0.99/alias.c    Wed Jun 14 18:51:51 1989
***************
*** 169,172

    j = strlen (line);
    strncpy (line + j, string + start, i - start);
    line[j + (i - start)] = '\0';

--- 169,174 -----

    j = strlen (line);
+   if ((1 + j + i - start) >= line_len)
+       line = (char *) xrealloc(line, line_len += (50 + i - start));
    strncpy (line + j, string + start, i - start);
    line[j + (i - start)] = '\0';


Chet Ramey     Network Services Group, CWRU    chet@{cwjcc,pirate}.INS.CWRU.Edu

"The flagon with the dragon has the potion with the poison;
	the vessel with the pestle holds the brew that is true!"