diff --git a/BuildToolsVersion.txt b/BuildToolsVersion.txt
index eb6df085b9a3..6b4d62514170 100644
--- a/BuildToolsVersion.txt
+++ b/BuildToolsVersion.txt
@@ -1 +1 @@
-2.1.0-rc1-02913-01
+2.1.0-rc1-03006-01
diff --git a/build.proj b/build.proj
index b1a793952c03..95aec47afe06 100644
--- a/build.proj
+++ b/build.proj
@@ -29,9 +29,15 @@
-
+
GenerateConfigurationProperties;
- CreateOrUpdateCurrentVersionFile;
+ CreateOrUpdateCurrentVersionFile
+
+
+
+
+
+ $(PrebuildSetupTargets);
$(TraversalBuildDependsOn);
@@ -42,7 +48,7 @@
-
+
diff --git a/dependencies.props b/dependencies.props
index 43877884e1fa..18e141d2783b 100644
--- a/dependencies.props
+++ b/dependencies.props
@@ -9,15 +9,15 @@
These ref versions are pulled from https://github.com/dotnet/versions.
-->
- 11f431e6bd908d5fdd94c187d2741d9c40a4287d
- 11f431e6bd908d5fdd94c187d2741d9c40a4287d
- 11f431e6bd908d5fdd94c187d2741d9c40a4287d
+ b933a1ea9efa451dc6e06da2920f1c93253160b2
+ b933a1ea9efa451dc6e06da2920f1c93253160b2
+ b933a1ea9efa451dc6e06da2920f1c93253160b2
96dc7805f5df4a70a55783964ce69dcd91bfca80
ccd922b62227c43ed2dac6bcb737321dd2b07be0
ccd922b62227c43ed2dac6bcb737321dd2b07be0
8bd1ec5fac9f0eec34ff6b34b1d878b4359e02dd
c520a2569b40fc53cf51e4f6970c3e7411adc173
- d1e2bedf58a4a66aadda4f5751ecdaf3ad4f62fe
+ 8fc22d261883eb7a1f8765bfe716d806303d0318
@@ -31,15 +31,15 @@
- servicing
- 2.1.0
- 2.1.1-servicing-26606-02
+ servicing-26708-02
+ 2.1.1-servicing-26708-02
+ 2.1.3-servicing-26708-02
beta-26413-00
beta-26413-00
1.0.0-beta-26413-00
- 2.1.1
- 2.1.1
- 2.1.1
+ 2.1.3-servicing-26708-02
+ 2.1.3-servicing-26708-02
+ 2.1.3-servicing-26708-02
4.4.0
@@ -47,7 +47,7 @@
1.0.3-prerelease-00921-01
1.0.0-beta-build0019
2.0.5
- 2.1.0-rc1-02913-01
+ 2.1.0-rc1-03006-01
2.0.0-rc-61101-17
@@ -56,7 +56,7 @@
Microsoft.DotNet.Build.Tasks.Feed
- 2.1.0-rc1-02913-01
+ 2.1.0-rc1-03006-01
diff --git a/dir.targets b/dir.targets
index 2bf1e4371d35..5bc52a85093a 100644
--- a/dir.targets
+++ b/dir.targets
@@ -93,6 +93,15 @@
+
+
+ true
+ true
+
+
diff --git a/pkg/Microsoft.NETCore.Platforms/runtime.compatibility.json b/pkg/Microsoft.NETCore.Platforms/runtime.compatibility.json
index b65524646390..1c537ddfe56a 100644
--- a/pkg/Microsoft.NETCore.Platforms/runtime.compatibility.json
+++ b/pkg/Microsoft.NETCore.Platforms/runtime.compatibility.json
@@ -4641,6 +4641,33 @@
"any",
"base"
],
+ "tizen-x86": [
+ "tizen-x86",
+ "tizen",
+ "linux-x86",
+ "linux",
+ "unix-x86",
+ "unix",
+ "any",
+ "base"
+ ],
+ "tizen-x86-corert": [
+ "tizen-x86-corert",
+ "tizen-corert",
+ "tizen-x86",
+ "linux-x86-corert",
+ "tizen",
+ "linux-corert",
+ "linux-x86",
+ "unix-x86-corert",
+ "linux",
+ "unix-corert",
+ "unix-x86",
+ "unix",
+ "corert",
+ "any",
+ "base"
+ ],
"tizen.4.0.0": [
"tizen.4.0.0",
"tizen",
@@ -4695,6 +4722,141 @@
"any",
"base"
],
+ "tizen.4.0.0-x86": [
+ "tizen.4.0.0-x86",
+ "tizen.4.0.0",
+ "tizen-x86",
+ "tizen",
+ "linux-x86",
+ "linux",
+ "unix-x86",
+ "unix",
+ "any",
+ "base"
+ ],
+ "tizen.4.0.0-x86-corert": [
+ "tizen.4.0.0-x86-corert",
+ "tizen.4.0.0-corert",
+ "tizen.4.0.0-x86",
+ "tizen.4.0.0",
+ "tizen-x86-corert",
+ "tizen-corert",
+ "tizen-x86",
+ "tizen",
+ "linux-x86-corert",
+ "linux-corert",
+ "linux-x86",
+ "linux",
+ "unix-x86-corert",
+ "unix-corert",
+ "unix-x86",
+ "unix",
+ "corert",
+ "any",
+ "base"
+ ],
+ "tizen.5.0.0": [
+ "tizen.5.0.0",
+ "tizen.4.0.0",
+ "tizen",
+ "linux",
+ "unix",
+ "any",
+ "base"
+ ],
+ "tizen.5.0.0-armel": [
+ "tizen.5.0.0-armel",
+ "tizen.5.0.0",
+ "tizen.4.0.0-armel",
+ "tizen.4.0.0",
+ "tizen-armel",
+ "tizen",
+ "linux-armel",
+ "linux",
+ "unix-armel",
+ "unix",
+ "any",
+ "base"
+ ],
+ "tizen.5.0.0-armel-corert": [
+ "tizen.5.0.0-armel-corert",
+ "tizen.5.0.0-corert",
+ "tizen.5.0.0-armel",
+ "tizen.5.0.0",
+ "tizen.4.0.0-armel-corert",
+ "tizen.4.0.0-corert",
+ "tizen.4.0.0-armel",
+ "tizen.4.0.0",
+ "tizen-armel-corert",
+ "tizen-corert",
+ "tizen-armel",
+ "tizen",
+ "linux-armel-corert",
+ "linux-corert",
+ "linux-armel",
+ "linux",
+ "unix-armel-corert",
+ "unix-corert",
+ "unix-armel",
+ "unix",
+ "corert",
+ "any",
+ "base"
+ ],
+ "tizen.5.0.0-corert": [
+ "tizen.5.0.0-corert",
+ "tizen.5.0.0",
+ "tizen.4.0.0-corert",
+ "tizen.4.0.0",
+ "tizen-corert",
+ "tizen",
+ "linux-corert",
+ "linux",
+ "unix-corert",
+ "unix",
+ "corert",
+ "any",
+ "base"
+ ],
+ "tizen.5.0.0-x86": [
+ "tizen.5.0.0-x86",
+ "tizen.5.0.0",
+ "tizen.4.0.0-x86",
+ "tizen.4.0.0",
+ "tizen-x86",
+ "tizen",
+ "linux-x86",
+ "linux",
+ "unix-x86",
+ "unix",
+ "any",
+ "base"
+ ],
+ "tizen.5.0.0-x86-corert": [
+ "tizen.5.0.0-x86-corert",
+ "tizen.5.0.0-corert",
+ "tizen.5.0.0-x86",
+ "tizen.5.0.0",
+ "tizen.4.0.0-x86-corert",
+ "tizen.4.0.0-corert",
+ "tizen.4.0.0-x86",
+ "tizen.4.0.0",
+ "tizen-x86-corert",
+ "tizen-corert",
+ "tizen-x86",
+ "tizen",
+ "linux-x86-corert",
+ "linux-corert",
+ "linux-x86",
+ "linux",
+ "unix-x86-corert",
+ "unix-corert",
+ "unix-x86",
+ "unix",
+ "corert",
+ "any",
+ "base"
+ ],
"ubuntu": [
"ubuntu",
"debian",
diff --git a/pkg/Microsoft.NETCore.Platforms/runtime.json b/pkg/Microsoft.NETCore.Platforms/runtime.json
index 30f99f8e58e1..81cf1c7d0e0c 100644
--- a/pkg/Microsoft.NETCore.Platforms/runtime.json
+++ b/pkg/Microsoft.NETCore.Platforms/runtime.json
@@ -1817,6 +1817,19 @@
"linux-corert"
]
},
+ "tizen-x86": {
+ "#import": [
+ "tizen",
+ "linux-x86"
+ ]
+ },
+ "tizen-x86-corert": {
+ "#import": [
+ "tizen-corert",
+ "tizen-x86",
+ "linux-x86-corert"
+ ]
+ },
"tizen.4.0.0": {
"#import": [
"tizen"
@@ -1842,6 +1855,59 @@
"tizen-corert"
]
},
+ "tizen.4.0.0-x86": {
+ "#import": [
+ "tizen.4.0.0",
+ "tizen-x86"
+ ]
+ },
+ "tizen.4.0.0-x86-corert": {
+ "#import": [
+ "tizen.4.0.0-corert",
+ "tizen.4.0.0-x86",
+ "tizen.4.0.0",
+ "tizen-x86-corert"
+ ]
+ },
+ "tizen.5.0.0": {
+ "#import": [
+ "tizen.4.0.0"
+ ]
+ },
+ "tizen.5.0.0-armel": {
+ "#import": [
+ "tizen.5.0.0",
+ "tizen.4.0.0-armel"
+ ]
+ },
+ "tizen.5.0.0-armel-corert": {
+ "#import": [
+ "tizen.5.0.0-corert",
+ "tizen.5.0.0-armel",
+ "tizen.5.0.0",
+ "tizen.4.0.0-armel-corert"
+ ]
+ },
+ "tizen.5.0.0-corert": {
+ "#import": [
+ "tizen.5.0.0",
+ "tizen.4.0.0-corert"
+ ]
+ },
+ "tizen.5.0.0-x86": {
+ "#import": [
+ "tizen.5.0.0",
+ "tizen.4.0.0-x86"
+ ]
+ },
+ "tizen.5.0.0-x86-corert": {
+ "#import": [
+ "tizen.5.0.0-corert",
+ "tizen.5.0.0-x86",
+ "tizen.5.0.0",
+ "tizen.4.0.0-x86-corert"
+ ]
+ },
"ubuntu": {
"#import": [
"debian"
diff --git a/pkg/Microsoft.NETCore.Platforms/runtimeGroups.props b/pkg/Microsoft.NETCore.Platforms/runtimeGroups.props
index c8898ed0bb49..6cee9f7aa10b 100644
--- a/pkg/Microsoft.NETCore.Platforms/runtimeGroups.props
+++ b/pkg/Microsoft.NETCore.Platforms/runtimeGroups.props
@@ -111,8 +111,8 @@
linux
- armel
- 4.0.0
+ x86;armel
+ 4.0.0;5.0.0
diff --git a/pkg/Microsoft.Private.CoreFx.NETCoreApp/netcoreapp.rids.props b/pkg/Microsoft.Private.CoreFx.NETCoreApp/netcoreapp.rids.props
index 06bdbc769641..520c72a119ef 100644
--- a/pkg/Microsoft.Private.CoreFx.NETCoreApp/netcoreapp.rids.props
+++ b/pkg/Microsoft.Private.CoreFx.NETCoreApp/netcoreapp.rids.props
@@ -28,5 +28,8 @@
armel
+
+ armel
+
diff --git a/src/Native/Unix/System.Security.Cryptography.Native.Apple/CMakeLists.txt b/src/Native/Unix/System.Security.Cryptography.Native.Apple/CMakeLists.txt
index 0ed02c6e9dfe..5049a5f4b7dc 100644
--- a/src/Native/Unix/System.Security.Cryptography.Native.Apple/CMakeLists.txt
+++ b/src/Native/Unix/System.Security.Cryptography.Native.Apple/CMakeLists.txt
@@ -26,6 +26,9 @@ set(NATIVECRYPTO_SOURCES
pal_x509chain.cpp
)
+# Temporary workaround for dotnet/corefx issue #30599
+add_compile_options(-Wno-deprecated-declarations)
+
add_library(System.Security.Cryptography.Native.Apple
SHARED
${NATIVECRYPTO_SOURCES}
diff --git a/src/Native/Unix/System.Security.Cryptography.Native.Apple/pal_x509chain.cpp b/src/Native/Unix/System.Security.Cryptography.Native.Apple/pal_x509chain.cpp
index b84540339368..2d8cae14cc4a 100644
--- a/src/Native/Unix/System.Security.Cryptography.Native.Apple/pal_x509chain.cpp
+++ b/src/Native/Unix/System.Security.Cryptography.Native.Apple/pal_x509chain.cpp
@@ -186,7 +186,7 @@ static void MergeStatusCodes(CFTypeRef key, CFTypeRef value, void* context)
// It doesn't represent a new error code, and we're still getting the old ones, so
// just ignore it for now.
}
- else if (CFEqual(keyString, CFSTR("NonEmptySubject")))
+ else if (CFEqual(keyString, CFSTR("NonEmptySubject")) || CFEqual(keyString, CFSTR("GrayListedKey")))
{
// Not a "problem" that we report.
}
diff --git a/src/System.Console/src/System/ConsolePal.Unix.cs b/src/System.Console/src/System/ConsolePal.Unix.cs
index 326a14e2b098..855aa55519ac 100644
--- a/src/System.Console/src/System/ConsolePal.Unix.cs
+++ b/src/System.Console/src/System/ConsolePal.Unix.cs
@@ -332,6 +332,13 @@ public static int CursorTop
}
}
+ ///
+ /// Tracks whether we've ever successfully received a response to a cursor position request (CPR).
+ /// If we have, then we can be more aggressive about expecting a response to subsequent requests,
+ /// e.g. using a longer timeout.
+ ///
+ private static bool s_everReceivedCursorPositionResponse;
+
/// Gets the current cursor position. This involves both writing to stdout and reading stdin.
private static unsafe void GetCursorPosition(out int left, out int top)
{
@@ -358,7 +365,15 @@ private static unsafe void GetCursorPosition(out int left, out int top)
// one thread's get_CursorLeft/Top from providing input to the other's Console.Read*.
lock (StdInReader)
{
- Interop.Sys.InitializeConsoleBeforeRead(minChars: 0, decisecondsTimeout: 10);
+ // Because the CPR request/response protocol involves blocking until we get a certain
+ // response from the terminal, we want to avoid doing so if we don't know the terminal
+ // will definitely response. As such, we start with minChars == 0, which causes the
+ // terminal's read timer to start immediately. Once we've received a response for
+ // a request such that we know the terminal supports the protocol, we then specify
+ // minChars == 1. With that, the timer won't start until the first character is
+ // received. This makes the mechanism more reliable when there are high latencies
+ // involved in reading/writing, such as when accessing a remote system.
+ Interop.Sys.InitializeConsoleBeforeRead(minChars: (byte)(s_everReceivedCursorPositionResponse ? 1 : 0), decisecondsTimeout: 10);
try
{
// Write out the cursor position report request.
@@ -425,6 +440,9 @@ private static unsafe void GetCursorPosition(out int left, out int top)
// else back into the StdInReader.
ReadRowOrCol(bracketPos, semiPos, r, readBytes, ref top);
ReadRowOrCol(semiPos, rPos, r, readBytes, ref left);
+
+ // Mark that we've successfully received a CPR response at least once.
+ s_everReceivedCursorPositionResponse = true;
}
finally
{
diff --git a/src/System.Diagnostics.DiagnosticSource/src/System/Diagnostics/HttpHandlerDiagnosticListener.cs b/src/System.Diagnostics.DiagnosticSource/src/System/Diagnostics/HttpHandlerDiagnosticListener.cs
index ec8feba0bcb5..bbfb87c05521 100644
--- a/src/System.Diagnostics.DiagnosticSource/src/System/Diagnostics/HttpHandlerDiagnosticListener.cs
+++ b/src/System.Diagnostics.DiagnosticSource/src/System/Diagnostics/HttpHandlerDiagnosticListener.cs
@@ -653,11 +653,12 @@ private bool IsLastResponse(HttpWebRequest request, HttpStatusCode statusCode)
{
if (request.AllowAutoRedirect)
{
- if (statusCode == HttpStatusCode.Ambiguous || // 300
- statusCode == HttpStatusCode.Moved || // 301
- statusCode == HttpStatusCode.Redirect || // 302
- statusCode == HttpStatusCode.RedirectMethod || // 303
- statusCode == HttpStatusCode.RedirectKeepVerb) // 307
+ if (statusCode == HttpStatusCode.Ambiguous || // 300
+ statusCode == HttpStatusCode.Moved || // 301
+ statusCode == HttpStatusCode.Redirect || // 302
+ statusCode == HttpStatusCode.RedirectMethod || // 303
+ statusCode == HttpStatusCode.RedirectKeepVerb || // 307
+ (int)statusCode == 308) // 308 Permanent Redirect is not in netfx yet, and so has to be specified this way.
{
return s_autoRedirectsAccessor(request) >= request.MaximumAutomaticRedirections;
}
diff --git a/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/RedirectHandler.cs b/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/RedirectHandler.cs
index ede57cf9ca56..138bac21db78 100644
--- a/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/RedirectHandler.cs
+++ b/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/RedirectHandler.cs
@@ -81,6 +81,7 @@ private Uri GetUriForRedirect(Uri requestUri, HttpResponseMessage response)
case HttpStatusCode.SeeOther:
case HttpStatusCode.TemporaryRedirect:
case HttpStatusCode.MultipleChoices:
+ case HttpStatusCode.PermanentRedirect:
break;
default:
diff --git a/src/System.Net.Http/src/uap/System/Net/HttpHandlerToFilter.cs b/src/System.Net.Http/src/uap/System/Net/HttpHandlerToFilter.cs
index 53e7b9b2bf20..693955680df3 100644
--- a/src/System.Net.Http/src/uap/System/Net/HttpHandlerToFilter.cs
+++ b/src/System.Net.Http/src/uap/System/Net/HttpHandlerToFilter.cs
@@ -116,7 +116,8 @@ protected internal override async Task SendAsync(HttpReques
response.StatusCode != HttpStatusCode.MovedPermanently &&
response.StatusCode != HttpStatusCode.Redirect &&
response.StatusCode != HttpStatusCode.RedirectMethod &&
- response.StatusCode != HttpStatusCode.RedirectKeepVerb)
+ response.StatusCode != HttpStatusCode.RedirectKeepVerb &&
+ response.StatusCode != HttpStatusCode.PermanentRedirect)
{
break;
}
@@ -151,10 +152,11 @@ protected internal override async Task SendAsync(HttpReques
}
// Follow HTTP RFC 7231 rules. In general, 3xx responses
- // except for 307 will keep verb except POST becomes GET.
- // 307 responses have all verbs stay the same.
+ // except for 307 and 308 will keep verb except POST becomes GET.
+ // 307 and 308 responses have all verbs stay the same.
// https://tools.ietf.org/html/rfc7231#section-6.4
if (response.StatusCode != HttpStatusCode.RedirectKeepVerb &&
+ response.StatusCode != HttpStatusCode.PermanentRedirect &&
requestHttpMethod == HttpMethod.Post)
{
requestHttpMethod = HttpMethod.Get;
diff --git a/src/System.Net.Http/tests/FunctionalTests/HttpClientHandlerTest.cs b/src/System.Net.Http/tests/FunctionalTests/HttpClientHandlerTest.cs
index 2d7a9c55b721..14960a11ea29 100644
--- a/src/System.Net.Http/tests/FunctionalTests/HttpClientHandlerTest.cs
+++ b/src/System.Net.Http/tests/FunctionalTests/HttpClientHandlerTest.cs
@@ -62,7 +62,8 @@ public abstract class HttpClientHandlerTest : HttpClientTestBase
new object[] { 301 },
new object[] { 302 },
new object[] { 303 },
- new object[] { 307 }
+ new object[] { 307 },
+ new object[] { 308 }
};
public static readonly object[][] RedirectStatusCodesOldMethodsNewMethods = {
@@ -85,6 +86,10 @@ public abstract class HttpClientHandlerTest : HttpClientTestBase
new object[] { 307, "GET", "GET" },
new object[] { 307, "POST", "POST" },
new object[] { 307, "HEAD", "HEAD" },
+
+ new object[] { 308, "GET", "GET" },
+ new object[] { 308, "POST", "POST" },
+ new object[] { 308, "HEAD", "HEAD" },
};
// Standard HTTP methods defined in RFC7231: http://tools.ietf.org/html/rfc7231#section-4.3
@@ -245,6 +250,12 @@ public async Task UseDefaultCredentials_SetToFalseAndServerNeedsAuth_StatusCodeU
[Theory, MemberData(nameof(RedirectStatusCodes))]
public async Task DefaultHeaders_SetCredentials_ClearedOnRedirect(int statusCode)
{
+ if (statusCode == 308 && (PlatformDetection.IsFullFramework || IsWinHttpHandler && PlatformDetection.WindowsVersion < 10))
+ {
+ // 308 redirects are not supported on old versions of WinHttp, or on .NET Framework.
+ return;
+ }
+
HttpClientHandler handler = CreateHttpClientHandler();
using (var client = new HttpClient(handler))
{
@@ -721,6 +732,12 @@ await LoopbackServer.CreateServerAsync(async (server, url) =>
[Theory, MemberData(nameof(RedirectStatusCodes))]
public async Task GetAsync_AllowAutoRedirectFalse_RedirectFromHttpToHttp_StatusCodeRedirect(int statusCode)
{
+ if (statusCode == 308 && (PlatformDetection.IsFullFramework || IsWinHttpHandler && PlatformDetection.WindowsVersion < 10))
+ {
+ // 308 redirects are not supported on old versions of WinHttp, or on .NET Framework.
+ return;
+ }
+
HttpClientHandler handler = CreateHttpClientHandler();
handler.AllowAutoRedirect = false;
using (var client = new HttpClient(handler))
@@ -750,6 +767,12 @@ public async Task AllowAutoRedirect_True_ValidateNewMethodUsedOnRedirection(
newMethod = "POST";
}
+ if (statusCode == 308 && (PlatformDetection.IsFullFramework || IsWinHttpHandler && PlatformDetection.WindowsVersion < 10))
+ {
+ // 308 redirects are not supported on old versions of WinHttp, or on .NET Framework.
+ return;
+ }
+
HttpClientHandler handler = CreateHttpClientHandler();
using (var client = new HttpClient(handler))
{
@@ -868,6 +891,12 @@ await LoopbackServer.CreateServerAsync(async (redirServer, redirUrl) =>
[Theory, MemberData(nameof(RedirectStatusCodes))]
public async Task GetAsync_AllowAutoRedirectTrue_RedirectFromHttpToHttp_StatusCodeOK(int statusCode)
{
+ if (statusCode == 308 && (PlatformDetection.IsFullFramework || IsWinHttpHandler && PlatformDetection.WindowsVersion < 10))
+ {
+ // 308 redirects are not supported on old versions of WinHttp, or on .NET Framework.
+ return;
+ }
+
HttpClientHandler handler = CreateHttpClientHandler();
handler.AllowAutoRedirect = true;
using (var client = new HttpClient(handler))
@@ -1225,6 +1254,12 @@ public async Task HttpClientHandler_CredentialIsNotCredentialCacheAfterRedirect_
[Theory, MemberData(nameof(RedirectStatusCodes))]
public async Task GetAsync_CredentialIsCredentialCacheUriRedirect_StatusCodeOK(int statusCode)
{
+ if (statusCode == 308 && (PlatformDetection.IsFullFramework || IsWinHttpHandler && PlatformDetection.WindowsVersion < 10))
+ {
+ // 308 redirects are not supported on old versions of WinHttp, or on .NET Framework.
+ return;
+ }
+
Uri uri = Configuration.Http.BasicAuthUriForCreds(secure: false, userName: Username, password: Password);
Uri redirectUri = Configuration.Http.RedirectUriForCreds(
secure: false,
diff --git a/src/System.Net.Sockets/src/System/Net/Sockets/SocketPal.Unix.cs b/src/System.Net.Sockets/src/System/Net/Sockets/SocketPal.Unix.cs
index da0bab6b1bc6..2f1f97c55be3 100644
--- a/src/System.Net.Sockets/src/System/Net/Sockets/SocketPal.Unix.cs
+++ b/src/System.Net.Sockets/src/System/Net/Sockets/SocketPal.Unix.cs
@@ -380,14 +380,15 @@ private static unsafe int ReceiveMessageFrom(SafeCloseSocket socket, SocketFlags
receivedFlags = messageHeader.Flags;
sockAddrLen = messageHeader.SocketAddressLen;
- ipPacketInformation = GetIPPacketInformation(&messageHeader, isIPv4, isIPv6);
}
if (errno != Interop.Error.SUCCESS)
{
+ ipPacketInformation = default(IPPacketInformation);
return -1;
}
+ ipPacketInformation = GetIPPacketInformation(&messageHeader, isIPv4, isIPv6);
socketAddressLen = sockAddrLen;
return checked((int)received);
}
@@ -442,15 +443,16 @@ private static unsafe int ReceiveMessageFrom(
receivedFlags = messageHeader.Flags;
int sockAddrLen = messageHeader.SocketAddressLen;
- ipPacketInformation = GetIPPacketInformation(&messageHeader, isIPv4, isIPv6);
if (errno == Interop.Error.SUCCESS)
{
+ ipPacketInformation = GetIPPacketInformation(&messageHeader, isIPv4, isIPv6);
socketAddressLen = sockAddrLen;
return checked((int)received);
}
else
{
+ ipPacketInformation = default(IPPacketInformation);
return -1;
}
}
diff --git a/src/System.Runtime.Extensions/tests/System/IO/Path.GetRelativePath.cs b/src/System.Runtime.Extensions/tests/System/IO/Path.GetRelativePath.cs
index 36a03d6bfc9f..3f48bfd9ccb5 100644
--- a/src/System.Runtime.Extensions/tests/System/IO/Path.GetRelativePath.cs
+++ b/src/System.Runtime.Extensions/tests/System/IO/Path.GetRelativePath.cs
@@ -17,12 +17,26 @@ public static class GetRelativePathTests
[InlineData(@"C:\", @"C:\b", @"b")]
[InlineData(@"C:\a", @"C:\b", @"..\b")]
[InlineData(@"C:\a", @"C:\b\", @"..\b\")]
+ [InlineData(@"C:\a\b", @"C:\a", @"..")]
+ [InlineData(@"C:\a\b", @"C:\a\", @"..")]
+ [InlineData(@"C:\a\b\", @"C:\a", @"..")]
+ [InlineData(@"C:\a\b\", @"C:\a\", @"..")]
+ [InlineData(@"C:\a\b\c", @"C:\a\b", @"..")]
+ [InlineData(@"C:\a\b\c", @"C:\a\b\", @"..")]
+ [InlineData(@"C:\a\b\c", @"C:\a", @"..\..")]
+ [InlineData(@"C:\a\b\c", @"C:\a\", @"..\..")]
+ [InlineData(@"C:\a\b\c\", @"C:\a\b", @"..")]
+ [InlineData(@"C:\a\b\c\", @"C:\a\b\", @"..")]
+ [InlineData(@"C:\a\b\c\", @"C:\a", @"..\..")]
+ [InlineData(@"C:\a\b\c\", @"C:\a\", @"..\..")]
[InlineData(@"C:\a\", @"C:\b", @"..\b")]
[InlineData(@"C:\a", @"C:\a\b", @"b")]
[InlineData(@"C:\a", @"C:\A\b", @"b")]
[InlineData(@"C:\a", @"C:\b\c", @"..\b\c")]
[InlineData(@"C:\a\", @"C:\a\b", @"b")]
+ [InlineData(@"C:\", @"D:\", @"D:\")]
[InlineData(@"C:\", @"D:\b", @"D:\b")]
+ [InlineData(@"C:\", @"D:\b\", @"D:\b\")]
[InlineData(@"C:\a", @"D:\b", @"D:\b")]
[InlineData(@"C:\a\", @"D:\b", @"D:\b")]
[InlineData(@"C:\ab", @"C:\a", @"..\a")]
diff --git a/src/System.Security.Principal.Windows/tests/WindowsIdentityTests.cs b/src/System.Security.Principal.Windows/tests/WindowsIdentityTests.cs
index f107533511c8..4d696137eb7f 100644
--- a/src/System.Security.Principal.Windows/tests/WindowsIdentityTests.cs
+++ b/src/System.Security.Principal.Windows/tests/WindowsIdentityTests.cs
@@ -129,12 +129,16 @@ public static void RunImpersonatedTest_InvalidHandle()
{
using (var mutex = new Mutex())
{
- Assert.Throws(() =>
+ SafeAccessTokenHandle handle = null;
+ try
{
- WindowsIdentity.RunImpersonated(
- new SafeAccessTokenHandle(mutex.SafeWaitHandle.DangerousGetHandle()),
- () => { });
- });
+ handle = new SafeAccessTokenHandle(mutex.SafeWaitHandle.DangerousGetHandle());
+ Assert.Throws(() => WindowsIdentity.RunImpersonated(handle, () => { }));
+ }
+ finally
+ {
+ handle?.SetHandleAsInvalid();
+ }
}
}
diff --git a/tools-local/ILAsmVersion.txt b/tools-local/ILAsmVersion.txt
index ec43494dd155..09640f58db66 100644
--- a/tools-local/ILAsmVersion.txt
+++ b/tools-local/ILAsmVersion.txt
@@ -1 +1 @@
-2.1.1-servicing-26606-02
\ No newline at end of file
+2.1.3-servicing-26708-02
\ No newline at end of file