diff options
Diffstat (limited to 'src/zenstore/cache/cacherpc.cpp')
| -rw-r--r-- | src/zenstore/cache/cacherpc.cpp | 32 |
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 |