| Index: third_party/protobuf/src/google/protobuf/descriptor.cc
|
| diff --git a/third_party/protobuf/src/google/protobuf/descriptor.cc b/third_party/protobuf/src/google/protobuf/descriptor.cc
|
| index 85991dccdd35dd13b21d5a326fa5f8ea50f45b3a..a59c285010740255ad5cb2881eba3856b8502b25 100644
|
| --- a/third_party/protobuf/src/google/protobuf/descriptor.cc
|
| +++ b/third_party/protobuf/src/google/protobuf/descriptor.cc
|
| @@ -357,13 +357,20 @@ void DeleteAllowedProto3Extendee() {
|
|
|
| void InitAllowedProto3Extendee() {
|
| allowed_proto3_extendees_ = new set<string>;
|
| - allowed_proto3_extendees_->insert("google.protobuf.FileOptions");
|
| - allowed_proto3_extendees_->insert("google.protobuf.MessageOptions");
|
| - allowed_proto3_extendees_->insert("google.protobuf.FieldOptions");
|
| - allowed_proto3_extendees_->insert("google.protobuf.EnumOptions");
|
| - allowed_proto3_extendees_->insert("google.protobuf.EnumValueOptions");
|
| - allowed_proto3_extendees_->insert("google.protobuf.ServiceOptions");
|
| - allowed_proto3_extendees_->insert("google.protobuf.MethodOptions");
|
| + const char* kOptionNames[] = {
|
| + "FileOptions", "MessageOptions", "FieldOptions", "EnumOptions",
|
| + "EnumValueOptions", "ServiceOptions", "MethodOptions"};
|
| + for (int i = 0; i < GOOGLE_ARRAYSIZE(kOptionNames); ++i) {
|
| + // descriptor.proto has a different package name in opensource. We allow
|
| + // both so the opensource protocol compiler can also compile internal
|
| + // proto3 files with custom options. See: b/27567912
|
| + allowed_proto3_extendees_->insert(string("google.protobuf.") +
|
| + kOptionNames[i]);
|
| + // Split the word to trick the opensource processing scripts so they
|
| + // will keep the origial package name.
|
| + allowed_proto3_extendees_->insert(string("proto") + "2." + kOptionNames[i]);
|
| + }
|
| +
|
| google::protobuf::internal::OnShutdown(&DeleteAllowedProto3Extendee);
|
| }
|
|
|
| @@ -2766,6 +2773,9 @@ class DescriptorBuilder {
|
| private:
|
| friend class OptionInterpreter;
|
|
|
| + // Non-recursive part of BuildFile functionality.
|
| + const FileDescriptor* BuildFileImpl(const FileDescriptorProto& proto);
|
| +
|
| const DescriptorPool* pool_;
|
| DescriptorPool::Tables* tables_; // for convenience
|
| DescriptorPool::ErrorCollector* error_collector_;
|
| @@ -3834,7 +3844,11 @@ const FileDescriptor* DescriptorBuilder::BuildFile(
|
| }
|
| tables_->pending_files_.pop_back();
|
| }
|
| + return BuildFileImpl(proto);
|
| +}
|
|
|
| +const FileDescriptor* DescriptorBuilder::BuildFileImpl(
|
| + const FileDescriptorProto& proto) {
|
| // Checkpoint the tables so that we can roll back if something goes wrong.
|
| tables_->AddCheckpoint();
|
|
|
| @@ -5113,11 +5127,6 @@ void DescriptorBuilder::ValidateProto3(
|
| for (int i = 0; i < file->enum_type_count(); ++i) {
|
| ValidateProto3Enum(file->enum_types_ + i, proto.enum_type(i));
|
| }
|
| - if (IsLite(file)) {
|
| - AddError(file->name(), proto,
|
| - DescriptorPool::ErrorCollector::OTHER,
|
| - "Lite runtime is not supported in proto3.");
|
| - }
|
| }
|
|
|
| static string ToLowercaseWithoutUnderscores(const string& name) {
|
|
|