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:
Griffin Smith 2020-11-18 09:02:25 -05:00 committed by glittershark
parent 20e206a3f6
commit 8d24a975f1
2 changed files with 29 additions and 1 deletions

View file

@ -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);