On Friday, May 23, 2014 10:48:11 AM Chet Ramey wrote:
> On 5/23/14, 10:17 AM, Ondrej Oprala wrote:
> > Hi, there've recently been a few bug reports against bash on RH BZ,
> > saying that bash can't handle infinite recursion the way zsh or ksh can.
> > 
> > Looking at execute_cmd.c, there are the  funcnest{,_max} variables
> > and a piece of code using them in execute_function().
> > 
> > Will funcnest_max be set to non-0 in upstream code in the future?
> > Or is it just there for the downstream maintainers to set it if they
> > see it fit?
> 
> Neither.  The funcnest_max variable reflects the value of the FUNCNEST
> shell variable.
Oops Chet read your message right... I presumed you were aware of FUNCNEST, 
and were talking about setting a non-zero default at compile-time. Can't 
remember if that's ever been discussed.

> Users can set the maximum recursion level they want,
> without changing the bash code at all, but the default is still as much as
> the stack will give you (as it has been all along).

Yup, it's a good feature. Zsh and ksh don't "support infinite recursion", they 
have hardcoded limits (1024 ksh93, 1000 zsh).

As a random aside... dash somehow has extremely lightweight function calls. 
Glad it's not arbitrarily capped at 1k.

 $ time dash -c 'f() { echo "$1"; f $(($1 + 1)); }; f 0' | tail -n 1
13776

real    0m0.035s
user    0m0.020s
sys     0m0.033s

 $ time bash -c 'f() { echo "$1"; f $(($1 + 1)); }; f 0' | tail -n 1
8308

real    0m3.993s
user    0m4.032s
sys     0m0.165s
-- 
Dan Douglas

Reply via email to