These all appear to work correctly in the devel branch. On Sun, May 22, 2016 at 2:52 PM, Gabriel Sharp <etherial_ra...@outlook.com> wrote:
> From: osirisgot...@hotmail.com > To: bug-bash@gnu.org,b...@packages.debian.org > Subject: compat42 and compat41 behave incorrectly, compat41 not possible > at all > > compat42 and compat41 shell options are set incorrectly when set via > BASH_COMPAT > > > Configuration Information [Automatically generated, do not change]: > Machine: x86_64 > OS: linux-gnu > Compiler: gcc > Compilation CFLAGS: -DPROGRAM='bash' -DCONF_HOSTTYPE='x86_64' > -DCONF_OSTYPE='linux-gnu' -DCONF_MACHTYPE='x86_64-pc-linux-gnu' > -DCONF_VENDOR='pc' -DLOCALEDIR='/usr/share/locale' -DPACKAGE='bash' -DSHELL > -DHAVE_CONFIG_H -I. -I../. -I.././include -I.././lib > -D_FORTIFY_SOURCE=2 -g -O2 -fstack-protector-strong -Wformat > -Werror=format-security -Wall > uname output: Linux larnica 4.2.0-22-generic #27-Ubuntu SMP Thu Dec 17 > 22:57:08 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux > Machine Type: x86_64-pc-linux-gnu > > Bash Version: 4.3 > Patch Level: 42 > Release Status: release > > Description: > when setting BASH_COMPAT to the documented values of '4.2', '42', > '4.1', and '41' the > shell responds incorrectly by setting the incorrect shell option, > see the repeat-by for > a table to clearly see what is going on. Please note problematic > values are listed along > with a SINGLE working value for contrast purposes, the other unlisted > values work as expected. > > > Repeat-By: > TABLE 1 - BASH_COMPAT <-> shell options (shopt) relationships > > > BASH_COMPAT shopt result > expected shopt error? notes > > 3.1 compat31 compat31 NO > 31 compat31 compat31 NO > 3.2 compat32 compat32 NO > 32 compat32 compat32 NO > 40 compat40 compat40 NO > 4.0 compat40 compat40 NO > 4.2 NONE compat42 YES > 42 NONE compat42 YES > 4.1 compat41, compat41 YES (1/2**) > 41 compat41, compat41 YES (1/2**) > <unset or ""> > NONE NONE NO > > * all values are set EXACTLY as shown unless between arrowed brackets > <> > ** when two options get set, one is correct, the other is not because > more than one would contradict it's purpose. > > 1) start a bash shell with 'bash --norc' to ensure no/minimal outside > influences > 2) type 'BASH_COMPAT=<value>; shopt | grep compat' where the > <value> is one of the entries from the above table > 3) press ENTER to set and observe the effects of the variable being > sete > > Fix: > Not too sure but I can guess as a programmer that there is some kind > of fence post > error OR bit-logic error. I dont have time to go through the source > myself, so I hope > this is enough info. No coredump because no crash actually results > from this. > > PS: Not sure if this is intended or not, but when errexit is set, and > an invalid BASH_COMPAT > value is assigned; the error message is displayed, but $? is unchanged > as if no error was > observed, and as a result, errexit does not cause an exit. I was in a > position where I needed > this to happen, and it seemed that because of that, it is a little > pointless to even have BASH_COMPAT > if the error doesn't even communicate to the script's environment in > any way (except 'catching' output, which > may more may not work if redirections are in effect). > > Sorry if this was not a bug or problem and I had missed some > documentation -- please let me know where it is > so this documentation may become more informative (info or man). > > > > [Description of how to fix the problem. If you don't know a > fix for the problem, don't include this section.] > >