You've already forked linux-packaging-mono
Imported Upstream version 4.6.0.125
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
This commit is contained in:
parent
a569aebcfd
commit
e79aa3c0ed
137
mcs/class/referencesource/System.Web/misc/ConfigPathUtility.cs
Normal file
137
mcs/class/referencesource/System.Web/misc/ConfigPathUtility.cs
Normal file
@ -0,0 +1,137 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <copyright file="ConfigPathUtility.cs" company="Microsoft">
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// </copyright>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace System.Configuration {
|
||||
|
||||
#if CONFIGPATHUTILITY_SYSTEMWEB
|
||||
using Debug=System.Web.Util.Debug;
|
||||
#endif
|
||||
|
||||
internal static class ConfigPathUtility {
|
||||
private const char SeparatorChar = '/';
|
||||
|
||||
//
|
||||
// A configPath is valid if
|
||||
// * It does not start or end with a '/'
|
||||
// * It is not null or empty, except in the case of the root configuration record
|
||||
// * It does not contain '\'
|
||||
// * It does not contain a path component equal to "." or ".."
|
||||
//
|
||||
// The checks for '\', ".", and ".." are not strictly necessary, but their presence
|
||||
// could lead to problems for configuration hosts.
|
||||
//
|
||||
static internal bool IsValid(string configPath) {
|
||||
if (String.IsNullOrEmpty(configPath)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
int start = -1;
|
||||
for (int examine = 0; examine <= configPath.Length; examine++) {
|
||||
char ch;
|
||||
|
||||
if (examine < configPath.Length) {
|
||||
ch = configPath[examine];
|
||||
}
|
||||
else {
|
||||
ch = SeparatorChar;
|
||||
}
|
||||
|
||||
// backslash disallowed
|
||||
if (ch == '\\') {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (ch == SeparatorChar) {
|
||||
// double slash disallowed
|
||||
// note this check also purposefully catches starting and ending slash
|
||||
if (examine == start + 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// "." disallowed
|
||||
if (examine == start + 2 && configPath[start + 1] == '.') {
|
||||
return false;
|
||||
}
|
||||
|
||||
// ".." disallowed
|
||||
if (examine == start + 3 && configPath[start + 1] == '.' && configPath[start + 2] == '.') {
|
||||
return false;
|
||||
}
|
||||
|
||||
start = examine;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
#if !CONFIGPATHUTILITY_SYSTEMWEB
|
||||
static internal string Combine(string parentConfigPath, string childConfigPath) {
|
||||
Debug.Assert(String.IsNullOrEmpty(parentConfigPath) || IsValid(parentConfigPath), "String.IsNullOrEmpty(parentConfigPath) || IsValid(parentConfigPath)");
|
||||
Debug.Assert(String.IsNullOrEmpty(childConfigPath) || IsValid(childConfigPath), "String.IsNullOrEmpty(childConfigPath) || IsValid(childConfigPath)");
|
||||
|
||||
if (String.IsNullOrEmpty(parentConfigPath)) {
|
||||
return childConfigPath;
|
||||
}
|
||||
|
||||
if (String.IsNullOrEmpty(childConfigPath)) {
|
||||
return parentConfigPath;
|
||||
}
|
||||
|
||||
return parentConfigPath + "/" + childConfigPath;
|
||||
}
|
||||
|
||||
static internal string[] GetParts(string configPath) {
|
||||
Debug.Assert(IsValid(configPath), "IsValid(configPath)");
|
||||
|
||||
string[] parts = configPath.Split(SeparatorChar);
|
||||
return parts;
|
||||
}
|
||||
|
||||
//
|
||||
// Return the last part of a config path, e.g.
|
||||
// GetName("MACHINE/WEBROOT/Default Web Site/app") == "app"
|
||||
//
|
||||
static internal string GetName(string configPath) {
|
||||
Debug.Assert(String.IsNullOrEmpty(configPath) || IsValid(configPath), "String.IsNullOrEmpty(configPath) || IsValid(configPath)");
|
||||
|
||||
if (String.IsNullOrEmpty(configPath)) {
|
||||
return configPath;
|
||||
}
|
||||
|
||||
int index = configPath.LastIndexOf('/');
|
||||
if (index == -1) {
|
||||
return configPath;
|
||||
}
|
||||
|
||||
Debug.Assert(index != configPath.Length - 1);
|
||||
return configPath.Substring(index + 1);
|
||||
}
|
||||
#endif
|
||||
|
||||
// Avoid unused code warning in System.Configuration by including functions in assembly-specific #defines
|
||||
#if CONFIGPATHUTILITY_SYSTEMWEB
|
||||
static internal string GetParent(string configPath) {
|
||||
Debug.Assert(String.IsNullOrEmpty(configPath) || IsValid(configPath), "String.IsNullOrEmpty(configPath) || IsValid(configPath)");
|
||||
|
||||
if (String.IsNullOrEmpty(configPath)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
string parentConfigPath;
|
||||
int lastSlash = configPath.LastIndexOf(SeparatorChar);
|
||||
if (lastSlash == -1) {
|
||||
parentConfigPath = null;
|
||||
}
|
||||
else {
|
||||
parentConfigPath = configPath.Substring(0, lastSlash);
|
||||
}
|
||||
|
||||
return parentConfigPath;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user