aboutsummaryrefslogtreecommitdiffstats
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
parent7b9443d9ddcd187db6d58fb8936bb66137f7fdd1 (diff)
downloadydb-f8cf10ff0fb48496a675933b846456d567cca1af.tar.gz
Fix TEventType::Load for null input buffer
-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
-rw-r--r--ydb/library/yql/dq/actors/dq.h2
4 files changed, 6 insertions, 5 deletions
diff --git a/library/cpp/actors/core/event.h b/library/cpp/actors/core/event.h
index 28e2c95e000..71c29082d8d 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 ad730683ae5..d56a9b91de4 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 fe47bf4de0e..3f6d17b058c 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());
diff --git a/ydb/library/yql/dq/actors/dq.h b/ydb/library/yql/dq/actors/dq.h
index f0e5a9edac9..e321a54c90f 100644
--- a/ydb/library/yql/dq/actors/dq.h
+++ b/ydb/library/yql/dq/actors/dq.h
@@ -63,7 +63,7 @@ struct TEvDq {
return issues;
}
- static IEventBase* Load(TIntrusivePtr<NActors::TEventSerializedData> input) {
+ static IEventBase* Load(NActors::TEventSerializedData *input) {
auto result = NActors::TEventPB<TEvAbortExecution, NDqProto::TEvAbortExecution, TDqEvents::EvAbortExecution>::Load(input);
if (result) {
auto evAbort = reinterpret_cast<TEvAbortExecution *>(result);