aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp
diff options
context:
space:
mode:
authoralexvru <alexvru@ydb.tech>2023-03-25 10:39:51 +0300
committeralexvru <alexvru@ydb.tech>2023-03-25 10:39:51 +0300
commitf8cf10ff0fb48496a675933b846456d567cca1af (patch)
treebe5f3c4d856938fce02245a2cf5cdd012311193c /library/cpp
parent7b9443d9ddcd187db6d58fb8936bb66137f7fdd1 (diff)
downloadydb-f8cf10ff0fb48496a675933b846456d567cca1af.tar.gz
Fix TEventType::Load for null input buffer
Diffstat (limited to 'library/cpp')
-rw-r--r--library/cpp/actors/core/event.h3
-rw-r--r--library/cpp/actors/core/event_pb.h2
-rw-r--r--library/cpp/actors/core/event_pb_payload_ut.cpp4
3 files changed, 5 insertions, 4 deletions
diff --git a/library/cpp/actors/core/event.h b/library/cpp/actors/core/event.h
index 28e2c95e00..71c29082d8 100644
--- a/library/cpp/actors/core/event.h
+++ b/library/cpp/actors/core/event.h
@@ -252,7 +252,8 @@ namespace NActors {
};
if constexpr (couldBeGot) {
if (!Event) {
- Event.Reset(TEventType::Load(Buffer.Get()));
+ static TEventSerializedData empty;
+ Event.Reset(TEventType::Load(Buffer ? Buffer.Get() : &empty));
}
if (Event) {
diff --git a/library/cpp/actors/core/event_pb.h b/library/cpp/actors/core/event_pb.h
index ad730683ae..d56a9b91de 100644
--- a/library/cpp/actors/core/event_pb.h
+++ b/library/cpp/actors/core/event_pb.h
@@ -224,7 +224,7 @@ namespace NActors {
return result;
}
- static IEventBase* Load(TIntrusivePtr<TEventSerializedData> input) {
+ static IEventBase* Load(TEventSerializedData *input) {
THolder<TEventPBBase> ev(new TEv());
if (!input->GetSize()) {
Y_PROTOBUF_SUPPRESS_NODISCARD ev->Record.ParseFromString(TString());
diff --git a/library/cpp/actors/core/event_pb_payload_ut.cpp b/library/cpp/actors/core/event_pb_payload_ut.cpp
index fe47bf4de0..3f6d17b058 100644
--- a/library/cpp/actors/core/event_pb_payload_ut.cpp
+++ b/library/cpp/actors/core/event_pb_payload_ut.cpp
@@ -66,7 +66,7 @@ Y_UNIT_TEST_SUITE(TEventProtoWithPayload) {
}
UNIT_ASSERT_VALUES_EQUAL(chunkerRes, ser);
- THolder<IEventBase> ev2 = THolder(TEventTo::Load(buffers));
+ THolder<IEventBase> ev2 = THolder(TEventTo::Load(buffers.Get()));
TEventTo& msg2 = static_cast<TEventTo&>(*ev2);
UNIT_ASSERT_VALUES_EQUAL(msg2.Record.GetMeta(), msg.Record.GetMeta());
UNIT_ASSERT_EQUAL(msg2.GetPayload(msg2.Record.GetPayloadId(0)), msg.GetPayload(msg.Record.GetPayloadId(0)));
@@ -142,7 +142,7 @@ Y_UNIT_TEST_SUITE(TEventProtoWithPayload) {
// deserialize
auto data = MakeIntrusive<TEventSerializedData>(ser1, TEventSerializationInfo{});
- THolder<TEvMessageWithPayloadPreSerialized> parsedEvent(static_cast<TEvMessageWithPayloadPreSerialized*>(TEvMessageWithPayloadPreSerialized::Load(data)));
+ THolder<TEvMessageWithPayloadPreSerialized> parsedEvent(static_cast<TEvMessageWithPayloadPreSerialized*>(TEvMessageWithPayloadPreSerialized::Load(data.Get())));
UNIT_ASSERT_VALUES_EQUAL(parsedEvent->PreSerializedData, ""); // this field is empty after deserialization
auto& record = parsedEvent->GetRecord();
UNIT_ASSERT_VALUES_EQUAL(record.GetMeta(), msg.GetMeta());