aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorignat <ignat@yandex-team.com>2025-04-19 20:52:38 +0300
committerignat <ignat@yandex-team.com>2025-04-19 21:06:50 +0300
commit486ce3d4223c35e471139e991b0cb426af3ca74b (patch)
tree4db1567e5b768f7a8285ad87e77a5242bf6e79ee
parent1ce6fd4e3a57615c6c8c1e0e5e861a8d504eb59f (diff)
downloadydb-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.h13
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));
+ }
}
}