aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authora-romanov <Anton.Romanov@ydb.tech>2023-08-31 11:04:05 +0300
committera-romanov <Anton.Romanov@ydb.tech>2023-08-31 11:25:46 +0300
commit7d18e9501d7d3116e363142c0287a4c9ae8f3404 (patch)
treeb535290b8eb384d2095fa39fc5bd810b40d4abc6
parent0523767c128aedb109119dc70d7486ee4bc229eb (diff)
downloadydb-7d18e9501d7d3116e363142c0287a4c9ae8f3404.tar.gz
YQL-16358 Fix.
-rw-r--r--ydb/library/yql/public/decimal/yql_decimal_serialize.cpp12
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);