about summary refs log tree commit diff
diff options
context:
space:
mode:
authorsterni <sternenseemann@systemli.org>2024-12-20T12·43+0100
committerclbot <clbot@tvl.fyi>2024-12-20T23·38+0000
commit756e96499c7ab747a1fb967369d661a725071f24 (patch)
tree56d7d343a7806e931c5fce1c5a72c19f2646e30a
parentde4004a8ead792919282f5f4bba78ef0c01058e8 (diff)
fix(nix/writeTree): also shell escape path nodes r/9011
We allow strings with context that represent paths (since they qualify
as `pathLike`). While store path (names) may not contain any characters
that are meaningful in shell, they may contain directories and/or files
with such names since it's permissible in POSIX.

To fix this, we convert the given value `v` to a shell argument in two
stages:

1. Use `${v}` to coerce the value to a string while importing any
   necessary paths to store.
2. Escape the resulting string for use as an argument.

Change-Id: Ib989b50df2a921c2abcd1ebc7ca0ff6e2bb79088
Reviewed-on: https://cl.tvl.fyi/c/depot/+/12898
Reviewed-by: sterni <sternenseemann@systemli.org>
Tested-by: BuildkiteCI
Autosubmit: sterni <sternenseemann@systemli.org>
-rw-r--r--nix/writeTree/default.nix2
1 files changed, 1 insertions, 1 deletions
diff --git a/nix/writeTree/default.nix b/nix/writeTree/default.nix
index 0c7c2a130feb..4f22221f3014 100644
--- a/nix/writeTree/default.nix
+++ b/nix/writeTree/default.nix
@@ -17,7 +17,7 @@ let
     + pipe tree [
       (mapAttrsToList (k: v:
         if isPathLike v then
-          "cp -R --reflink=auto ${v} \"$out/\"${esc path}/${esc k}"
+          "cp -R --reflink=auto ${esc "${v}"} \"$out/\"${esc path}/${esc k}"
         else if lib.isAttrs v then
           writeTreeAtPath (path + "/" + k) v
         else