internal static void ValidateRelativePath(string path, string[] reservedDirectoryNames = null) { if (Path.IsPathRooted(path.TrimStart('\\'))) { ImageBuilderUtility.TraceAndThrowValidationError( TraceType, StringResources.ImageBuilderError_AbsolutePathNotAllowed, path); } string remainingPath = path; while (!string.IsNullOrEmpty(remainingPath)) { string pathPart = Path.GetFileName(remainingPath); if (pathPart.Equals(StringConstants.DoubleDot, StringComparison.Ordinal)) { ImageBuilderUtility.TraceAndThrowValidationError( TraceType, StringResources.ImageBuilderError_InvalidRelativePath, path); } remainingPath = FabricPath.GetDirectoryName(remainingPath); if (string.IsNullOrEmpty(remainingPath) && reservedDirectoryNames != null && reservedDirectoryNames.Count() > 0) { foreach (string directoryName in reservedDirectoryNames) { if (string.Compare(directoryName, pathPart, true) == 0) { ImageBuilderUtility.TraceAndThrowReservedDirectoryError( TraceType, StringResources.ImageBuilderError_ReservedDirectoryName, path, pathPart); } } } } }