diff options
| author | Dan Engelbrecht <[email protected]> | 2025-09-04 13:17:25 +0200 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2025-09-04 13:17:25 +0200 |
| commit | 9f575bd416e1f7afbd11d4b221074f34bb89605c (patch) | |
| tree | 07c87ccdbc01cdaf13015f46dddfaa71fa791d5b /src/zen/cmds/status_cmd.cpp | |
| parent | oplog memory usage reduction (#482) (diff) | |
| download | archived-zen-9f575bd416e1f7afbd11d4b221074f34bb89605c.tar.xz archived-zen-9f575bd416e1f7afbd11d4b221074f34bb89605c.zip | |
add validation of compact binary payloads before reading them (#483)
* add validation of compact binary payloads before reading them
Diffstat (limited to 'src/zen/cmds/status_cmd.cpp')
| -rw-r--r-- | src/zen/cmds/status_cmd.cpp | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/src/zen/cmds/status_cmd.cpp b/src/zen/cmds/status_cmd.cpp index b5764af44..5b172f1a5 100644 --- a/src/zen/cmds/status_cmd.cpp +++ b/src/zen/cmds/status_cmd.cpp @@ -3,6 +3,7 @@ #include "status_cmd.h" #include <zencore/compactbinary.h> +#include <zencore/compactbinaryutil.h> #include <zencore/fmtutils.h> #include <zencore/logging.h> #include <zencore/string.h> @@ -37,14 +38,25 @@ StatusCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) ZEN_CONSOLE_ERROR("Lock file does not exist in directory '{}'", m_DataDir); return 1; } - LockFileInfo Info = ReadLockFilePayload(LoadCompactBinaryObject(IoBufferBuilder::MakeFromFile(m_DataDir / ".lock"))); - std::string Reason; - if (!ValidateLockFileInfo(Info, Reason)) + CbValidateError ValidateResult = CbValidateError::None; + if (CbObject LockFileObject = + ValidateAndReadCompactBinaryObject(IoBufferBuilder::MakeFromFile(m_DataDir / ".lock"), ValidateResult); + ValidateResult == CbValidateError::None) { - ZEN_CONSOLE_ERROR("Lock file in directory '{}' is not valid. Reason: '{}'", m_DataDir, Reason); + LockFileInfo Info = ReadLockFilePayload(LockFileObject); + std::string Reason; + if (!ValidateLockFileInfo(Info, Reason)) + { + ZEN_CONSOLE_ERROR("Lock file in directory '{}' is not valid. Reason: '{}'", m_DataDir, Reason); + return 1; + } + EffectivePort = Info.EffectiveListenPort; + } + else + { + ZEN_CONSOLE_ERROR("Lock file in directory '{}' is not valid. Reason: '{}'", m_DataDir, ToString(ValidateResult)); return 1; } - EffectivePort = Info.EffectiveListenPort; } ZenServerState State; |