From 8d24a975f1d300f43485aa33e72187a016d23a49 Mon Sep 17 00:00:00 2001 From: Griffin Smith Date: Wed, 18 Nov 2020 09:02:25 -0500 Subject: 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 Tested-by: BuildkiteCI --- third_party/nix/src/libstore/derivations.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'third_party/nix/src/libstore') diff --git a/third_party/nix/src/libstore/derivations.cc b/third_party/nix/src/libstore/derivations.cc index 0b7f5d092c43..ed184b6d9de4 100644 --- a/third_party/nix/src/libstore/derivations.cc +++ b/third_party/nix/src/libstore/derivations.cc @@ -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); -- cgit 1.4.1