From 6c7b1d237c8ec834bf3e7fa79e7abac0f64f349a Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Wed, 3 Aug 2005 14:32:14 +0000 Subject: [PATCH] Added checks for invalid filenames. (SD2-394) git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@307 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Base/Project/Src/Commands/FileCommands.cs | 6 +----- .../ProjectBrowser/TreeNodes/DirectoryNode.cs | 7 +++++-- .../Pads/ProjectBrowser/TreeNodes/FileNode.cs | 3 +++ .../TreeNodes/SolutionFolderNode.cs | 3 +++ .../TreeNodes/SolutionItemNode.cs | 3 +++ .../Project/Src/Services/File/FileService.cs | 7 +++++++ .../Src/Services/FileUtility/FileUtility.cs | 17 ++++++++--------- .../Src/Services/PropertyService/Properties.cs | 2 +- 8 files changed, 31 insertions(+), 17 deletions(-) diff --git a/src/Main/Base/Project/Src/Commands/FileCommands.cs b/src/Main/Base/Project/Src/Commands/FileCommands.cs index 6f823cd2ab..6aab8b0e77 100644 --- a/src/Main/Base/Project/Src/Commands/FileCommands.cs +++ b/src/Main/Base/Project/Src/Commands/FileCommands.cs @@ -129,11 +129,7 @@ namespace ICSharpCode.SharpDevelop.Commands - if (!FileUtility.IsValidFileName(fileName)) { - - - MessageService.ShowMessage(StringParser.Parse("${res:ICSharpCode.SharpDevelop.Commands.SaveFile.InvalidFileNameError}", new string[,] {{"FileName", fileName}})); - + if (!FileService.CheckFileName(fileName)) { return; } diff --git a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNode.cs b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNode.cs index be44b05312..7b73486107 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNode.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNode.cs @@ -124,7 +124,7 @@ namespace ICSharpCode.SharpDevelop.Project } } } - public override void Refresh() + public override void Refresh() { base.Refresh(); if (Nodes.Count == 0) { @@ -352,13 +352,16 @@ namespace ICSharpCode.SharpDevelop.Project if (newName == null) { return; } + if (!FileService.CheckFileName(newName)) { + return; + } string oldText = Text; Text = newName; if (Directory != null) { string newPath = Path.Combine(Path.GetDirectoryName(Directory), newName); if (System.IO.Directory.Exists(newPath)) { if (System.IO.Directory.GetFiles(Directory).Length == 0) { - System.IO.Directory.Delete(Directory); + System.IO.Directory.Delete(Directory); } else if (System.IO.Directory.GetFiles(newPath).Length == 0) { System.IO.Directory.Delete(newPath); FileService.RenameFile(Directory, newPath, true); diff --git a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/FileNode.cs b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/FileNode.cs index 12ed33ce10..25afb4fa19 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/FileNode.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/FileNode.cs @@ -123,6 +123,9 @@ namespace ICSharpCode.SharpDevelop.Project if (newName == null) { return; } + if (!FileService.CheckFileName(newName)) { + return; + } Text = newName; if (FileName != null) { string newFileName = Path.Combine(Path.GetDirectoryName(FileName), newName); diff --git a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/SolutionFolderNode.cs b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/SolutionFolderNode.cs index ca673e6d26..770d8afe8c 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/SolutionFolderNode.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/SolutionFolderNode.cs @@ -76,6 +76,9 @@ namespace ICSharpCode.SharpDevelop.Project public override void AfterLabelEdit(string newName) { + if (!FileService.CheckFileName(newName)) { + return; + } Text = folder.Location = folder.Name = newName; ProjectService.SaveSolution(); } diff --git a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/SolutionItemNode.cs b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/SolutionItemNode.cs index b03658914e..f6ed124c78 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/SolutionItemNode.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/SolutionItemNode.cs @@ -122,6 +122,9 @@ namespace ICSharpCode.SharpDevelop.Project if (newName == null) { return; } + if (!FileService.CheckFileName(newName)) { + return; + } Text = newName; string newFileName = Path.Combine(solution.Directory, newName); diff --git a/src/Main/Base/Project/Src/Services/File/FileService.cs b/src/Main/Base/Project/Src/Services/File/FileService.cs index d4831bb436..64ad715bbf 100644 --- a/src/Main/Base/Project/Src/Services/File/FileService.cs +++ b/src/Main/Base/Project/Src/Services/File/FileService.cs @@ -51,6 +51,13 @@ namespace ICSharpCode.Core RecentOpen.AddLastProject(e.Solution.FileName); } + public static bool CheckFileName(string fileName) + { + if (FileUtility.IsValidFileName(fileName)) + return true; + MessageService.ShowMessage(StringParser.Parse("${res:ICSharpCode.SharpDevelop.Commands.SaveFile.InvalidFileNameError}", new string[,] {{"FileName", fileName}})); + return false; + } class LoadFileWrapper { diff --git a/src/Main/Core/Project/Src/Services/FileUtility/FileUtility.cs b/src/Main/Core/Project/Src/Services/FileUtility/FileUtility.cs index 975e5fa7b9..aa33b0373e 100644 --- a/src/Main/Core/Project/Src/Services/FileUtility/FileUtility.cs +++ b/src/Main/Core/Project/Src/Services/FileUtility/FileUtility.cs @@ -181,10 +181,10 @@ namespace ICSharpCode.Core testDirectory = Path.GetFullPath(testDirectory.ToUpper()); return baseDirectory.Length <= testDirectory.Length && - testDirectory.StartsWith(baseDirectory) && - (testDirectory.Length == baseDirectory.Length || - testDirectory[baseDirectory.Length] == Path.DirectorySeparatorChar || - testDirectory[baseDirectory.Length] == Path.AltDirectorySeparatorChar); + testDirectory.StartsWith(baseDirectory) && + (testDirectory.Length == baseDirectory.Length || + testDirectory[baseDirectory.Length] == Path.DirectorySeparatorChar || + testDirectory[baseDirectory.Length] == Path.AltDirectorySeparatorChar); } catch (Exception) { return false; } @@ -276,10 +276,9 @@ namespace ICSharpCode.Core } // platform independend : check for invalid path chars - foreach (char invalidChar in Path.GetInvalidPathChars()) { - if (fileName.IndexOf(invalidChar) >= 0) { - return false; - } + + if (fileName.IndexOfAny(Path.GetInvalidPathChars()) >= 0) { + return false; } if (fileName.IndexOf('?') >= 0 || fileName.IndexOf('*') >= 0) { return false; @@ -518,7 +517,7 @@ namespace ICSharpCode.Core return ObservedLoad(saveFileAs, fileName, FileErrorPolicy.Inform); } - static void OnFileLoaded(FileNameEventArgs e) + static void OnFileLoaded(FileNameEventArgs e) { if (FileLoaded != null) { FileLoaded(null, e); diff --git a/src/Main/Core/Project/Src/Services/PropertyService/Properties.cs b/src/Main/Core/Project/Src/Services/PropertyService/Properties.cs index e15da8168a..0ae59da7d6 100644 --- a/src/Main/Core/Project/Src/Services/PropertyService/Properties.cs +++ b/src/Main/Core/Project/Src/Services/PropertyService/Properties.cs @@ -201,7 +201,7 @@ namespace ICSharpCode.Core public void Save(string fileName) { - using (XmlTextWriter writer = new XmlTextWriter(fileName, Encoding.Default)) { + using (XmlTextWriter writer = new XmlTextWriter(fileName, Encoding.UTF8)) { writer.Formatting = Formatting.Indented; writer.WriteStartElement("Properties"); WriteProperties(writer);