HomeFreeBSD

sh: Fix crash if a -T trap is taken during command substitution.

Description

sh: Fix crash if a -T trap is taken during command substitution.

Code like t=$(stat -f %m "$file") segfaulted if -T was active and a trap
was taken while the shell was waiting for the child process to finish.

What happened was that the dotrap() call in waitforjob() was hit. This
re-entered command execution (including expand.c) at a point not expected by
expbackq(), and global state (unallocated stack string and argbackq) was
corrupted.

To fix this, change expbackq() to prepare for command execution to be
re-entered.

Reported by: bdrewery
MFC after: 1 week

Details

Provenance
jillesAuthored on
Parents
rS314685: ps(1): Only detect terminal width if stdout is a tty
Branches
Unknown
Tags
Unknown