diff --git a/AssemblyVersion.cs b/AssemblyVersion.cs
index b32227f..b3b3c41 100644
--- a/AssemblyVersion.cs
+++ b/AssemblyVersion.cs
@@ -16,5 +16,5 @@ using System.Reflection;
//
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
-[assembly: AssemblyVersion("3.0.2.516")]
-[assembly: AssemblyFileVersion("3.0.2.516")]
+[assembly: AssemblyVersion("3.0.2.517")]
+[assembly: AssemblyFileVersion("3.0.2.517")]
diff --git a/Core/FilesStorageProvider.cs b/Core/FilesStorageProvider.cs
index fc15a15..79a144c 100644
--- a/Core/FilesStorageProvider.cs
+++ b/Core/FilesStorageProvider.cs
@@ -94,6 +94,18 @@ namespace ScrewTurn.Wiki {
get { return false; }
}
+ ///
+ /// Checks the path.
+ ///
+ /// The path to be checked.
+ /// The expected beginning of the path.
+ /// If does not begin with or contains "\.." or "..\".
+ private string CheckPath(string path, string begin) {
+ if(!path.StartsWith(begin) || path.Contains(Path.DirectorySeparatorChar + "..") || path.Contains(".." + Path.DirectorySeparatorChar))
+ throw new InvalidOperationException();
+ return path;
+ }
+
///
/// Builds a full path from a provider-specific partial path.
///
@@ -104,8 +116,8 @@ namespace ScrewTurn.Wiki {
private string BuildFullPath(string partialPath) {
if(partialPath == null) partialPath = "";
partialPath = partialPath.Replace("/", Path.DirectorySeparatorChar.ToString()).TrimStart(Path.DirectorySeparatorChar);
- string up = Path.Combine(host.GetSettingValue(SettingName.PublicDirectory), UploadDirectory);
- return Path.Combine(up, partialPath); // partialPath CANNOT start with "\" -> Path.Combine does not work
+ string up = Path.Combine(host.GetSettingValue(SettingName.PublicDirectory), UploadDirectory);
+ return CheckPath(Path.Combine(up, partialPath), up); // partialPath CANNOT start with "\" -> Path.Combine does not work
}
///
@@ -119,7 +131,7 @@ namespace ScrewTurn.Wiki {
if(partialPath == null) partialPath = "";
partialPath = partialPath.Replace("/", Path.DirectorySeparatorChar.ToString()).TrimStart(Path.DirectorySeparatorChar);
string up = Path.Combine(host.GetSettingValue(SettingName.PublicDirectory), AttachmentsDirectory);
- return Path.Combine(up, partialPath); // partialPath CANNOT start with "\" -> Path.Combine does not work
+ return CheckPath(Path.Combine(up, partialPath), up); // partialPath CANNOT start with "\" -> Path.Combine does not work
}
///