From f50bc62febd05a2e0a8b91886258323c3fd7fa04 Mon Sep 17 00:00:00 2001 From: Sydney Acksman Date: Fri, 11 Oct 2019 20:23:07 -0500 Subject: [PATCH] Add length checks to ExtensionCollection --- .../Reflection/ExtensionCollection.cs | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/csharp/src/Google.Protobuf/Reflection/ExtensionCollection.cs b/csharp/src/Google.Protobuf/Reflection/ExtensionCollection.cs index 38a97fc4b0a8..1b09bdde7fc2 100644 --- a/csharp/src/Google.Protobuf/Reflection/ExtensionCollection.cs +++ b/csharp/src/Google.Protobuf/Reflection/ExtensionCollection.cs @@ -48,14 +48,32 @@ internal ExtensionCollection(FileDescriptor file, Extension[] extensions) { UnorderedExtensions = DescriptorUtil.ConvertAndMakeReadOnly( file.Proto.Extension, - (extension, i) => new FieldDescriptor(extension, file, null, i, null, extensions?[i])); + (extension, i) => { + if (extensions?.Length != 0) + { + return new FieldDescriptor(extension, file, null, i, null, extensions?[i]); + } + else + { + return new FieldDescriptor(extension, file, null, i, null, null); // return null if there's no extensions in this array for old code-gen + } + }); } internal ExtensionCollection(MessageDescriptor message, Extension[] extensions) { UnorderedExtensions = DescriptorUtil.ConvertAndMakeReadOnly( message.Proto.Extension, - (extension, i) => new FieldDescriptor(extension, message.File, message, i, null, extensions?[i])); + (extension, i) => { + if (extensions?.Length != 0) + { + return new FieldDescriptor(extension, message.File, message, i, null, extensions?[i]); + } + else + { + return new FieldDescriptor(extension, message.File, message, i, null, null); + } + }); } ///