aboutsummaryrefslogtreecommitdiff
path: root/src/zenstore/cache/cacherpc.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2024-02-05 12:29:43 +0100
committerGitHub <[email protected]>2024-02-05 12:29:43 +0100
commit79c44e3223c2bb9c6c49ccefa9cae71f1f2af336 (patch)
tree26fbdd670f5309596c9a801af84906b1aa5042de /src/zenstore/cache/cacherpc.cpp
parentadded robin-map dependency to zenutil (diff)
downloadzen-79c44e3223c2bb9c6c49ccefa9cae71f1f2af336.tar.xz
zen-79c44e3223c2bb9c6c49ccefa9cae71f1f2af336.zip
respond with BadRequest result instead of throwing exception on bad request input (#648)
Diffstat (limited to 'src/zenstore/cache/cacherpc.cpp')
-rw-r--r--src/zenstore/cache/cacherpc.cpp32
1 files changed, 25 insertions, 7 deletions
diff --git a/src/zenstore/cache/cacherpc.cpp b/src/zenstore/cache/cacherpc.cpp
index 96b344ee9..5acb2b8c9 100644
--- a/src/zenstore/cache/cacherpc.cpp
+++ b/src/zenstore/cache/cacherpc.cpp
@@ -215,15 +215,33 @@ CacheRpcHandler::HandleRpcRequest(const CacheRequestContext& Context,
CbPackage Package;
CbObjectView Object;
CbObject ObjectBuffer;
- if (ContentType == ZenContentType::kCbObject)
+ try
{
- ObjectBuffer = LoadCompactBinaryObject(std::move(Body));
- Object = ObjectBuffer;
+ if (ContentType == ZenContentType::kCbObject)
+ {
+ ObjectBuffer = LoadCompactBinaryObject(std::move(Body));
+ Object = ObjectBuffer;
+ if (!Object)
+ {
+ ZEN_WARN("Content format not supported, expected compact binary format")
+ return RpcResponseCode::BadRequest;
+ }
+ }
+ else
+ {
+ Package = ParsePackageMessage(Body);
+ Object = Package.GetObject();
+ if (!Object)
+ {
+ ZEN_WARN("Content format not supported, expected package message format");
+ return RpcResponseCode::BadRequest;
+ }
+ }
}
- else
+ catch (const std::invalid_argument& ex)
{
- Package = ParsePackageMessage(Body);
- Object = Package.GetObject();
+ ZEN_WARN("Invalid rpc message package recevied, reason: '{}'", ex.what());
+ return RpcResponseCode::BadRequest;
}
OutAcceptMagic = Object["Accept"sv].AsUInt32();
OutAcceptFlags = static_cast<RpcAcceptOptions>(Object["AcceptFlags"sv].AsUInt16(0u));
@@ -1637,4 +1655,4 @@ CacheRpcHandler::WriteGetCacheChunksResponse([[maybe_unused]] const CacheRequest
return RpcResponse;
}
-} // namespace zen \ No newline at end of file
+} // namespace zen