diff options
| author | Dan Engelbrecht <[email protected]> | 2026-01-28 10:32:02 +0100 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2026-01-28 10:32:02 +0100 |
| commit | 03c23e9ce6a6ba6138e10a48e810f251d53ca9f4 (patch) | |
| tree | 48d07f32930e0ef65963e48e65bbd0e6dfbeda67 /src/zen/cmds/builds_cmd.cpp | |
| parent | 5.7.19-pre1 (diff) | |
| download | archived-zen-03c23e9ce6a6ba6138e10a48e810f251d53ca9f4.tar.xz archived-zen-03c23e9ce6a6ba6138e10a48e810f251d53ca9f4.zip | |
Avoid conversion from JSon to compact binary when querying for builds to avoid integer vs float conversion issues (#735)
Diffstat (limited to 'src/zen/cmds/builds_cmd.cpp')
| -rw-r--r-- | src/zen/cmds/builds_cmd.cpp | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/zen/cmds/builds_cmd.cpp b/src/zen/cmds/builds_cmd.cpp index 176c2374c..f4edb65ab 100644 --- a/src/zen/cmds/builds_cmd.cpp +++ b/src/zen/cmds/builds_cmd.cpp @@ -3212,31 +3212,39 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) LogExecutableVersionAndPid(); } } - CbObject QueryObject; + std::string JsonQuery; if (m_ListQueryPath.empty()) { CbObjectWriter QueryWriter; QueryWriter.BeginObject("query"); QueryWriter.EndObject(); // query - QueryObject = QueryWriter.Save(); + CbObject QueryObject = QueryWriter.Save(); + ExtendableStringBuilder<64> SB; + CompactBinaryToJson(QueryObject, SB); + JsonQuery = SB.ToString(); } else { if (ToLower(m_ListQueryPath.extension().string()) == ".cbo") { - QueryObject = LoadCompactBinaryObject(IoBufferBuilder::MakeFromFile(m_ListQueryPath)); + CbObject QueryObject = LoadCompactBinaryObject(IoBufferBuilder::MakeFromFile(m_ListQueryPath)); + ExtendableStringBuilder<64> SB; + CompactBinaryToJson(QueryObject, SB); + JsonQuery = SB.ToString(); } else { IoBuffer MetaDataJson = ReadFile(m_ListQueryPath).Flatten(); std::string_view Json(reinterpret_cast<const char*>(MetaDataJson.GetData()), MetaDataJson.GetSize()); std::string JsonError; - QueryObject = LoadCompactBinaryFromJson(Json, JsonError).AsObject(); + CbObject QueryObject = LoadCompactBinaryFromJson(Json, JsonError) + .AsObject(); // We try to convert it so it is at least reaonably verified in format if (!JsonError.empty()) { throw std::runtime_error( fmt::format("build metadata file '{}' is malformed. Reason: '{}'", m_ListQueryPath, JsonError)); } + JsonQuery = std::string(Json); } } @@ -3259,7 +3267,7 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) /*RequireBucket*/ false, /*BoostCacheBackgroundWorkerPool */ false); - CbObject Response = Storage.BuildStorage->ListBuilds(QueryObject); + CbObject Response = Storage.BuildStorage->ListBuilds(JsonQuery); ZEN_ASSERT(ValidateCompactBinary(Response.GetView(), CbValidateMode::Default) == CbValidateError::None); if (m_ListResultPath.empty()) { |