Bug in syntax checking causes unintended running of a function

2016-04-18 Thread David Maas
Hi! I found a bug in bash, I've checked versions 4.1 (centos 6.7), 4.2
(centos 7.2), and 4.3.30 (from the ftp site). The bug is that if you do a
double parenthesis math thing with the wrong syntax, the script runs the
function during what I assume is syntax checking. Demonstration script is
attached.


-- Script --

#!/bin/bash
#Should be avg=((avg+6))

function neverrunme
{
avg=0
avg=(($avg+6))
echo -n "This function was never called. Bash version:"
/bin/bash --version | head -1
}

echo "Welcome to this demonstration."

-- Output --


[dm5284@juphub ~]$ ./test-file.sh
./test-file.sh: line 7: syntax error near unexpected token `('
./test-file.sh: line 7: `avg=(($avg+6))'
This function was never called. Bash version:GNU bash, version
4.2.46(1)-release (x86_64-redhat-linux-gnu)
./test-file.sh: line 10: syntax error near unexpected token `}'
./test-file.sh: line 10: `}'


test-file.sh
Description: Bourne shell script


Re: Bug in syntax checking causes unintended running of a function

2016-04-18 Thread konsolebox
On Tue, Apr 19, 2016 at 3:52 AM, David Maas  wrote:
> Hi! I found a bug in bash, I've checked versions 4.1 (centos 6.7), 4.2
> (centos 7.2), and 4.3.30 (from the ftp site). The bug is that if you do a
> double parenthesis math thing with the wrong syntax, the script runs the
> function during what I assume is syntax checking. Demonstration script is
> attached.
>
>
> -- Script --
>
> #!/bin/bash
> #Should be avg=((avg+6))
>
> function neverrunme
> {
> avg=0
> avg=(($avg+6))
> echo -n "This function was never called. Bash version:"
> /bin/bash --version | head -1
> }
>
> echo "Welcome to this demonstration."
>
> -- Output --
>
>
> [dm5284@juphub ~]$ ./test-file.sh
> ./test-file.sh: line 7: syntax error near unexpected token `('
> ./test-file.sh: line 7: `avg=(($avg+6))'
> This function was never called. Bash version:GNU bash, version
> 4.2.46(1)-release (x86_64-redhat-linux-gnu)
> ./test-file.sh: line 10: syntax error near unexpected token `}'
> ./test-file.sh: line 10: `}'

It didn't run the function. The function-syntax-checking scope simply
ended in `avg=(($avg+6))`.