From 2abe6c308e2352a639907427b9642ca07ff5d9df Mon Sep 17 00:00:00 2001 From: Thomas Wearmouth Date: Sun, 18 May 2025 18:42:03 +0800 Subject: [PATCH 1/2] Prevent NPE in tryCreateParentDirectories --- .../exlll/configlib/YamlConfigurationStore.java | 4 ++-- .../configlib/YamlConfigurationStoreTest.java | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/configlib-yaml/src/main/java/de/exlll/configlib/YamlConfigurationStore.java b/configlib-yaml/src/main/java/de/exlll/configlib/YamlConfigurationStore.java index 6a38879..86307aa 100644 --- a/configlib-yaml/src/main/java/de/exlll/configlib/YamlConfigurationStore.java +++ b/configlib-yaml/src/main/java/de/exlll/configlib/YamlConfigurationStore.java @@ -89,9 +89,9 @@ public void save(T configuration, Path configurationFile) { yamlFileWriter.writeYaml(dumpedYaml, extractedCommentNodes); } - private void tryCreateParentDirectories(Path configurationFile) { + void tryCreateParentDirectories(Path configurationFile) { Path parent = configurationFile.getParent(); - if (!Files.exists(parent) && properties.createParentDirectories()) { + if (properties.createParentDirectories() && parent != null && !Files.exists(parent)) { try { Files.createDirectories(parent); } catch (IOException e) { diff --git a/configlib-yaml/src/test/java/de/exlll/configlib/YamlConfigurationStoreTest.java b/configlib-yaml/src/test/java/de/exlll/configlib/YamlConfigurationStoreTest.java index cb911f7..fd66bdc 100644 --- a/configlib-yaml/src/test/java/de/exlll/configlib/YamlConfigurationStoreTest.java +++ b/configlib-yaml/src/test/java/de/exlll/configlib/YamlConfigurationStoreTest.java @@ -27,6 +27,7 @@ import java.nio.file.FileSystem; import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.Paths; import java.util.HashMap; import java.util.Map; @@ -557,4 +558,20 @@ void updateResolvesEnvVarsIfFileDoesOrDoesNotExist(boolean createFile) { assertThat(config.s, is("S2")); assertThat(config.i, is(10)); } + + @ParameterizedTest + @ValueSource(booleans = {true, false}) + void tryCreateParentDirectoriesDoesNotThrowIfParentIsNull(boolean createParentDirectories) { + YamlConfigurationProperties properties = YamlConfigurationProperties.newBuilder() + .createParentDirectories(createParentDirectories) + .build(); + YamlConfigurationStore store = new YamlConfigurationStore<>( + A.class, + properties + ); + + Path path = Paths.get("config.yml"); + store.tryCreateParentDirectories(path); + assertDoesNotThrow(() -> store.tryCreateParentDirectories(path)); + } } From 28920c01b8df9b79ae6a8cc2a663bd4cfb49486d Mon Sep 17 00:00:00 2001 From: Thomas Wearmouth Date: Mon, 19 May 2025 09:50:24 +0800 Subject: [PATCH 2/2] Fix tryCreateParentDirectories test case --- .../java/de/exlll/configlib/YamlConfigurationStoreTest.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/configlib-yaml/src/test/java/de/exlll/configlib/YamlConfigurationStoreTest.java b/configlib-yaml/src/test/java/de/exlll/configlib/YamlConfigurationStoreTest.java index fd66bdc..79d7661 100644 --- a/configlib-yaml/src/test/java/de/exlll/configlib/YamlConfigurationStoreTest.java +++ b/configlib-yaml/src/test/java/de/exlll/configlib/YamlConfigurationStoreTest.java @@ -27,7 +27,6 @@ import java.nio.file.FileSystem; import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.Paths; import java.util.HashMap; import java.util.Map; @@ -570,8 +569,7 @@ void tryCreateParentDirectoriesDoesNotThrowIfParentIsNull(boolean createParentDi properties ); - Path path = Paths.get("config.yml"); - store.tryCreateParentDirectories(path); + Path path = fs.getPath("config.yml"); assertDoesNotThrow(() -> store.tryCreateParentDirectories(path)); } }