fix(tvix): Use copy constructor to add strings to protos
Passing a string directly to add_paths like this causes the proto class to take ownership over the string, meaning when it is destructed it will *explicitly* free the string. When the string's actual owner (the derivation struct) then goes out of scope it'll get freed again, causing a double-free. This fixes that to instead use the copy constructor to assign to a pointer to a new path, and covers the whole to_proto method with a rapidcheck test. Fixes: b/64 Change-Id: I84235bed9104ff430a0acf686d4a96f1e2e9a897 Reviewed-on: https://cl.tvl.fyi/c/depot/+/2106 Reviewed-by: tazjin <mail@tazj.in> Tested-by: BuildkiteCI
This commit is contained in:
parent
20e206a3f6
commit
8d24a975f1
2 changed files with 29 additions and 1 deletions
2
third_party/nix/src/libstore/derivations.cc
vendored
2
third_party/nix/src/libstore/derivations.cc
vendored
|
|
@ -72,7 +72,7 @@ nix::proto::Derivation BasicDerivation::to_proto() const {
|
|||
result.mutable_outputs()->insert({key, output.to_proto()});
|
||||
}
|
||||
for (const auto& input_src : inputSrcs) {
|
||||
result.mutable_input_sources()->add_paths(input_src);
|
||||
*result.mutable_input_sources()->add_paths() = input_src;
|
||||
}
|
||||
result.set_platform(platform);
|
||||
result.mutable_builder()->set_path(builder);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue