From 149af8951d8d44c1ab804e87d50ada46675769ca Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Tue, 7 Feb 2006 19:23:15 +0000 Subject: [PATCH] Fixed SD2-679. Attempting to create a directory in the project browser containing invalid characters, such as a backslash, will display an error message. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@1095 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../ProjectBrowser/TreeNodes/DirectoryNode.cs | 3 ++ .../Project/Src/Services/File/FileService.cs | 12 ++++++ .../Src/Services/FileUtility/FileUtility.cs | 16 ++++++++ .../Core/Test/ICSharpCode.Core.Tests.csproj | 1 + .../Core/Test/InvalidDirectoryNameTests.cs | 40 +++++++++++++++++++ 5 files changed, 72 insertions(+) create mode 100644 src/Main/Core/Test/InvalidDirectoryNameTests.cs 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 20533abafb..194886a2a3 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 @@ -474,6 +474,9 @@ namespace ICSharpCode.SharpDevelop.Project if (!FileService.CheckFileName(newName)) { return; } + if (!FileService.CheckDirectoryName(newName)) { + return; + } string oldText = Text; Text = newName; if (Directory != null) { diff --git a/src/Main/Base/Project/Src/Services/File/FileService.cs b/src/Main/Base/Project/Src/Services/File/FileService.cs index 12b28c3f94..aa2b538409 100644 --- a/src/Main/Base/Project/Src/Services/File/FileService.cs +++ b/src/Main/Base/Project/Src/Services/File/FileService.cs @@ -50,6 +50,18 @@ namespace ICSharpCode.Core return false; } + /// + /// Checks that a single directory name is valid. + /// + /// A single directory name not the full path + public static bool CheckDirectoryName(string name) + { + if (FileUtility.IsValidDirectoryName(name)) + return true; + MessageService.ShowMessage(StringParser.Parse("${res:ICSharpCode.SharpDevelop.Commands.SaveFile.InvalidFileNameError}", new string[,] {{"FileName", name}})); + return false; + } + class LoadFileWrapper { IDisplayBinding binding; diff --git a/src/Main/Core/Project/Src/Services/FileUtility/FileUtility.cs b/src/Main/Core/Project/Src/Services/FileUtility/FileUtility.cs index 6a7f7bd368..9732e213e7 100644 --- a/src/Main/Core/Project/Src/Services/FileUtility/FileUtility.cs +++ b/src/Main/Core/Project/Src/Services/FileUtility/FileUtility.cs @@ -315,6 +315,22 @@ namespace ICSharpCode.Core Char.IsDigit(ch)); } + /// + /// Checks that a single directory name (not the full path) is valid. + /// + public static bool IsValidDirectoryName(string name) + { + if (!IsValidFileName(name)) { + return false; + } + if (name.IndexOfAny(new char[]{Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar}) >= 0) { + return false; + } + if (name.Trim(' ').Length == 0) { + return false; + } + return true; + } public static bool TestFileExists(string filename) { diff --git a/src/Main/Core/Test/ICSharpCode.Core.Tests.csproj b/src/Main/Core/Test/ICSharpCode.Core.Tests.csproj index 02cc4cbed9..450dae3f57 100644 --- a/src/Main/Core/Test/ICSharpCode.Core.Tests.csproj +++ b/src/Main/Core/Test/ICSharpCode.Core.Tests.csproj @@ -48,6 +48,7 @@ + diff --git a/src/Main/Core/Test/InvalidDirectoryNameTests.cs b/src/Main/Core/Test/InvalidDirectoryNameTests.cs new file mode 100644 index 0000000000..7855adc944 --- /dev/null +++ b/src/Main/Core/Test/InvalidDirectoryNameTests.cs @@ -0,0 +1,40 @@ +// +// +// +// +// $Revision$ +// + +using NUnit.Framework; +using System; + +namespace ICSharpCode.Core.Tests +{ + [TestFixture] + public class InvalidDirectoryNameTests + { + [Test] + public void ContainsBackslash() + { + Assert.IsFalse(FileUtility.IsValidDirectoryName(@"project\test")); + } + + [Test] + public void ContainsForwardSlash() + { + Assert.IsFalse(FileUtility.IsValidDirectoryName(@"project/test")); + } + + [Test] + public void IsPRN() + { + Assert.IsFalse(FileUtility.IsValidDirectoryName("PRN")); + } + + [Test] + public void IsEmptySpace() + { + Assert.IsFalse(FileUtility.IsValidDirectoryName(" ")); + } + } +}