在非 Windows 平台也将 : 视为非法字符 (#5035)

This commit is contained in:
辞庐
2025-12-21 21:20:54 +08:00
committed by GitHub
parent cc092f535b
commit 77cdc2108f
2 changed files with 3 additions and 2 deletions

View File

@@ -177,6 +177,7 @@ public final class FileUtils {
if (!Character.isValidCodePoint(codePoint) if (!Character.isValidCodePoint(codePoint)
|| Character.isISOControl(codePoint) || Character.isISOControl(codePoint)
|| codePoint == '/' || codePoint == '\0' || codePoint == '/' || codePoint == '\0'
|| codePoint == ':'
// Unicode replacement character // Unicode replacement character
|| codePoint == 0xfffd || codePoint == 0xfffd
// Not Unicode character // Not Unicode character
@@ -185,7 +186,7 @@ public final class FileUtils {
// https://learn.microsoft.com/windows/win32/fileio/naming-a-file // https://learn.microsoft.com/windows/win32/fileio/naming-a-file
if (os == OperatingSystem.WINDOWS && if (os == OperatingSystem.WINDOWS &&
(ch == '<' || ch == '>' || ch == ':' || ch == '"' || ch == '\\' || ch == '|' || ch == '?' || ch == '*')) { (ch == '<' || ch == '>' || ch == '"' || ch == '\\' || ch == '|' || ch == '?' || ch == '*')) {
return false; return false;
} }
} }

View File

@@ -52,6 +52,7 @@ public class FileUtilsTest {
assertFalse(FileUtils.isNameValid(os, "a\uD83Db")); assertFalse(FileUtils.isNameValid(os, "a\uD83Db"));
assertFalse(FileUtils.isNameValid(os, "a\uDE00b")); assertFalse(FileUtils.isNameValid(os, "a\uDE00b"));
assertFalse(FileUtils.isNameValid(os, "a\uDE00\uD83Db")); assertFalse(FileUtils.isNameValid(os, "a\uDE00\uD83Db"));
assertFalse(FileUtils.isNameValid(os, "f:oo"));
// Platform-specific tests // Platform-specific tests
boolean isWindows = os == OperatingSystem.WINDOWS; boolean isWindows = os == OperatingSystem.WINDOWS;
@@ -62,7 +63,6 @@ public class FileUtilsTest {
assertEquals(isNotWindows, FileUtils.isNameValid(os, "foo ")); assertEquals(isNotWindows, FileUtils.isNameValid(os, "foo "));
assertEquals(isNotWindows, FileUtils.isNameValid(os, "f<oo")); assertEquals(isNotWindows, FileUtils.isNameValid(os, "f<oo"));
assertEquals(isNotWindows, FileUtils.isNameValid(os, "f>oo")); assertEquals(isNotWindows, FileUtils.isNameValid(os, "f>oo"));
assertEquals(isNotWindows, FileUtils.isNameValid(os, "f:oo"));
assertEquals(isNotWindows, FileUtils.isNameValid(os, "f?oo")); assertEquals(isNotWindows, FileUtils.isNameValid(os, "f?oo"));
assertEquals(isNotWindows, FileUtils.isNameValid(os, "f*oo")); assertEquals(isNotWindows, FileUtils.isNameValid(os, "f*oo"));
assertEquals(isNotWindows, FileUtils.isNameValid(os, "f\\oo")); assertEquals(isNotWindows, FileUtils.isNameValid(os, "f\\oo"));