diff --git a/src/google/protobuf/descriptor.cc b/src/google/protobuf/descriptor.cc index a4011f881d6fd..b04b4c1533f65 100644 --- a/src/google/protobuf/descriptor.cc +++ b/src/google/protobuf/descriptor.cc @@ -8581,6 +8581,14 @@ void DescriptorBuilder::ValidateOptions(const FieldDescriptor* field, } } + // Only message type fields may be weak. + if (field->options().weak()) { + if (field->type() != FieldDescriptor::TYPE_MESSAGE) { + AddError(field->full_name(), proto, DescriptorPool::ErrorCollector::TYPE, + "[weak = true] can only be specified for submessage fields."); + } + } + // Only repeated primitive fields may be packed. if (field->options().packed() && !field->is_packable()) { AddError(