summaryrefslogtreecommitdiff
path: root/src/mscorlib/src/System/Security/Util/URLString.cs
diff options
context:
space:
mode:
authorJiyoung Yun <jy910.yun@samsung.com>2017-04-13 14:17:19 +0900
committerJiyoung Yun <jy910.yun@samsung.com>2017-04-13 14:17:19 +0900
commita56e30c8d33048216567753d9d3fefc2152af8ac (patch)
tree7e5d979695fc4a431740982eb1cfecc2898b23a5 /src/mscorlib/src/System/Security/Util/URLString.cs
parent4b11dc566a5bbfa1378d6266525c281b028abcc8 (diff)
downloadcoreclr-a56e30c8d33048216567753d9d3fefc2152af8ac.tar.gz
coreclr-a56e30c8d33048216567753d9d3fefc2152af8ac.tar.bz2
coreclr-a56e30c8d33048216567753d9d3fefc2152af8ac.zip
Imported Upstream version 2.0.0.11353upstream/2.0.0.11353
Diffstat (limited to 'src/mscorlib/src/System/Security/Util/URLString.cs')
-rw-r--r--src/mscorlib/src/System/Security/Util/URLString.cs138
1 files changed, 0 insertions, 138 deletions
diff --git a/src/mscorlib/src/System/Security/Util/URLString.cs b/src/mscorlib/src/System/Security/Util/URLString.cs
deleted file mode 100644
index 4ec353876a..0000000000
--- a/src/mscorlib/src/System/Security/Util/URLString.cs
+++ /dev/null
@@ -1,138 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-// URLString
-//
-//
-// Implementation of membership condition for zones
-//
-
-namespace System.Security.Util {
-
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Runtime.CompilerServices;
- using System.Runtime.InteropServices;
- using System.Runtime.Versioning;
- using System.Runtime.Serialization;
- using System.Globalization;
- using System.Text;
- using System.IO;
- using System.Diagnostics.Contracts;
-
- internal static class URLString
- {
- internal static string PreProcessForExtendedPathRemoval(bool checkPathLength, string url, bool isFileUrl)
- {
- bool isUncShare = false;
- return PreProcessForExtendedPathRemoval(checkPathLength: checkPathLength, url: url, isFileUrl: isFileUrl, isUncShare: ref isUncShare);
- }
-
- // Keeping this signature to avoid reflection breaks
- private static string PreProcessForExtendedPathRemoval(string url, bool isFileUrl, ref bool isUncShare)
- {
- return PreProcessForExtendedPathRemoval(checkPathLength: true, url: url, isFileUrl: isFileUrl, isUncShare: ref isUncShare);
- }
-
- private static string PreProcessForExtendedPathRemoval(bool checkPathLength, string url, bool isFileUrl, ref bool isUncShare)
- {
- // This is the modified URL that we will return
- StringBuilder modifiedUrl = new StringBuilder(url);
-
- // ITEM 1 - remove extended path characters.
- {
- // Keep track of where we are in both the comparison and altered strings.
- int curCmpIdx = 0;
- int curModIdx = 0;
-
- // If all the '\' have already been converted to '/', just check for //?/ or //./
- if ((url.Length - curCmpIdx) >= 4 &&
- (String.Compare(url, curCmpIdx, "//?/", 0, 4, StringComparison.OrdinalIgnoreCase) == 0 ||
- String.Compare(url, curCmpIdx, "//./", 0, 4, StringComparison.OrdinalIgnoreCase) == 0))
- {
- modifiedUrl.Remove(curModIdx, 4);
- curCmpIdx += 4;
- }
- else
- {
- if (isFileUrl)
- {
- // We need to handle an indefinite number of leading front slashes for file URLs since we could
- // get something like:
- // file://\\?\
- // file:/\\?\
- // file:\\?\
- // etc...
- while (url[curCmpIdx] == '/')
- {
- curCmpIdx++;
- curModIdx++;
- }
- }
-
- // Remove the extended path characters
- if ((url.Length - curCmpIdx) >= 4 &&
- (String.Compare(url, curCmpIdx, "\\\\?\\", 0, 4, StringComparison.OrdinalIgnoreCase) == 0 ||
- String.Compare(url, curCmpIdx, "\\\\?/", 0, 4, StringComparison.OrdinalIgnoreCase) == 0 ||
- String.Compare(url, curCmpIdx, "\\\\.\\", 0, 4, StringComparison.OrdinalIgnoreCase) == 0 ||
- String.Compare(url, curCmpIdx, "\\\\./", 0, 4, StringComparison.OrdinalIgnoreCase) == 0))
- {
- modifiedUrl.Remove(curModIdx, 4);
- curCmpIdx += 4;
- }
- }
- }
-
- // ITEM 2 - convert all slashes to forward slashes, and strip leading slashes.
- if (isFileUrl)
- {
- int slashCount = 0;
- bool seenFirstBackslash = false;
-
- while (slashCount < modifiedUrl.Length && (modifiedUrl[slashCount] == '/' || modifiedUrl[slashCount] == '\\'))
- {
- // Look for sets of consecutive backslashes. We can't just look for these at the start
- // of the string, since file:// might come first. Instead, once we see the first \, look
- // for a second one following it.
- if (!seenFirstBackslash && modifiedUrl[slashCount] == '\\')
- {
- seenFirstBackslash = true;
- if (slashCount + 1 < modifiedUrl.Length && modifiedUrl[slashCount + 1] == '\\')
- isUncShare = true;
- }
-
- slashCount++;
- }
-
- modifiedUrl.Remove(0, slashCount);
- modifiedUrl.Replace('\\', '/');
- }
-
- // ITEM 3 - If the path is greater than or equal (due to terminating NULL in windows) MAX_PATH, we throw.
- if (checkPathLength)
- {
- // This needs to be a separate method to avoid hitting the static constructor on AppContextSwitches
- CheckPathTooLong(modifiedUrl);
- }
-
- // Create the result string from the StringBuilder
- return modifiedUrl.ToString();
- }
-
- [MethodImpl(MethodImplOptions.NoInlining)]
- private static void CheckPathTooLong(StringBuilder path)
- {
- if (path.Length >= (
-#if PLATFORM_UNIX
- Interop.Sys.MaxPath))
-#else
- PathInternal.MaxLongPath))
-#endif
- {
- throw new PathTooLongException(Environment.GetResourceString("IO.PathTooLong"));
- }
- }
- }
-}