diff options
author | Paul Cristian Sarbu <paul.cristian.sarbu@huawei.com> | 2025-05-09 18:07:21 +0200 |
---|---|---|
committer | Paul Cristian Sarbu <paul.cristian.sarbu@huawei.com> | 2025-06-04 14:34:44 +0200 |
commit | ed25b0f77690abe1f04e4cdcb284b7e17208d169 (patch) | |
tree | cbbd2988aad894a3444b1bae047577dad24b0ecc /src/buildtool/execution_api/git | |
parent | 811e9be4cc9604dba3d768639444c0d9f849a3c7 (diff) | |
download | justbuild-ed25b0f77690abe1f04e4cdcb284b7e17208d169.tar.gz |
RepositoryConfig: Ensure consistency in reading blobs and trees
...with respect to rejecting invalid entries such as upwards
symlinks. Also ensure that valid trees are only checked once by
remebering known valid tress though marker files in local storage.
Diffstat (limited to 'src/buildtool/execution_api/git')
-rw-r--r-- | src/buildtool/execution_api/git/git_api.cpp | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/buildtool/execution_api/git/git_api.cpp b/src/buildtool/execution_api/git/git_api.cpp index 231e717a..2c083e64 100644 --- a/src/buildtool/execution_api/git/git_api.cpp +++ b/src/buildtool/execution_api/git/git_api.cpp @@ -81,7 +81,8 @@ auto GitApi::RetrieveToPaths( } } else { - auto blob = repo_config_.ReadBlobFromGitCAS(info.digest.hash()); + auto blob = repo_config_.ReadBlobFromGitCAS( + info.digest.hash(), /*is_symlink=*/IsSymlinkObject(info.type)); if (not blob) { return false; } @@ -141,7 +142,8 @@ auto GitApi::RetrieveToFds( } } else { - auto blob = repo_config_.ReadBlobFromGitCAS(info.digest.hash()); + auto blob = repo_config_.ReadBlobFromGitCAS( + info.digest.hash(), /*is_symlink=*/IsSymlinkObject(info.type)); if (not blob) { Logger::Log(LogLevel::Debug, "Blob {} not known to git", @@ -217,7 +219,9 @@ auto GitApi::RetrieveToCas( content = tree->RawData(); } else { - content = repo_config_.ReadBlobFromGitCAS(info->digest.hash()); + content = repo_config_.ReadBlobFromGitCAS( + info->digest.hash(), + /*is_symlink=*/IsSymlinkObject(info->type)); } if (not content) { return false; @@ -248,10 +252,14 @@ auto GitApi::RetrieveToCas( auto GitApi::RetrieveToMemory(Artifact::ObjectInfo const& artifact_info) const noexcept -> std::optional<std::string> { - return repo_config_.ReadBlobFromGitCAS(artifact_info.digest.hash()); + return repo_config_.ReadBlobFromGitCAS( + artifact_info.digest.hash(), + /*is_symlink=*/IsSymlinkObject(artifact_info.type)); } auto GitApi::IsAvailable(ArtifactDigest const& digest) const noexcept -> bool { - return repo_config_.ReadBlobFromGitCAS(digest.hash(), LogLevel::Trace) - .has_value(); + return repo_config_ + .ReadBlobFromGitCAS( + digest.hash(), /*is_symlink=*/false, LogLevel::Trace) + .has_value(); // allow invalid symlink if just to check existence } |