readIntoSocket: fix with store URIs containing an &
The third argument to `open()` in `-|` mode is passed to a shell if it's
a string. In my case the store URI contains
`?secret-key=${signingKey.directory}/secret&compression=zstd`
For the `nix store cat` case this means that
* until `&` the process will be started in the background. This fails
immediately because no path to cat is specified.
* `compression=zstd` is a variable assignment
* the `$path` argument to `store cat` is attempted to be executed as
another command
Passing just the list solves the problem.
(cherry picked from commit 3ee51dbe589458cc54ff753317bbc6db530bddc0)
This commit is contained in:
committed by
John Ericson
parent
abe35881e4
commit
6133693097
@@ -423,8 +423,7 @@ sub readIntoSocket{
|
||||
my $sock;
|
||||
|
||||
eval {
|
||||
my $x= join(" ", @{$args{cmd}});
|
||||
open($sock, "-|", $x) or die q(failed to open socket from command:\n $x);
|
||||
open($sock, "-|", @{$args{cmd}}) or die q(failed to open socket from command:\n $x);
|
||||
};
|
||||
|
||||
return $sock;
|
||||
|
||||
Reference in New Issue
Block a user