On 4/10/18 5:56 AM, Martijn Dekker wrote: > $ bash -o functrace -c 'fn() { eval "return"; }; trap "fn" RETURN; fn' > > Result: segfault due to infinite recursion.
Thanks for the report; I'll fix this. __________ > > Even apart from this bug with 'eval return', the effect of '-o functrace' > is a bit strange: > > $ bash -o functrace -c 'fn() { printf foo; fn2; }; > fn2() { printf bar; fn3; }; > fn3() { printf baz\\n; }; > trap fn RETURN; fn' > foobarbaz > foobarbaz > foobarbaz > foobarbaz > > (I'd expect one 'foobarbaz', not four) > > It seems odd that the RETURN trap would be triggered while a RETURN trap > action is still being executed. Might it be better to temporarily > deactivate the effect of '-o functrace' while a RETURN trap action is being > executed? Well, trap handlers are recursive, in the sense that you can execute a trap on signal X from a signal X trap handler. If the RETURN trap is inherited by functions, and traps are recursive, wouldn't the bash behavior be the logical thing to do? (Yes, I know there are problems with recursive signal handler invocations in bash-4.4.) Chet -- ``The lyf so short, the craft so long to lerne.'' - Chaucer ``Ars longa, vita brevis'' - Hippocrates Chet Ramey, UTech, CWRU c...@case.edu http://tiswww.cwru.edu/~chet/