diff options
| -rw-r--r-- | zen/cmds/run.cpp | 1 | ||||
| -rw-r--r-- | zencore/filesystem.cpp | 17 | ||||
| -rw-r--r-- | zencore/include/zencore/filesystem.h | 5 | ||||
| -rw-r--r-- | zenserver/cache/structuredcache.cpp | 2 | ||||
| -rw-r--r-- | zenserver/projectstore.cpp | 7 |
5 files changed, 29 insertions, 3 deletions
diff --git a/zen/cmds/run.cpp b/zen/cmds/run.cpp index 94eb7ef6d..19b5c8980 100644 --- a/zen/cmds/run.cpp +++ b/zen/cmds/run.cpp @@ -10,6 +10,7 @@ #include <zencore/fmtutils.h> #include <zencore/iohash.h> #include <zencore/logging.h> +#include <zencore/stream.h> #include <zencore/string.h> #include <zencore/timer.h> #include <zenutil/zenserverprocess.h> diff --git a/zencore/filesystem.cpp b/zencore/filesystem.cpp index 1d6b2f61c..f6ba92f98 100644 --- a/zencore/filesystem.cpp +++ b/zencore/filesystem.cpp @@ -522,6 +522,23 @@ WriteFile(std::filesystem::path Path, IoBuffer Data) WriteFile(Path, &DataPtr, 1); } +IoBuffer +FileContents::Flatten() +{ + if (Data.size() == 1) + { + return Data[0]; + } + else if (Data.empty()) + { + return {}; + } + else + { + ZEN_NOT_IMPLEMENTED(); + } +} + FileContents ReadFile(std::filesystem::path Path) { diff --git a/zencore/include/zencore/filesystem.h b/zencore/include/zencore/filesystem.h index 6678528f6..c7ac7140d 100644 --- a/zencore/include/zencore/filesystem.h +++ b/zencore/include/zencore/filesystem.h @@ -2,9 +2,10 @@ #pragma once -#include "stream.h" #include "zencore.h" +#include <zencore/iobuffer.h> + #include <filesystem> #include <functional> @@ -36,6 +37,8 @@ struct FileContents { std::vector<IoBuffer> Data; std::error_code ErrorCode; + + IoBuffer Flatten(); }; ZENCORE_API FileContents ReadFile(std::filesystem::path Path); diff --git a/zenserver/cache/structuredcache.cpp b/zenserver/cache/structuredcache.cpp index ada19216c..8ab0276c5 100644 --- a/zenserver/cache/structuredcache.cpp +++ b/zenserver/cache/structuredcache.cpp @@ -676,11 +676,11 @@ HttpStructuredCacheService::HandleCachePayloadRequest(HttpServerRequest& Request case kHead: case kGet: { - HandleGetCachePayload(Request, Ref, Policy); if (Verb == kHead) { Request.SetSuppressResponseBody(); } + HandleGetCachePayload(Request, Ref, Policy); } break; case kPut: diff --git a/zenserver/projectstore.cpp b/zenserver/projectstore.cpp index 7870f9559..6b24692e1 100644 --- a/zenserver/projectstore.cpp +++ b/zenserver/projectstore.cpp @@ -1425,7 +1425,12 @@ HttpProjectService::HttpProjectService(CasStore& Store, ProjectStore* Projects) if (!legacy::TryLoadCbPackage(Package, Payload, &UniqueBuffer::Alloc, &Resolver)) { - ZEN_ERROR("Received malformed package!"); + std::filesystem::path BadPackagePath = + Oplog.TempPath() / "bad_packages" / "session{}_request{}"_format(HttpReq.SessionId(), HttpReq.RequestId()); + + ZEN_ERROR("Received malformed package! Saving payload to '{}'", BadPackagePath); + + zen::WriteFile(BadPackagePath, Payload); return HttpReq.WriteResponse(HttpResponseCode::BadRequest, HttpContentType::kText, "Invalid package"); } |