Use Go rules for Windows filename components

This commit is contained in:
2026-10-24 19:20:54 +00:00
parent 087050fa25
commit 2fedb0307f
4 changed files with 68 additions and 38 deletions

View File

@@ -258,27 +258,16 @@ func validFilenameComponent(value string) bool {
return false
}
if runtime.GOOS == "windows" {
return validWindowsFilenameComponent(value)
}
return true
}
func validWindowsFilenameComponent(value string) bool {
if strings.ContainsAny(value, `<>:"|?*`) || strings.HasSuffix(value, ".") || strings.HasSuffix(value, " ") {
return false
}
for _, character := range value {
if character < 32 {
if !filepath.IsLocal(value) || strings.ContainsAny(value, `<>:"|?*`) || strings.HasSuffix(value, ".") || strings.HasSuffix(value, " ") {
return false
}
for _, character := range value {
if character < 32 {
return false
}
}
}
base := strings.ToUpper(strings.TrimSuffix(value, filepath.Ext(value)))
switch base {
case "CON", "PRN", "AUX", "NUL", "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9", "COM¹", "COM²", "COM³", "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9", "LPT¹", "LPT²", "LPT³":
return false
default:
return true
}
return true
}
var errUnixSystemPresetUnavailable = errors.New("Unix system directories are unavailable on this platform")