diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/bind/Binder.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/bind/Binder.java index b0e67042bdf0..31983009e543 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/bind/Binder.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/bind/Binder.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2021 the original author or authors. + * Copyright 2012-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -72,7 +72,7 @@ public class Binder { * @param sources the sources used for binding */ public Binder(ConfigurationPropertySource... sources) { - this(Arrays.asList(sources), null, null, null); + this((sources != null) ? Arrays.asList(sources) : null, null, null, null); } /** @@ -182,6 +182,7 @@ public Binder(Iterable sources, PlaceholdersResolve List conversionServices, Consumer propertyEditorInitializer, BindHandler defaultBindHandler, BindConstructorProvider constructorProvider) { Assert.notNull(sources, "Sources must not be null"); + sources.forEach((source) -> Assert.notNull(source, "Sources cannot contain null values")); this.sources = sources; this.placeholdersResolver = (placeholdersResolver != null) ? placeholdersResolver : PlaceholdersResolver.NONE; this.bindConverter = BindConverter.get(conversionServices, propertyEditorInitializer); diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/properties/bind/BinderTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/properties/bind/BinderTests.java index 5cc98ba481ad..5bfc7c6db830 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/properties/bind/BinderTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/properties/bind/BinderTests.java @@ -73,10 +73,20 @@ class BinderTests { @Test void createWhenSourcesIsNullShouldThrowException() { + assertThatIllegalArgumentException().isThrownBy(() -> new Binder((ConfigurationPropertySource[]) null)) + .withMessageContaining("Sources must not be null"); assertThatIllegalArgumentException().isThrownBy(() -> new Binder((Iterable) null)) .withMessageContaining("Sources must not be null"); } + @Test + void createWhenSourcesContainNullValuesShouldThrowException() { + assertThatIllegalArgumentException().isThrownBy(() -> new Binder(new ConfigurationPropertySource[] { null })) + .withMessageContaining("Sources cannot contain null values"); + assertThatIllegalArgumentException().isThrownBy(() -> new Binder(Collections.singletonList(null))) + .withMessageContaining("Sources cannot contain null values"); + } + @Test void bindWhenNameIsNullShouldThrowException() { assertThatIllegalArgumentException().isThrownBy(() -> this.binder.bind((ConfigurationPropertyName) null,