🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

1 total messages Started by Marnix van Ammers Tue, 17 Oct 1989 23:08
Bug/problem in ksh88b and/or SUN OS
#1
Author: Marnix van Ammers
Date: Tue, 17 Oct 1989 23:08
103 lines
3885 bytes
My ksh88b was dumping core on my SUN 3/50.  It would happen
whenever the first command I executed was a particular function in
my $FPATH.  I traced it down to the first echo command in my function.
When I recompiled ksh88b with ECHOPRINT set to 1 in the OPTIONS file,
the core dumps stopped.

I found out that when the core dump happened, the call to
path_absolute() at line 1084 of sh/name.c returned a NULL pointer
and that NULL pointer was then passed to strcmp() at line 1086.
The strcmp() function in SUN OS 4.0.3 apparently cannot take a NULL
argument (maybe this is really something SUN ought to fix?).

I could not figure out why path_absolute was returning a NULL
pointer.  When I used the dbxtool debugger I'd end up getting
a "Trace/BPT trap(coredump)" before getting to where my normal core
dump was occurring.  I don't know what a "Trace/BPT trap(coredump)"
(BPT == Break Point Trap ??) is but it seems to be a feature or
problem with the debugger (I'm new at this dbx stuff, so forgive me).

I was able to at least fix the problem by not passing a NULL pointer
to strcmp().

Here are the diffs to my fix (to sh/name.c):
1085a1086,1104
> 
> /* Core dumping fix
> 
>    By: Marnix A. van Ammers
>        Oct 12, 1989
>        {att|pacbell}!pttesac!mavanamm
>    
>    Following fix added to avoid core dump by eq() when cp is NULL.
>    (Happens when path_absolute() in echo_mode() returns NULL.)
>    That situation happened when the first command to use echo was in my
>    function gp() and OPTIONS had ECHOPRINT=0 and there is a
>    /bin/echo as in the case of my Sun 3/50 running SUNOS 4.0.3 */
> 
> 		if(cp == NULL)
> 			echo_arg = (char *) e_minus;
> 		else
> 
> /* end of core dumping fix. */
> 

For your information, here's my autoload function gp (I've since
changed this function, but this is the version that caused
ksh88b to dump core in my SUN):
#################################################################
function getpaths {
  if [ "$1" = -x ];then
    set -x;shift
  fi
  # getpaths($PATH) -- Return list of paths in $1
  typeset PATH="$1"
  typeset This_Path Front_Part Paths

  while [ -n "${PATH}" ];do  # While there's something in $PATH
    Front_Part="${PATH%%:*}" # Remove 1st ':' and all to the right of it
    if [ -z "$Front_Part" ];then # Front part was null -- special case
      This_Path="."
      Front_Part=":"
    else
      This_Path="$Front_Part"
    fi
    Paths="$Paths $This_Path"
    PATH="${PATH#${Front_Part}}"
    if [ "${PATH}" != ":" ];then # If this isn't the last (trailing) ':' 
      PATH="${PATH#:}"           # then remove the leading ':'
    fi
  done
  echo "$Paths"
}

# gp = getpath .  Finds a *command* and does an ls -l on it
# For instance "gp sh" should find sh, rsh, ksh, rksh
function gp {
  if [ "$1" = -x ];then
    set -x;shift
  fi
  typeset F Files PATHS P

  print "Searching for executables \"*$1*\" in \$PATH" >&2
  PATHS=`getpaths "$PATH"`
  for P in $PATHS;do
    for F in $P/*$1*;do
      if [ -f "$F" -a -x "$F" ];then
        Files="$Files $F"
      fi
    done
  done
  if [ -n "$Files" ];then
    ls -ld $Files
  fi
}
#################################################################

I don't seem to have the real problem in hand, but I did just want
to report this to the net in case anyone has an idea what's really
going on.

--
Marnix
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads