diff options
| author | Dan Engelbrecht <[email protected]> | 2022-09-08 08:55:38 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2022-09-07 23:55:38 -0700 |
| commit | c96d28abc6c2c526295ec8ef9b7959b0ff862d23 (patch) | |
| tree | 7b1e116a3184bb38a47621660f11871c1cd254ff /zenserver/upstream/upstreamcache.cpp | |
| parent | Implement proper GetCacheValues upstream (#155) (diff) | |
| download | zen-c96d28abc6c2c526295ec8ef9b7959b0ff862d23.tar.xz zen-c96d28abc6c2c526295ec8ef9b7959b0ff862d23.zip | |
Added CloudCacheSession::GetInlineBlob to properly get CacheValues (#159)
* Added CloudCacheSession::GetInlineBlob to properly get CacheValues from Horde
Issue #UE-162151
* validate uncompressed binary from Horde "application/x-jupiter-inline" response
Diffstat (limited to 'zenserver/upstream/upstreamcache.cpp')
| -rw-r--r-- | zenserver/upstream/upstreamcache.cpp | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/zenserver/upstream/upstreamcache.cpp b/zenserver/upstream/upstreamcache.cpp index 7f5759e47..e92dde815 100644 --- a/zenserver/upstream/upstreamcache.cpp +++ b/zenserver/upstream/upstreamcache.cpp @@ -442,15 +442,35 @@ namespace detail { if (!Result.Error) { std::string_view BlobStoreNamespace = GetActualBlobStoreNamespace(Session, Namespace); - const CloudCacheResult BlobResult = Session.GetCompressedBlob(BlobStoreNamespace, IoHash::Zero); - Payload = BlobResult.Response; + IoHash PayloadHash; + const CloudCacheResult BlobResult = + Session.GetInlineBlob(BlobStoreNamespace, Request.Key.Bucket, Request.Key.Hash, PayloadHash); + Payload = BlobResult.Response; AppendResult(BlobResult, Result); m_Status.SetFromErrorCode(BlobResult.ErrorCode, BlobResult.Reason); - if (Payload && IsCompressedBinary(Payload.GetContentType())) + if (Payload) { - Compressed = CompressedBuffer::FromCompressed(SharedBuffer(Payload)); + if (IsCompressedBinary(Payload.GetContentType())) + { + Compressed = CompressedBuffer::FromCompressed(SharedBuffer(Payload)); + } + else + { + Compressed = CompressedBuffer::Compress(SharedBuffer(Payload)); + IoHash RawHash = IoHash::FromBLAKE3(Compressed.GetRawHash()); + if (RawHash != PayloadHash) + { + ZEN_WARN("Horde request for inline payload of {}/{}/{} has hash {}, expected hash {} from header", + Namespace, + Request.Key.Bucket, + Request.Key.Hash.ToHexString(), + RawHash.ToHexString(), + PayloadHash.ToHexString()); + Compressed.Reset(); + } + } } } |