Skip to content

Commit dd3f57d

Browse files
committed
Avoid potentially mutating item metadata collection
Closes spring-projectsgh-13027
1 parent d0f329c commit dd3f57d

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/metadata/ConfigurationMetadata.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,8 +146,8 @@ private <K, V> void add(Map<K, List<V>> map, K key, V value) {
146146
}
147147

148148
private ItemMetadata findMatchingItemMetadata(ItemMetadata metadata) {
149-
List<ItemMetadata> candidates = this.items.get(metadata.getName());
150-
if (candidates == null || candidates.isEmpty()) {
149+
List<ItemMetadata> candidates = getCandidates(metadata.getName());
150+
if (candidates.isEmpty()) {
151151
return null;
152152
}
153153
ListIterator<ItemMetadata> it = candidates.listIterator();
@@ -167,6 +167,12 @@ private ItemMetadata findMatchingItemMetadata(ItemMetadata metadata) {
167167
return null;
168168
}
169169

170+
private List<ItemMetadata> getCandidates(String name) {
171+
List<ItemMetadata> candidates = this.items.get(name);
172+
return (candidates != null ? new ArrayList<ItemMetadata>(candidates)
173+
: new ArrayList<ItemMetadata>());
174+
}
175+
170176
private boolean nullSafeEquals(Object o1, Object o2) {
171177
if (o1 == o2) {
172178
return true;

spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationprocessor/ConfigurationMetadataAnnotationProcessorTests.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -543,6 +543,17 @@ public void mergingOfAdditionalProperty() throws Exception {
543543
.fromSource(AdditionalMetadata.class));
544544
}
545545

546+
@Test
547+
public void mergingOfAdditionalPropertyMatchingGroup() throws Exception {
548+
ItemMetadata property = ItemMetadata.newProperty(null, "simple",
549+
"java.lang.String", null, null, null, null, null);
550+
writeAdditionalMetadata(property);
551+
ConfigurationMetadata metadata = compile(SimpleProperties.class);
552+
assertThat(metadata).has(Metadata.withGroup("simple")
553+
.fromSource(SimpleProperties.class));
554+
assertThat(metadata).has(Metadata.withProperty("simple", String.class));
555+
}
556+
546557
@Test
547558
public void mergeExistingPropertyDefaultValue() throws Exception {
548559
ItemMetadata property = ItemMetadata.newProperty("simple", "flag", null, null,

0 commit comments

Comments
 (0)