diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/buildtool/execution_api/remote/bazel/bazel_cas_client.cpp | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/buildtool/execution_api/remote/bazel/bazel_cas_client.cpp b/src/buildtool/execution_api/remote/bazel/bazel_cas_client.cpp index d6fa8d9e..8158ee55 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_cas_client.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_cas_client.cpp @@ -180,7 +180,19 @@ auto BazelCasClient::ReadSingleBlob(std::string const& instance_name, bazel_re::Digest const& digest) noexcept -> std::optional<BazelBlob> { if (auto data = stream_->Read(ToResourceName(instance_name, digest))) { - return BazelBlob{ArtifactDigest::Create(*data), std::move(*data)}; + // Recompute the digest from the received content to cross-check a + // correct transmission. + auto real_digest = static_cast<bazel_re::Digest>( + NativeSupport::IsTree(digest.hash()) + ? ArtifactDigest::Create<ObjectType::Tree>(*data) + : ArtifactDigest::Create<ObjectType::File>(*data)); + if (digest.hash() != real_digest.hash()) { + logger_.Emit(LogLevel::Warning, + "Requested {}, but received {}", + digest.hash(), + real_digest.hash()); + } + return BazelBlob{std::move(real_digest), std::move(*data)}; } return std::nullopt; } |