From 503e1e143ea7ca1a6da46af0fd611b9af4b224bd Mon Sep 17 00:00:00 2001 From: Michael Bucari-Tovo Date: Fri, 22 Jul 2022 18:11:09 -0600 Subject: [PATCH] Separate invalid char check for folders and files. Files can't have slashes. --- Source/FileManager/ReplacementCharacters.cs | 6 ++++-- Source/LibationFileManager/Templates.cs | 4 ++-- Source/LibationWinForms/Dialogs/EditReplacementChars.cs | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/Source/FileManager/ReplacementCharacters.cs b/Source/FileManager/ReplacementCharacters.cs index 53fd9517..3146cd40 100644 --- a/Source/FileManager/ReplacementCharacters.cs +++ b/Source/FileManager/ReplacementCharacters.cs @@ -168,8 +168,10 @@ namespace FileManager } - public static bool ContainsInvalid(string path) + public static bool ContainsInvalidPathChar(string path) => path.Any(c => invalidChars.Contains(c)); + public static bool ContainsInvalidFilenameChar(string path) + => path.Any(c => invalidChars.Concat(new char[] { '\\', '/' }).Contains(c)); public string ReplaceInvalidFilenameChars(string fileName) { @@ -246,7 +248,7 @@ namespace FileManager dict[3].CharacterToReplace != default3.CharacterToReplace || dict[3].Description != default3.Description || dict[4].CharacterToReplace != default4.CharacterToReplace || dict[4].Description != default4.Description || dict[5].CharacterToReplace != default5.CharacterToReplace || dict[5].Description != default5.Description || - dict.Any(r => ReplacementCharacters.ContainsInvalid(r.ReplacementString)) + dict.Any(r => ReplacementCharacters.ContainsInvalidPathChar(r.ReplacementString)) ) { dict = ReplacementCharacters.Default.Replacements; diff --git a/Source/LibationFileManager/Templates.cs b/Source/LibationFileManager/Templates.cs index 69c992c9..2d2e5313 100644 --- a/Source/LibationFileManager/Templates.cs +++ b/Source/LibationFileManager/Templates.cs @@ -54,7 +54,7 @@ namespace LibationFileManager if (template is null) return new[] { ERROR_NULL_IS_INVALID }; - if (ReplacementCharacters.ContainsInvalid(template.Replace("<","").Replace(">",""))) + if (ReplacementCharacters.ContainsInvalidFilenameChar(template.Replace("<","").Replace(">",""))) return new[] { ERROR_INVALID_FILE_NAME_CHAR }; return Valid; @@ -201,7 +201,7 @@ namespace LibationFileManager return new[] { ERROR_FULL_PATH_IS_INVALID }; // must be relative. no colons. all other path chars are valid enough to pass this check and will be handled on final save. - if (ReplacementCharacters.ContainsInvalid(template.Replace("<", "").Replace(">", ""))) + if (ReplacementCharacters.ContainsInvalidPathChar(template.Replace("<", "").Replace(">", ""))) return new[] { ERROR_INVALID_FILE_NAME_CHAR }; return Valid; diff --git a/Source/LibationWinForms/Dialogs/EditReplacementChars.cs b/Source/LibationWinForms/Dialogs/EditReplacementChars.cs index 88388e4a..a24b4371 100644 --- a/Source/LibationWinForms/Dialogs/EditReplacementChars.cs +++ b/Source/LibationWinForms/Dialogs/EditReplacementChars.cs @@ -101,7 +101,7 @@ namespace LibationWinForms.Dialogs { dataGridView1.Rows[e.RowIndex].ErrorText = $"The {charToReplaceStr[0]} character is already being replaced"; } - else if (ReplacementCharacters.ContainsInvalid(replacement)) + else if (ReplacementCharacters.ContainsInvalidPathChar(replacement)) { dataGridView1.Rows[e.RowIndex].ErrorText = $"Your {replacementStringCol.HeaderText} contains illegal characters"; }