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-compress.git
The following commit(s) were added to refs/heads/master by this push: new 2acca516 Avoid NPE in FileNameUtils.getExtension(Path) for paths with zero elements like root paths 2acca516 is described below commit 2acca51656334254dcfac8f33d6d476464e93ea7 Author: Gary Gregory <garydgreg...@gmail.com> AuthorDate: Wed Nov 30 06:39:42 2022 -0500 Avoid NPE in FileNameUtils.getExtension(Path) for paths with zero elements like root paths --- src/changes/changes.xml | 1 + .../java/org/apache/commons/compress/utils/FileNameUtils.java | 3 ++- .../java/org/apache/commons/compress/utils/FileNameUtilsTest.java | 8 ++++++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 107d5305..c43b4cb1 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -46,6 +46,7 @@ The <action> type attribute can be add,update,fix,remove. <!-- FIX --> <action type="update" dev="ggregory" due-to="CodeQL, Gary Gregory">Implicit narrowing conversion in compound assignment.</action> <action type="update" dev="ggregory" due-to="CodeQL, Gary Gregory">Avoid NPE in FileNameUtils.getBaseName(Path) for paths with zero elements like root paths.</action> + <action type="update" dev="ggregory" due-to="CodeQL, Gary Gregory">Avoid NPE in FileNameUtils.getExtension(Path) for paths with zero elements like root paths.</action> <!-- ADD --> <!-- UPDATE --> <action type="update" dev="ggregory" due-to="Dependabot">Bump mockito.version from 4.8.0 to 4.9.0 #328, #331.</action> diff --git a/src/main/java/org/apache/commons/compress/utils/FileNameUtils.java b/src/main/java/org/apache/commons/compress/utils/FileNameUtils.java index c6738137..323607fc 100644 --- a/src/main/java/org/apache/commons/compress/utils/FileNameUtils.java +++ b/src/main/java/org/apache/commons/compress/utils/FileNameUtils.java @@ -87,7 +87,8 @@ public class FileNameUtils { if (path == null) { return null; } - return fileNameToExtension(path.getFileName().toString()); + final Path fileName = path.getFileName(); + return fileName != null ? fileNameToExtension(fileName.toString()) : null; } /** diff --git a/src/test/java/org/apache/commons/compress/utils/FileNameUtilsTest.java b/src/test/java/org/apache/commons/compress/utils/FileNameUtilsTest.java index b0edcc3a..328918cc 100644 --- a/src/test/java/org/apache/commons/compress/utils/FileNameUtilsTest.java +++ b/src/test/java/org/apache/commons/compress/utils/FileNameUtilsTest.java @@ -74,6 +74,14 @@ public class FileNameUtilsTest { public void getExtensionPathBaseCases() { assertEquals("foo", FileNameUtils.getExtension(Paths.get("a/b/c/bar.foo"))); assertEquals("", FileNameUtils.getExtension(Paths.get("foo"))); + assertEquals("", FileNameUtils.getExtension(Paths.get(""))); + assertEquals("", FileNameUtils.getExtension(Paths.get("."))); + for (File f : File.listRoots()) { + assertEquals(null, FileNameUtils.getExtension(f.toPath())); + } + if (SystemUtils.IS_OS_WINDOWS) { + assertEquals(null, FileNameUtils.getExtension(Paths.get("C:\\"))); + } } @Test