On 2016-08-04 at 17:04 Dan Cross <[email protected]> wrote:
> FYI.

cool!  glad they are already on the case!

barret

> 
> ---------- Forwarded message ----------
> From: Dan Cross <[email protected]>
> Date: Thu, Aug 4, 2016 at 5:04 PM
> Subject: Re: Test exit status misinterpreted in scripts when buit without
> job control
> To: [email protected]
> Cc: [email protected]
> 
> 
> On Thu, Aug 4, 2016 at 2:36 PM, Chet Ramey <[email protected]> wrote:
> 
> > On 8/4/16 12:05 PM, Dan Cross wrote:
> > > Bash Version: 4.3
> > > Patch Level: 30
> > > Release Status: release
> > >
> > > Description:
> > >         When bash is built without job control, shell scripts that use
> > >         the 'test' builtin (e.g., via '[') in conditionals may take the
> > >         wrong branch becuase the exit status of the test is lost.
> > >
> > > Repeat-By:
> > >         Configure without job control.  Via e.g.,
> > >         ./configure --prefix=/usr --bindir=/bin --without-bash-malloc
> > --disable-nls --disable-job-control
> > >         Invoke the resulting shell and run the following sequence of
> > commands:
> > >
> > >         $ cat > foo.sh
> > >         if [ $# -lt 2 ]
> > >         then
> > >                 echo "$# args is less than 2"
> > >         else
> > >                 echo "$# args is not less than 2"
> > >         fi
> > >         $ chmod +x ./foo.sh
> > >         $ ./foo.sh 1 2 3 4
> > >         4 args is less than 2
> > >         $
> > >
> > >         Observe the output: '4' is not actually less than '2' yet the
> > >         script incorrectly reports it as such.
> >
> > Thanks for the report.  I took a quick look at this, and it's not disabling
> > job control that does it: it's disabling both job control and nls.
> > Disabling either one while leaving the other enabled doesn't produce this
> > error (which only happens in the case where you run a script with the
> > execute bit set without a #! line after running an executable that causes
> > the shell to call waitpid()).  It's a strange set of circumstances.
> > I'll see what I can find.
> >
> 
> Thanks, Chet. FYI, I tried building for the research kernel with NLS
> enabled and am still seeing the problem. Our patch is pretty minimal
> (mostly just adding the name of the OS as supported in the various
> configure scripts, and we have a requirement that strings written using
> 'echo' get written with one system call, so I bypass stdio for that. Oh,
> and we have another context string in addition to errno that we print on
> errors). Also, I was able to reproduce on an unpatched bash on Linux with
> NLS enabled:
> 
> % ../configure --prefix=/usr --bindir=/bin --without-bash-malloc
> --disable-job-control
> % grep NLS config.h
> #define ENABLE_NLS 1
> % make
> (build output omitted for brevity)
> % ./bash --noprofile --norc
> $ ./foo.sh 1 2 3 4
> 4 args is not less than 2
> $ ./foo.sh 1 2 3 4
> 4 args is less than 2
> $ exit
> %
> 
> Thanks again!
> 
>         - Dan C.
> 
> (PS: If you're curious, we're porting bash to the Akaros operating system:
> http://akaros.org/)
> 

-- 
You received this message because you are subscribed to the Google Groups 
"Akaros" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to