HomeFreeBSD

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

Description

MFC r314686: 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

Details

Provenance
jillesAuthored on
Parents
rS315168: MFC r314637: sh: Add some already working tests that exercise new code paths
Branches
Unknown
Tags
Unknown