Browse Source

Added checks for invalid filenames. (SD2-394)

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@307 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 20 years ago
parent
commit
6c7b1d237c
  1. 6
      src/Main/Base/Project/Src/Commands/FileCommands.cs
  2. 7
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNode.cs
  3. 3
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/FileNode.cs
  4. 3
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/SolutionFolderNode.cs
  5. 3
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/SolutionItemNode.cs
  6. 7
      src/Main/Base/Project/Src/Services/File/FileService.cs
  7. 17
      src/Main/Core/Project/Src/Services/FileUtility/FileUtility.cs
  8. 2
      src/Main/Core/Project/Src/Services/PropertyService/Properties.cs

6
src/Main/Base/Project/Src/Commands/FileCommands.cs

@ -129,11 +129,7 @@ namespace ICSharpCode.SharpDevelop.Commands
if (!FileUtility.IsValidFileName(fileName)) { if (!FileService.CheckFileName(fileName)) {
MessageService.ShowMessage(StringParser.Parse("${res:ICSharpCode.SharpDevelop.Commands.SaveFile.InvalidFileNameError}", new string[,] {{"FileName", fileName}}));
return; return;
} }

7
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(); base.Refresh();
if (Nodes.Count == 0) { if (Nodes.Count == 0) {
@ -352,13 +352,16 @@ namespace ICSharpCode.SharpDevelop.Project
if (newName == null) { if (newName == null) {
return; return;
} }
if (!FileService.CheckFileName(newName)) {
return;
}
string oldText = Text; string oldText = Text;
Text = newName; Text = newName;
if (Directory != null) { if (Directory != null) {
string newPath = Path.Combine(Path.GetDirectoryName(Directory), newName); string newPath = Path.Combine(Path.GetDirectoryName(Directory), newName);
if (System.IO.Directory.Exists(newPath)) { if (System.IO.Directory.Exists(newPath)) {
if (System.IO.Directory.GetFiles(Directory).Length == 0) { 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) { } else if (System.IO.Directory.GetFiles(newPath).Length == 0) {
System.IO.Directory.Delete(newPath); System.IO.Directory.Delete(newPath);
FileService.RenameFile(Directory, newPath, true); FileService.RenameFile(Directory, newPath, true);

3
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/FileNode.cs

@ -123,6 +123,9 @@ namespace ICSharpCode.SharpDevelop.Project
if (newName == null) { if (newName == null) {
return; return;
} }
if (!FileService.CheckFileName(newName)) {
return;
}
Text = newName; Text = newName;
if (FileName != null) { if (FileName != null) {
string newFileName = Path.Combine(Path.GetDirectoryName(FileName), newName); string newFileName = Path.Combine(Path.GetDirectoryName(FileName), newName);

3
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) public override void AfterLabelEdit(string newName)
{ {
if (!FileService.CheckFileName(newName)) {
return;
}
Text = folder.Location = folder.Name = newName; Text = folder.Location = folder.Name = newName;
ProjectService.SaveSolution(); ProjectService.SaveSolution();
} }

3
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/SolutionItemNode.cs

@ -122,6 +122,9 @@ namespace ICSharpCode.SharpDevelop.Project
if (newName == null) { if (newName == null) {
return; return;
} }
if (!FileService.CheckFileName(newName)) {
return;
}
Text = newName; Text = newName;
string newFileName = Path.Combine(solution.Directory, newName); string newFileName = Path.Combine(solution.Directory, newName);

7
src/Main/Base/Project/Src/Services/File/FileService.cs

@ -51,6 +51,13 @@ namespace ICSharpCode.Core
RecentOpen.AddLastProject(e.Solution.FileName); 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 class LoadFileWrapper
{ {

17
src/Main/Core/Project/Src/Services/FileUtility/FileUtility.cs

@ -181,10 +181,10 @@ namespace ICSharpCode.Core
testDirectory = Path.GetFullPath(testDirectory.ToUpper()); testDirectory = Path.GetFullPath(testDirectory.ToUpper());
return baseDirectory.Length <= testDirectory.Length && return baseDirectory.Length <= testDirectory.Length &&
testDirectory.StartsWith(baseDirectory) && testDirectory.StartsWith(baseDirectory) &&
(testDirectory.Length == baseDirectory.Length || (testDirectory.Length == baseDirectory.Length ||
testDirectory[baseDirectory.Length] == Path.DirectorySeparatorChar || testDirectory[baseDirectory.Length] == Path.DirectorySeparatorChar ||
testDirectory[baseDirectory.Length] == Path.AltDirectorySeparatorChar); testDirectory[baseDirectory.Length] == Path.AltDirectorySeparatorChar);
} catch (Exception) { } catch (Exception) {
return false; return false;
} }
@ -276,10 +276,9 @@ namespace ICSharpCode.Core
} }
// platform independend : check for invalid path chars // platform independend : check for invalid path chars
foreach (char invalidChar in Path.GetInvalidPathChars()) {
if (fileName.IndexOf(invalidChar) >= 0) { if (fileName.IndexOfAny(Path.GetInvalidPathChars()) >= 0) {
return false; return false;
}
} }
if (fileName.IndexOf('?') >= 0 || fileName.IndexOf('*') >= 0) { if (fileName.IndexOf('?') >= 0 || fileName.IndexOf('*') >= 0) {
return false; return false;
@ -518,7 +517,7 @@ namespace ICSharpCode.Core
return ObservedLoad(saveFileAs, fileName, FileErrorPolicy.Inform); return ObservedLoad(saveFileAs, fileName, FileErrorPolicy.Inform);
} }
static void OnFileLoaded(FileNameEventArgs e) static void OnFileLoaded(FileNameEventArgs e)
{ {
if (FileLoaded != null) { if (FileLoaded != null) {
FileLoaded(null, e); FileLoaded(null, e);

2
src/Main/Core/Project/Src/Services/PropertyService/Properties.cs

@ -201,7 +201,7 @@ namespace ICSharpCode.Core
public void Save(string fileName) 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.Formatting = Formatting.Indented;
writer.WriteStartElement("Properties"); writer.WriteStartElement("Properties");
WriteProperties(writer); WriteProperties(writer);

Loading…
Cancel
Save