From 8bc68819bc4e03346ddc50519d6e3fecfedf101a Mon Sep 17 00:00:00 2001 From: Eliah Kagan Date: Fri, 6 Sep 2024 04:21:55 -0400 Subject: [PATCH] Fix race condition scheduling `$tempdir` deletion The `cargo-zng` script contained: trap 'rm -rf "$tempdir"' 0 INT tempdir="$(mktemp -d)" That releases a resource that may occasionally not have been acquired. In the rare case that the script would be interrupted before `$tempdir` was set, this would attempt to read the previous value of `$tempdir`. But if the calling environment had an environment variable of this name, then its value would have been inherited as the initial `$tempdir` in the script, and wrongly deleted. The change made here puts the commands in the other order, so we only arrange for the deletion of `$tempdir` once the directory we want to delete exists and `$tempdir` will definitely expand to its name and not that of another directory. In a sense, this trades one race condition for another, in that now the directory will not be deleted if the script is interrupted immediately after it is created. But this is not a problem, because it does not cause data loss, and the script already does not try to cover all ways the script can be terminated in the `trap` command. --- cargo-zng | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cargo-zng b/cargo-zng index be53d6dd..8ff11938 100755 --- a/cargo-zng +++ b/cargo-zng @@ -1,7 +1,7 @@ #!/bin/bash set -eu -trap 'rm -rf "$tempdir"' 0 INT tempdir="$(mktemp -d)" +trap 'rm -rf "$tempdir"' 0 INT cargo package -l --allow-dirty | tr '\\' '/' | grep -v '^Cargo\.toml\.orig$' |