Skip to content

Commit ee419f2

Browse files
mhansencopybara-github
authored andcommitted
Bugfix: Make extensions beyond n=16 immutable.
Previously, we only make extensions immutable if they were in the FieldSet's array, maximum size 16. The overflow entries in the TreeMap weren't made immutable. PiperOrigin-RevId: 671564444
1 parent 3d4d514 commit ee419f2

File tree

2 files changed

+11
-5
lines changed

2 files changed

+11
-5
lines changed

java/core/src/main/java/com/google/protobuf/FieldSet.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,15 @@ public void makeImmutable() {
101101
int n = fields.getNumArrayEntries(); // Optimisation: hoist out of hot loop.
102102
for (int i = 0; i < n; ++i) {
103103
Entry<T, Object> entry = fields.getArrayEntryAt(i);
104-
if (entry.getValue() instanceof GeneratedMessageLite) {
105-
((GeneratedMessageLite<?, ?>) entry.getValue()).makeImmutable();
104+
Object value = entry.getValue();
105+
if (value instanceof GeneratedMessageLite) {
106+
((GeneratedMessageLite<?, ?>) value).makeImmutable();
107+
}
108+
}
109+
for (Map.Entry<T, Object> entry : fields.getOverflowEntries()) {
110+
Object value = entry.getValue();
111+
if (value instanceof GeneratedMessageLite) {
112+
((GeneratedMessageLite<?, ?>) value).makeImmutable();
106113
}
107114
}
108115
fields.makeImmutable();

java/core/src/test/java/com/google/protobuf/ParserLiteTest.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,15 +76,14 @@ public void testParseExtensionsLite() throws Exception {
7676
}
7777

7878
@Test
79-
public void testParseExtensionsLite_extensionIsMutable() throws Exception {
79+
public void testParseExtensionsLite_extensionIsImmutable() throws Exception {
8080
TestAllExtensionsLite message =
8181
TestAllExtensionsLite.parseFrom(
8282
TestUtilLite.getAllLiteExtensionsSet().toByteArray(),
8383
TestUtilLite.getExtensionRegistryLite());
8484
Object nested = message.getExtension(UnittestLite.optionalNestedMessageExtensionLite);
8585
if (nested instanceof GeneratedMessageLite) {
86-
// TODO: Make this false.
87-
assertThat(((GeneratedMessageLite) nested).isMutable()).isTrue();
86+
assertThat(((GeneratedMessageLite) nested).isMutable()).isFalse();
8887
}
8988
}
9089

0 commit comments

Comments
 (0)