Skip to content

Commit c08b751

Browse files
authored
Merge pull request #6759 from ObsidianMinor/csharp/extension-length-checks
Add length checks to ExtensionCollection
2 parents 912d819 + f50bc62 commit c08b751

File tree

1 file changed

+20
-2
lines changed

1 file changed

+20
-2
lines changed

csharp/src/Google.Protobuf/Reflection/ExtensionCollection.cs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,32 @@ internal ExtensionCollection(FileDescriptor file, Extension[] extensions)
4848
{
4949
UnorderedExtensions = DescriptorUtil.ConvertAndMakeReadOnly(
5050
file.Proto.Extension,
51-
(extension, i) => new FieldDescriptor(extension, file, null, i, null, extensions?[i]));
51+
(extension, i) => {
52+
if (extensions?.Length != 0)
53+
{
54+
return new FieldDescriptor(extension, file, null, i, null, extensions?[i]);
55+
}
56+
else
57+
{
58+
return new FieldDescriptor(extension, file, null, i, null, null); // return null if there's no extensions in this array for old code-gen
59+
}
60+
});
5261
}
5362

5463
internal ExtensionCollection(MessageDescriptor message, Extension[] extensions)
5564
{
5665
UnorderedExtensions = DescriptorUtil.ConvertAndMakeReadOnly(
5766
message.Proto.Extension,
58-
(extension, i) => new FieldDescriptor(extension, message.File, message, i, null, extensions?[i]));
67+
(extension, i) => {
68+
if (extensions?.Length != 0)
69+
{
70+
return new FieldDescriptor(extension, message.File, message, i, null, extensions?[i]);
71+
}
72+
else
73+
{
74+
return new FieldDescriptor(extension, message.File, message, i, null, null);
75+
}
76+
});
5977
}
6078

6179
/// <summary>

0 commit comments

Comments
 (0)