diff options
author | Rick van Schijndel <Mindavi@users.noreply.github.com> | 2024-02-16 18:33:27 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-16 18:33:27 +0100 |
commit | b728d76d0e52eb7647c51ff9b23c94c353163091 (patch) | |
tree | 3bac8a55fb1c0c5ce2976b9e394540e32242ec79 /pkgs | |
parent | 98c3051984d6f86ec28186fb9e194f9986858c1b (diff) | |
parent | c47f2452530b9cdb58de578f1c44c37e8aa616f0 (diff) |
Merge pull request #255463 from emilylange/stdenv/patch-shebangs-trailing-newline
patch-shebangs: fix crash with shebang without trailing newline
Diffstat (limited to 'pkgs')
-rw-r--r-- | pkgs/build-support/setup-hooks/patch-shebangs.sh | 5 | ||||
-rw-r--r-- | pkgs/test/stdenv/patch-shebangs.nix | 17 |
2 files changed, 20 insertions, 2 deletions
diff --git a/pkgs/build-support/setup-hooks/patch-shebangs.sh b/pkgs/build-support/setup-hooks/patch-shebangs.sh index a22f989362c4a..80a29d727c858 100644 --- a/pkgs/build-support/setup-hooks/patch-shebangs.sh +++ b/pkgs/build-support/setup-hooks/patch-shebangs.sh @@ -72,7 +72,10 @@ patchShebangs() { while IFS= read -r -d $'\0' f; do isScript "$f" || continue - read -r oldInterpreterLine < "$f" + # read exits unclean if the shebang does not end with a newline, but still assigns the variable. + # So if read returns errno != 0, we check if the assigned variable is non-empty and continue. + read -r oldInterpreterLine < "$f" || [ "$oldInterpreterLine" ] + read -r oldPath arg0 args <<< "${oldInterpreterLine:2}" if [[ -z "${pathName:-}" ]]; then diff --git a/pkgs/test/stdenv/patch-shebangs.nix b/pkgs/test/stdenv/patch-shebangs.nix index 888d4a53a2733..db9ca2fcaafef 100644 --- a/pkgs/test/stdenv/patch-shebangs.nix +++ b/pkgs/test/stdenv/patch-shebangs.nix @@ -72,11 +72,26 @@ let }; }; + without-trailing-newline = stdenv.mkDerivation { + name = "without-trailing-newline"; + strictDeps = false; + dontUnpack = true; + installPhase = '' + mkdir -p $out/bin + printf "#!/bin/bash" > $out/bin/test + chmod +x $out/bin/test + dontPatchShebangs= + ''; + passthru = { + assertion = "grep '^#!${stdenv.shell}' $out/bin/test > /dev/null"; + }; + }; + }; in stdenv.mkDerivation { name = "test-patch-shebangs"; - passthru = { inherit (tests) bad-shebang ignores-nix-store updates-nix-store split-string; }; + passthru = { inherit (tests) bad-shebang ignores-nix-store updates-nix-store split-string without-trailing-newline; }; buildCommand = '' validate() { local name=$1 |