Thread (15 messages) 15 messages, 5 authors, 2018-06-28

Re: [PATCH 29/29] t/test-lib: teach --chain-lint to detect broken &&-chains in subshells

flat view

From: Johannes Sixt <hidden>
Date: 2018-06-27 06:27:40

Possibly related (same subject, not in this thread)

Am 27.06.2018 um 04:15 schrieb Elijah Newren:
quoted hunk ↗ jump to hunk
On Tue, Jun 26, 2018 at 2:01 PM, Jeff King [off-list ref] wrote:
quoted
On Tue, Jun 26, 2018 at 04:46:18PM -0400, Eric Sunshine wrote:
quoted
quoted
Some of these dangers can be de-thoothed during the linting phase by
defining do-nothing shell functions:

     cp () { :; }
     mv () { :; }
     ln () { :; }

That, at least, makes the scariest case ("rm") much less so.
Now that's an interesting idea. We can't catch every dangerous action
(notably ">" would be hard to override), but it should be pretty cheap
to cover some obvious ones.

-Peff
Crazy idea: maybe we could defang it a little more thoroughly with
something like the following (apologies in advance if gmail whitespace
damages this):
diff --git a/t/test-lib.sh b/t/test-lib.sh
index 28315706be..7fda08a90a 100644
--- a/t/test-lib.sh
+++ b/t/test-lib.sh
@@ -675,7 +675,7 @@ test_run_ () {
                 trace=
                 # 117 is magic because it is unlikely to match the exit
                 # code of other programs
-               if test "OK-117" != "$(test_eval_ "(exit 117) &&
$1${LF}${LF}echo OK-\$?" 3>&1)"
+               if test "OK-117" != "$(test_eval_ "cd() { return 0; }
&& PATH=/dev/null && export PATH && (exit 117) && $1${LF}${LF}echo
OK-\$?" 3>&1)"
                 then
                         error "bug in the test script: broken &&-chain
or run-away HERE-DOC: $1"
                 fi
I'd define all these functions as { return 1; } because we want to stop any && chain as early as possible (and with an exit code that is not the sentinel value).

-- Hannes
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help