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 <[email protected]>
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