diff options
author | ignat <ignat@yandex-team.com> | 2025-04-19 20:52:38 +0300 |
---|---|---|
committer | ignat <ignat@yandex-team.com> | 2025-04-19 21:06:50 +0300 |
commit | 486ce3d4223c35e471139e991b0cb426af3ca74b (patch) | |
tree | 4db1567e5b768f7a8285ad87e77a5242bf6e79ee | |
parent | 1ce6fd4e3a57615c6c8c1e0e5e861a8d504eb59f (diff) | |
download | ydb-486ce3d4223c35e471139e991b0cb426af3ca74b.tar.gz |
Add exception on duplicate keys during protobuf map serialization/deserialization
commit_hash:73552810ad9072ebfd5a1d2c67f58aadd78d0cca
-rw-r--r-- | yt/yt/core/misc/protobuf_helpers-inl.h | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/yt/yt/core/misc/protobuf_helpers-inl.h b/yt/yt/core/misc/protobuf_helpers-inl.h index 1d3ce8afd5d..dc73588308f 100644 --- a/yt/yt/core/misc/protobuf_helpers-inl.h +++ b/yt/yt/core/misc/protobuf_helpers-inl.h @@ -486,7 +486,12 @@ void ToProto( { serializedMap->clear(); for (const auto& [key, value] : originalMap) { - serializedMap->insert(std::pair(ToProto<TSerializedKey>(key), ToProto<TSerializedValue>(value))); + auto [_, inserted] = serializedMap->insert(std::pair(ToProto<TSerializedKey>(key), ToProto<TSerializedValue>(value))); + if (!inserted) { + THROW_ERROR_EXCEPTION("Found duplicate key during protobuf map serialization") + << TErrorAttribute("key", key) + << TErrorAttribute("serialized_key", ToProto<TSerializedKey>(key)); + } } } @@ -533,7 +538,11 @@ void FromProto( { originalMap->clear(); for (const auto& [serializedKey, serializedValue] : serializedMap) { - EmplaceOrCrash(*originalMap, FromProto<TKey>(serializedKey), FromProto<TValue>(serializedValue)); + auto [_, inserted] = originalMap->emplace(FromProto<TKey>(serializedKey), FromProto<TValue>(serializedValue)); + if (!inserted) { + THROW_ERROR_EXCEPTION("Found duplicate key during protobuf map deserialization") + << TErrorAttribute("key", FromProto<TKey>(serializedKey)); + } } } |