summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/buildtool/execution_api/execution_service/TARGETS6
-rw-r--r--src/buildtool/execution_api/execution_service/ac_server.cpp8
-rw-r--r--src/buildtool/execution_api/execution_service/bytestream_server.cpp10
-rw-r--r--src/buildtool/execution_api/execution_service/cas_server.cpp7
-rw-r--r--src/buildtool/execution_api/execution_service/execution_server.cpp20
-rw-r--r--src/buildtool/execution_api/execution_service/operations_server.cpp5
6 files changed, 50 insertions, 6 deletions
diff --git a/src/buildtool/execution_api/execution_service/TARGETS b/src/buildtool/execution_api/execution_service/TARGETS
index cc0fad3a..56aa04d5 100644
--- a/src/buildtool/execution_api/execution_service/TARGETS
+++ b/src/buildtool/execution_api/execution_service/TARGETS
@@ -17,6 +17,7 @@
, ["src/buildtool/storage", "storage"]
, ["src/buildtool/file_system", "file_system_manager"]
, "operation_cache"
+ , ["src/utils/cpp", "verify_hash"]
]
, "private-ldflags": ["-pthread"]
}
@@ -35,6 +36,7 @@
, "private-deps":
[ ["src/buildtool/storage", "storage"]
, ["src/buildtool/execution_api/local", "local"]
+ , ["src/utils/cpp", "verify_hash"]
]
}
, "cas_server":
@@ -54,6 +56,7 @@
, ["@", "fmt", "", "fmt"]
, ["src/buildtool/storage", "storage"]
, ["src/buildtool/execution_api/local", "local"]
+ , ["src/utils/cpp", "verify_hash"]
]
}
, "server_implementation":
@@ -98,6 +101,7 @@
, ["@", "fmt", "", "fmt"]
, ["src/buildtool/storage", "storage"]
, ["src/buildtool/execution_api/local", "local"]
+ , ["src/utils/cpp", "verify_hash"]
]
}
, "capabilities_server":
@@ -130,6 +134,6 @@
, "deps": [["src/buildtool/logging", "logging"]]
, "proto": [["@", "googleapis", "", "google_longrunning_operations_proto"]]
, "stage": ["src", "buildtool", "execution_api", "execution_service"]
- , "private-deps": ["operation_cache"]
+ , "private-deps": ["operation_cache", ["src/utils/cpp", "verify_hash"]]
}
}
diff --git a/src/buildtool/execution_api/execution_service/ac_server.cpp b/src/buildtool/execution_api/execution_service/ac_server.cpp
index 304d70dd..a83ba8a9 100644
--- a/src/buildtool/execution_api/execution_service/ac_server.cpp
+++ b/src/buildtool/execution_api/execution_service/ac_server.cpp
@@ -14,13 +14,19 @@
#include "src/buildtool/execution_api/execution_service/ac_server.hpp"
-#include "fmt/core.h"
+#include <fmt/core.h>
+
#include "src/buildtool/storage/garbage_collector.hpp"
+#include "src/utils/cpp/verify_hash.hpp"
auto ActionCacheServiceImpl::GetActionResult(
::grpc::ServerContext* /*context*/,
const ::bazel_re::GetActionResultRequest* request,
::bazel_re::ActionResult* response) -> ::grpc::Status {
+ if (auto error_msg = IsAHash(request->action_digest().hash()); error_msg) {
+ logger_.Emit(LogLevel::Debug, *error_msg);
+ return ::grpc::Status{::grpc::StatusCode::INVALID_ARGUMENT, *error_msg};
+ }
logger_.Emit(LogLevel::Trace,
"GetActionResult: {}",
request->action_digest().hash());
diff --git a/src/buildtool/execution_api/execution_service/bytestream_server.cpp b/src/buildtool/execution_api/execution_service/bytestream_server.cpp
index 476b8502..69bac9a0 100644
--- a/src/buildtool/execution_api/execution_service/bytestream_server.cpp
+++ b/src/buildtool/execution_api/execution_service/bytestream_server.cpp
@@ -23,6 +23,7 @@
#include "src/buildtool/execution_api/common/bytestream_common.hpp"
#include "src/buildtool/storage/garbage_collector.hpp"
#include "src/utils/cpp/tmp_dir.hpp"
+#include "src/utils/cpp/verify_hash.hpp"
namespace {
auto ParseResourceName(std::string const& x) -> std::optional<std::string> {
@@ -53,6 +54,11 @@ auto BytestreamServiceImpl::Read(
return ::grpc::Status{::grpc::StatusCode::INVALID_ARGUMENT, str};
}
+ if (auto error_msg = IsAHash(*hash); error_msg) {
+ logger_.Emit(LogLevel::Debug, *error_msg);
+ return ::grpc::Status{::grpc::StatusCode::INVALID_ARGUMENT, *error_msg};
+ }
+
auto lock = GarbageCollector::SharedLock();
if (!lock) {
auto str = fmt::format("Could not acquire SharedLock");
@@ -108,6 +114,10 @@ auto BytestreamServiceImpl::Write(
logger_.Emit(LogLevel::Error, str);
return ::grpc::Status{::grpc::StatusCode::INVALID_ARGUMENT, str};
}
+ if (auto error_msg = IsAHash(*hash); error_msg) {
+ logger_.Emit(LogLevel::Debug, *error_msg);
+ return ::grpc::Status{::grpc::StatusCode::INVALID_ARGUMENT, *error_msg};
+ }
logger_.Emit(LogLevel::Trace,
"Write: {}, offset {}, finish write {}",
*hash,
diff --git a/src/buildtool/execution_api/execution_service/cas_server.cpp b/src/buildtool/execution_api/execution_service/cas_server.cpp
index 65cb5c92..abdab5b1 100644
--- a/src/buildtool/execution_api/execution_service/cas_server.cpp
+++ b/src/buildtool/execution_api/execution_service/cas_server.cpp
@@ -17,14 +17,17 @@
#include "fmt/core.h"
#include "src/buildtool/compatibility/native_support.hpp"
#include "src/buildtool/storage/garbage_collector.hpp"
+#include "src/utils/cpp/verify_hash.hpp"
static constexpr std::size_t kJustHashLength = 42;
static constexpr std::size_t kSHA256Length = 64;
static auto IsValidHash(std::string const& x) -> bool {
+ auto error_msg = IsAHash(x);
auto const& length = x.size();
- return (Compatibility::IsCompatible() and length == kSHA256Length) or
- length == kJustHashLength;
+ return !error_msg and
+ ((Compatibility::IsCompatible() and length == kSHA256Length) or
+ length == kJustHashLength);
}
auto CASServiceImpl::FindMissingBlobs(
diff --git a/src/buildtool/execution_api/execution_service/execution_server.cpp b/src/buildtool/execution_api/execution_service/execution_server.cpp
index 9705ad57..c6789235 100644
--- a/src/buildtool/execution_api/execution_service/execution_server.cpp
+++ b/src/buildtool/execution_api/execution_service/execution_server.cpp
@@ -26,6 +26,7 @@
#include "src/buildtool/execution_api/execution_service/operation_cache.hpp"
#include "src/buildtool/file_system/file_system_manager.hpp"
#include "src/buildtool/storage/garbage_collector.hpp"
+#include "src/utils/cpp/verify_hash.hpp"
static void UpdateTimeStamp(::google::longrunning::Operation* op) {
::google::protobuf::Timestamp t;
@@ -40,6 +41,10 @@ auto ExecutionServiceImpl::GetAction(::bazel_re::ExecuteRequest const* request)
const noexcept -> std::pair<std::optional<::bazel_re::Action>,
std::optional<std::string>> {
// get action description
+ if (auto error_msg = IsAHash(request->action_digest().hash()); error_msg) {
+ logger_.Emit(LogLevel::Error, *error_msg);
+ return {std::nullopt, *error_msg};
+ }
auto path = storage_->CAS().BlobPath(request->action_digest(), false);
if (!path) {
auto str = fmt::format("could not retrieve blob {} from cas",
@@ -57,7 +62,11 @@ auto ExecutionServiceImpl::GetAction(::bazel_re::ExecuteRequest const* request)
return {std::nullopt, str};
}
}
-
+ if (auto error_msg = IsAHash(action.input_root_digest().hash());
+ error_msg) {
+ logger_.Emit(LogLevel::Error, *error_msg);
+ return {std::nullopt, *error_msg};
+ }
path = Compatibility::IsCompatible()
? storage_->CAS().BlobPath(action.input_root_digest(), false)
: storage_->CAS().TreePath(action.input_root_digest());
@@ -74,7 +83,10 @@ auto ExecutionServiceImpl::GetAction(::bazel_re::ExecuteRequest const* request)
auto ExecutionServiceImpl::GetCommand(::bazel_re::Action const& action)
const noexcept -> std::pair<std::optional<::bazel_re::Command>,
std::optional<std::string>> {
-
+ if (auto error_msg = IsAHash(action.command_digest().hash()); error_msg) {
+ logger_.Emit(LogLevel::Error, *error_msg);
+ return {std::nullopt, *error_msg};
+ }
auto path = storage_->CAS().BlobPath(action.command_digest(), false);
if (!path) {
auto str = fmt::format("could not retrieve blob {} from cas",
@@ -488,6 +500,10 @@ auto ExecutionServiceImpl::WaitExecution(
::grpc::ServerWriter<::google::longrunning::Operation>* writer)
-> ::grpc::Status {
auto const& hash = request->name();
+ if (auto error_msg = IsAHash(hash); error_msg) {
+ logger_.Emit(LogLevel::Error, *error_msg);
+ return ::grpc::Status{::grpc::StatusCode::INVALID_ARGUMENT, *error_msg};
+ }
logger_.Emit(LogLevel::Trace, "WaitExecution: {}", hash);
std::optional<::google::longrunning::Operation> op;
do {
diff --git a/src/buildtool/execution_api/execution_service/operations_server.cpp b/src/buildtool/execution_api/execution_service/operations_server.cpp
index 37d3552a..228b3595 100644
--- a/src/buildtool/execution_api/execution_service/operations_server.cpp
+++ b/src/buildtool/execution_api/execution_service/operations_server.cpp
@@ -15,12 +15,17 @@
#include "src/buildtool/execution_api/execution_service/operations_server.hpp"
#include "src/buildtool/execution_api/execution_service/operation_cache.hpp"
+#include "src/utils/cpp/verify_hash.hpp"
auto OperarationsServiceImpl::GetOperation(
::grpc::ServerContext* /*context*/,
const ::google::longrunning::GetOperationRequest* request,
::google::longrunning::Operation* response) -> ::grpc::Status {
auto const& hash = request->name();
+ if (auto error_msg = IsAHash(hash); error_msg) {
+ logger_.Emit(LogLevel::Debug, *error_msg);
+ return ::grpc::Status{::grpc::StatusCode::INVALID_ARGUMENT, *error_msg};
+ }
logger_.Emit(LogLevel::Trace, "GetOperation: {}", hash);
std::optional<::google::longrunning::Operation> op;
op = OperationCache::Query(hash);