Fix segment fault for proto3 optional (#7805)
* Fix segment fault for proto3 optional
Fixes #7801
diff --git a/src/google/protobuf/generated_message_reflection.cc b/src/google/protobuf/generated_message_reflection.cc
index 5483eda..9fb62b9 100644
--- a/src/google/protobuf/generated_message_reflection.cc
+++ b/src/google/protobuf/generated_message_reflection.cc
@@ -854,7 +854,7 @@
}
case FieldDescriptor::CPPTYPE_MESSAGE:
- if (!schema_.HasHasbits()) {
+ if (schema_.HasBitIndex(field) == -1) {
// Proto3 does not have has-bits and we need to set a message field
// to nullptr in order to indicate its un-presence.
if (GetArena(message) == nullptr) {
@@ -2048,6 +2048,7 @@
return;
}
const uint32 index = schema_.HasBitIndex(field);
+ if (index == -1) return;
MutableHasBits(message)[index / 32] &=
~(static_cast<uint32>(1) << (index % 32));
}