diff options
author | a-romanov <Anton.Romanov@ydb.tech> | 2023-08-31 11:04:05 +0300 |
---|---|---|
committer | a-romanov <Anton.Romanov@ydb.tech> | 2023-08-31 11:25:46 +0300 |
commit | 7d18e9501d7d3116e363142c0287a4c9ae8f3404 (patch) | |
tree | b535290b8eb384d2095fa39fc5bd810b40d4abc6 | |
parent | 0523767c128aedb109119dc70d7486ee4bc229eb (diff) | |
download | ydb-7d18e9501d7d3116e363142c0287a4c9ae8f3404.tar.gz |
YQL-16358 Fix.
-rw-r--r-- | ydb/library/yql/public/decimal/yql_decimal_serialize.cpp | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/ydb/library/yql/public/decimal/yql_decimal_serialize.cpp b/ydb/library/yql/public/decimal/yql_decimal_serialize.cpp index ace496465a2..5fb844f5f89 100644 --- a/ydb/library/yql/public/decimal/yql_decimal_serialize.cpp +++ b/ydb/library/yql/public/decimal/yql_decimal_serialize.cpp @@ -51,18 +51,16 @@ std::pair<TInt128, size_t> Deserialize(const char* b, size_t len) { return std::make_pair(Err(), 0U); const auto mark = ui8(*b); - switch (mark) { - case 0x00u: return std::make_pair(-Nan(), 1U); - case 0x01u: return std::make_pair(-Inf(), 1U); - case 0xFEu: return std::make_pair(+Inf(), 1U); - case 0xFFu: return std::make_pair(+Nan(), 1U); - } + const bool neg = mark < 0x80u; + if (mark == 0x00u || mark == 0xFFu) + return std::make_pair(neg ? -Nan() : +Nan(), 1U); + if (mark == 0x01u || mark == 0xFEu) + return std::make_pair(neg ? -Inf() : +Inf(), 1U); if (mark < 0x70u || mark > 0x8Fu) { return std::make_pair(Err(), 0U); } - const bool neg = mark < 0x80u; const auto used = neg ? 0x80u - mark : mark - 0x7Fu; if (len < used) return std::make_pair(Err(), 0U); |