Re: Bash-3.2 Official Patch 20

2007-08-25 Thread Mike Frysinger
On Friday 24 August 2007, Chet Ramey wrote:
>BASH PATCH REPORT
>=
>
> Bash-Release: 3.2
> Patch-ID: bash32-020
>
> Bug-Reported-by:  Ian A Watson <[EMAIL PROTECTED]>
> Bug-Reference-ID: 
> [EMAIL PROTECTED]> Bug-Reference-URL:
>
> Bug-Description:
>
> In some cases of error processing, a jump back to the top-level processing
> loop from a builtin command  would leave the shell in an inconsistent
> state.

this appears to break handling of read only variables in source statements

consider:
$ cat test.sh
#!/bin/bash
unset MOO COW
cat << EOF > source-test.sh
MOO=1
UID=1
COW=1
EOF
source ./source-test.sh
echo WANT: MOO=1 COW=1
echo HAVE: MOO=$MOO COW=$COW

when run with bash versions before 3.2_p20, we see:
WANT: MOO=1 COW=1
HAVE: MOO=1 COW=1

when run with bash versions starting with 3.2_p20, we see:
WANT: MOO=1 COW=1
HAVE: MOO=1 COW=

in the case of Gentoo, we have some code that saves/reloads the entire 
environment in between invocations and we dont bother picking out the 
readonly variables ... so the env does not fully get reloaded as a readonly 
variable appears in the `set` output rather quickly :(
-mike


signature.asc
Description: This is a digitally signed message part.


Re: Bash-3.2 Official Patch 20

2007-08-25 Thread Mike Frysinger
On Saturday 25 August 2007, Mike Frysinger wrote:
> On Friday 24 August 2007, Chet Ramey wrote:
> >  BASH PATCH REPORT
> >  =
> >
> > Bash-Release: 3.2
> > Patch-ID: bash32-020
> >
> > Bug-Reported-by:Ian A Watson <[EMAIL PROTECTED]>
> > Bug-Reference-ID:>50 [EMAIL PROTECTED]> Bug-Reference-URL:
> >
> > Bug-Description:
> >
> > In some cases of error processing, a jump back to the top-level
> > processing loop from a builtin command  would leave the shell in an
> > inconsistent state.
>
> this appears to break handling of read only variables in source statements

this may also just be a bug fix, i just want confirmation before we go 
changing things :)
-mike


signature.asc
Description: This is a digitally signed message part.


Re: Bash-3.2 Official Patch 20

2007-08-25 Thread Chet Ramey
Mike Frysinger wrote:
>> Bug-Description:
>>>
>>> In some cases of error processing, a jump back to the top-level
>>> processing loop from a builtin command  would leave the shell in an
>>> inconsistent state.
>> this appears to break handling of read only variables in source statements
> 
> this may also just be a bug fix, i just want confirmation before we go 
> changing things :)

I've considered it, and concluded that the post-patch 20 behavior is the
right thing.  If a variable assignment error occurs during execution of
a builtin, it should cause the builtin to return with a non-failure status
(unless you're running a non-interactive shell in posix mode, in which
case Posix says the whole shell should exit).

I do see what Gentoo is trying to do, and I'll try to devise a workaround
to accommodate both needs.

Chet

-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer
   Live Strong.  No day but today.
Chet Ramey, ITS, CWRU[EMAIL PROTECTED]http://cnswww.cns.cwru.edu/~chet/




Re: Bash-3.2 Official Patch 20

2007-08-25 Thread Mike Frysinger
On Saturday 25 August 2007, Chet Ramey wrote:
> Mike Frysinger wrote:
> >> Bug-Description:
> >>> In some cases of error processing, a jump back to the top-level
> >>> processing loop from a builtin command  would leave the shell in an
> >>> inconsistent state.
> >>
> >> this appears to break handling of read only variables in source
> >> statements
> >
> > this may also just be a bug fix, i just want confirmation before we go
> > changing things :)
>
> I've considered it, and concluded that the post-patch 20 behavior is the
> right thing.  If a variable assignment error occurs during execution of
> a builtin, it should cause the builtin to return with a non-failure status
> (unless you're running a non-interactive shell in posix mode, in which
> case Posix says the whole shell should exit).
>
> I do see what Gentoo is trying to do, and I'll try to devise a workaround
> to accommodate both needs.

thanks

a side note ... if you change any of BASH_{ARGC,ARGV,LINENO,SOURCE} before 
setting a readonly variable, bash will not spit out the error message about 
the variable being readonly ...
(UID=1)
-bash: UID: readonly variable
(BASH_ARGC= UID=1)

this regression seems to have appeared between the last bash-2 and the first 
bash-3 ...
-mike


signature.asc
Description: This is a digitally signed message part.


Re: Bash-3.2 Official Patch 20

2007-08-25 Thread Chet Ramey
Mike Frysinger wrote:

> a side note ... if you change any of BASH_{ARGC,ARGV,LINENO,SOURCE} before 
> setting a readonly variable, bash will not spit out the error message about 
> the variable being readonly ...
> (UID=1)
> -bash: UID: readonly variable
> (BASH_ARGC= UID=1)
> 
> this regression seems to have appeared between the last bash-2 and the first 
> bash-3 ...

They're not readonly variables.  The shell doesn't allow them to be unset,
but you can assign new (even nonsense) values.

Chet

-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer
   Live Strong.  No day but today.
Chet Ramey, ITS, CWRU[EMAIL PROTECTED]http://cnswww.cns.cwru.edu/~chet/




Re: Bash-3.2 Official Patch 20

2007-08-25 Thread Mike Frysinger
On Saturday 25 August 2007, Chet Ramey wrote:
> Mike Frysinger wrote:
> > a side note ... if you change any of BASH_{ARGC,ARGV,LINENO,SOURCE}
> > before setting a readonly variable, bash will not spit out the error
> > message about the variable being readonly ...
> > (UID=1)
> > -bash: UID: readonly variable
> > (BASH_ARGC= UID=1)
> > 
> > this regression seems to have appeared between the last bash-2 and the
> > first bash-3 ...
>
> They're not readonly variables.  The shell doesn't allow them to be unset,
> but you can assign new (even nonsense) values.

what i meant was that for some reason, i didnt get the readonly error after 
modifying one of those four values, but the script stopped parsing at the 
same spot since it was a readonly var ...

(UID=1)
-bash: UID: readonly variable

(BASH_ARGV=""; UID=1; echo HI)

-mike


signature.asc
Description: This is a digitally signed message part.