This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-configuration.git
The following commit(s) were added to refs/heads/master by this push: new 3453e987 Guard MapConfiguration against null maps (#381) 3453e987 is described below commit 3453e9879de212af13b4317305969fc3ad5aa4d4 Author: Heewon Lee <94441510+pingpin...@users.noreply.github.com> AuthorDate: Wed Apr 24 07:05:45 2024 +0900 Guard MapConfiguration against null maps (#381) MapConfiguration has a `protected` property `map`, which is provided upon instantiation and cannot be changed later. The lack of `null` guards for this property leads to inevitable NPEs at an undetermined later time. This PR implements a fail-fast guard. --- .../java/org/apache/commons/configuration2/MapConfiguration.java | 5 +++-- .../org/apache/commons/configuration2/TestMapConfiguration.java | 8 ++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/apache/commons/configuration2/MapConfiguration.java b/src/main/java/org/apache/commons/configuration2/MapConfiguration.java index 4319bdf7..aff3b204 100644 --- a/src/main/java/org/apache/commons/configuration2/MapConfiguration.java +++ b/src/main/java/org/apache/commons/configuration2/MapConfiguration.java @@ -22,6 +22,7 @@ import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Properties; import org.apache.commons.configuration2.ex.ConfigurationRuntimeException; @@ -87,7 +88,7 @@ public class MapConfiguration extends AbstractConfiguration implements Cloneable * @param map the map */ public MapConfiguration(final Map<String, ?> map) { - this.map = (Map<String, Object>) map; + this.map = (Map<String, Object>) Objects.requireNonNull(map, "map"); } /** @@ -100,7 +101,7 @@ public class MapConfiguration extends AbstractConfiguration implements Cloneable * @since 1.8 */ public MapConfiguration(final Properties props) { - map = toMap(props); + map = toMap(Objects.requireNonNull(props)); } /** diff --git a/src/test/java/org/apache/commons/configuration2/TestMapConfiguration.java b/src/test/java/org/apache/commons/configuration2/TestMapConfiguration.java index c447e654..d0f22d51 100644 --- a/src/test/java/org/apache/commons/configuration2/TestMapConfiguration.java +++ b/src/test/java/org/apache/commons/configuration2/TestMapConfiguration.java @@ -19,11 +19,13 @@ package org.apache.commons.configuration2; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Properties; import org.apache.commons.configuration2.convert.DefaultListDelimiterHandler; import org.apache.commons.configuration2.convert.DisabledListDelimiterHandler; @@ -154,4 +156,10 @@ public class TestMapConfiguration extends TestAbstractConfiguration { config.setListDelimiterHandler(new DisabledListDelimiterHandler()); assertEquals(SPACE_VALUE, config.getProperty(KEY)); } + + @Test + public void testNullMap() { + assertThrows(NullPointerException.class, () -> new MapConfiguration((Map) null)); + assertThrows(NullPointerException.class, () -> new MapConfiguration((Properties) null)); + } }