Allow printf/return/assignments after exec (fixes #2249)

This commit is contained in:
Vidar Holen 2021-07-26 19:32:33 -07:00
parent 754ab22d94
commit c471e45822
1 changed files with 3 additions and 1 deletions

View File

@ -1705,6 +1705,7 @@ prop_checkSpuriousExec6 = verify checkSpuriousExec "exec foo > file; cmd"
prop_checkSpuriousExec7 = verifyNot checkSpuriousExec "exec file; echo failed; exit 3"
prop_checkSpuriousExec8 = verifyNot checkSpuriousExec "exec {origout}>&1- >tmp.log 2>&1; bar"
prop_checkSpuriousExec9 = verify checkSpuriousExec "for file in rc.d/*; do exec \"$file\"; done"
prop_checkSpuriousExec10 = verifyNot checkSpuriousExec "exec file; r=$?; printf >&2 'failed\n'; return $r"
checkSpuriousExec _ = doLists
where
doLists (T_Script _ _ cmds) = doList cmds False
@ -1720,7 +1721,8 @@ checkSpuriousExec _ = doLists
stripCleanup = reverse . dropWhile cleanup . reverse
cleanup (T_Pipeline _ _ [cmd]) =
isCommandMatch cmd (`elem` ["echo", "exit"])
isCommandMatch cmd (`elem` ["echo", "exit", "printf", "return"])
|| isAssignment cmd
cleanup _ = False
doList = doList' . stripCleanup