Fix segment fault for proto3 optional (#7805)

* Fix segment fault for proto3 optional

 Fixes #7801
pull/7811/head
Jie Luo 5 years ago committed by Adam Cozzette
parent 2ad43bfd3d
commit 0710535089
  1. 3
      src/google/protobuf/generated_message_reflection.cc

@ -854,7 +854,7 @@ void Reflection::ClearField(Message* message,
} }
case FieldDescriptor::CPPTYPE_MESSAGE: 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 // Proto3 does not have has-bits and we need to set a message field
// to nullptr in order to indicate its un-presence. // to nullptr in order to indicate its un-presence.
if (GetArena(message) == nullptr) { if (GetArena(message) == nullptr) {
@ -2048,6 +2048,7 @@ void Reflection::ClearBit(Message* message,
return; return;
} }
const uint32 index = schema_.HasBitIndex(field); const uint32 index = schema_.HasBitIndex(field);
if (index == -1) return;
MutableHasBits(message)[index / 32] &= MutableHasBits(message)[index / 32] &=
~(static_cast<uint32>(1) << (index % 32)); ~(static_cast<uint32>(1) << (index % 32));
} }

Loading…
Cancel
Save