Skip to content

Commit 324c52c

Browse files
author
L'In20Cible
committed
Fixed ProtobufMessage issues.
1 parent 1902f6c commit 324c52c

File tree

1 file changed

+17
-5
lines changed

1 file changed

+17
-5
lines changed

src/core/modules/messages/messages.h

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -80,11 +80,17 @@
8080

8181
static const google::protobuf::FieldDescriptor* GetFieldDescriptor(google::protobuf::Message* pMessage, const char* field_name)
8282
{
83-
const google::protobuf::FieldDescriptor* descriptor = pMessage->GetDescriptor()->FindFieldByName(field_name);
84-
if (!descriptor) {
85-
BOOST_RAISE_EXCEPTION(PyExc_NameError, "Unable to find field '%s'.", field_name);
83+
const google::protobuf::Descriptor* descriptor = pMessage->GetDescriptor();
84+
85+
// For some reasons, FindFieldByName is causing a crash if the message has been initialized
86+
// by the server so let's look it up ourself...
87+
for (int iCurrentIndex=0; iCurrentIndex < descriptor->field_count(); iCurrentIndex++)
88+
{
89+
const google::protobuf::FieldDescriptor *field_descriptor = descriptor->field(iCurrentIndex);
90+
if (field_descriptor && strcmp(field_descriptor->name().c_str(), field_name) == 0)
91+
return field_descriptor;
8692
}
87-
return descriptor;
93+
return NULL;
8894
}
8995

9096
static const google::protobuf::EnumValueDescriptor* GetEnumValueDescriptor(google::protobuf::Message* pMessage, const char* field_name, int value)
@@ -105,7 +111,13 @@
105111
google::protobuf::Message* pMessage,
106112
T (google::protobuf::Reflection::*get_field_delegate)(const google::protobuf::Message& message, const google::protobuf::FieldDescriptor* field) const,
107113
const char* field_name)
108-
{ return (*pMessage->GetReflection().*get_field_delegate)(*pMessage, GetFieldDescriptor(pMessage, field_name)); }
114+
{
115+
const google::protobuf::FieldDescriptor* field_descriptor = GetFieldDescriptor(pMessage, field_name);
116+
if (!field_descriptor)
117+
BOOST_RAISE_EXCEPTION(PyExc_NameError, "Unable to find field '%s'.", field_name);
118+
119+
return (*pMessage->GetReflection().*get_field_delegate)(*pMessage, field_descriptor);
120+
}
109121

110122
static int32 GetInt32(google::protobuf::Message* pMessage, const char* field_name)
111123
{ return GetField<int32>(pMessage, &google::protobuf::Reflection::GetInt32, field_name); }

0 commit comments

Comments
 (0)