From 201977d82e4ebd43c2c5f0a4c729cf88f1db9698 Mon Sep 17 00:00:00 2001 From: baezzys Date: Sun, 19 May 2024 15:35:35 +0900 Subject: [PATCH] Fix IO-783: Remove NTFS ADS separator check for FilenameUtils.getExtension on Windows - Removed the NTFS ADS separator (colon) validation from the indexOfExtension method. - Ensured FilenameUtils.getExtension method works OS independently. This fix addresses the issue where the presence of a colon in filenames caused IllegalArgumentException on Windows only. --- src/main/java/org/apache/commons/io/FilenameUtils.java | 7 ------- .../java/org/apache/commons/io/FilenameUtilsTest.java | 10 +--------- 2 files changed, 1 insertion(+), 16 deletions(-) diff --git a/src/main/java/org/apache/commons/io/FilenameUtils.java b/src/main/java/org/apache/commons/io/FilenameUtils.java index b8c92f15ef8..5da6e4303e6 100644 --- a/src/main/java/org/apache/commons/io/FilenameUtils.java +++ b/src/main/java/org/apache/commons/io/FilenameUtils.java @@ -988,13 +988,6 @@ public static int indexOfExtension(final String fileName) throws IllegalArgument if (fileName == null) { return NOT_FOUND; } - if (isSystemWindows()) { - // Special handling for NTFS ADS: Don't accept colon in the file name. - final int offset = fileName.indexOf(':', getAdsCriticalOffset(fileName)); - if (offset != -1) { - throw new IllegalArgumentException("NTFS ADS separator (':') in file name is forbidden."); - } - } final int extensionPos = fileName.lastIndexOf(EXTENSION_SEPARATOR); final int lastSeparator = indexOfLastSeparator(fileName); return lastSeparator > extensionPos ? NOT_FOUND : extensionPos; diff --git a/src/test/java/org/apache/commons/io/FilenameUtilsTest.java b/src/test/java/org/apache/commons/io/FilenameUtilsTest.java index 00618f9bf04..ea17acf6cb1 100644 --- a/src/test/java/org/apache/commons/io/FilenameUtilsTest.java +++ b/src/test/java/org/apache/commons/io/FilenameUtilsTest.java @@ -247,15 +247,7 @@ public void testGetExtension() { assertEquals("", FilenameUtils.getExtension("a\\b\\c")); assertEquals("", FilenameUtils.getExtension("C:\\temp\\foo.bar\\README")); assertEquals("ext", FilenameUtils.getExtension("../filename.ext")); - - if (FilenameUtils.isSystemWindows()) { - // Special case handling for NTFS ADS names - final IllegalArgumentException e = assertThrows(IllegalArgumentException.class, () -> FilenameUtils.getExtension("foo.exe:bar.txt")); - assertEquals("NTFS ADS separator (':') in file name is forbidden.", e.getMessage()); - } else { - // Upwards compatibility: - assertEquals("txt", FilenameUtils.getExtension("foo.exe:bar.txt")); - } + assertEquals("txt", FilenameUtils.getExtension("foo.exe:bar.txt")); } @Test