diff --git a/NuGet.config b/NuGet.config
index 66f5d2f4634d..cabc4d8508a0 100644
--- a/NuGet.config
+++ b/NuGet.config
@@ -4,8 +4,10 @@
+
+
@@ -28,8 +30,10 @@
+
+
diff --git a/eng/Baseline.Designer.props b/eng/Baseline.Designer.props
index c028a1e628ea..09d17a9f1d8d 100644
--- a/eng/Baseline.Designer.props
+++ b/eng/Baseline.Designer.props
@@ -2,117 +2,117 @@
$(MSBuildAllProjects);$(MSBuildThisFileFullPath)
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
-
+
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
-
-
-
+
+
+
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
@@ -120,279 +120,279 @@
- 9.0.9
+ 9.0.10
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
- 9.0.9
+ 9.0.10
-
-
-
+
+
+
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
-
+
- 9.0.9
+ 9.0.10
-
-
+
+
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
-
-
+
+
- 9.0.9
+ 9.0.10
-
+
- 9.0.9
+ 9.0.10
-
+
- 9.0.9
+ 9.0.10
-
+
- 9.0.9
+ 9.0.10
-
-
+
+
- 9.0.9
+ 9.0.10
-
-
-
-
-
+
+
+
+
+
- 9.0.9
+ 9.0.10
-
-
-
-
-
+
+
+
+
+
- 9.0.9
+ 9.0.10
-
-
+
+
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
-
-
-
-
-
-
+
+
+
+
+
+
- 9.0.9
+ 9.0.10
-
-
-
+
+
+
- 9.0.9
+ 9.0.10
-
-
-
+
+
+
-
+
-
-
-
+
+
+
-
-
-
+
+
+
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
-
+
-
+
-
+
- 9.0.9
+ 9.0.10
-
-
-
-
-
-
+
+
+
+
+
+
-
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
+
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
-
-
+
+
- 9.0.9
+ 9.0.10
-
-
+
+
-
-
+
+
-
-
+
+
- 9.0.9
+ 9.0.10
-
+
-
+
-
+
- 9.0.9
+ 9.0.10
-
+
- 9.0.9
+ 9.0.10
@@ -401,83 +401,83 @@
- 9.0.9
+ 9.0.10
-
-
+
+
- 9.0.9
+ 9.0.10
-
+
- 9.0.9
+ 9.0.10
-
-
-
+
+
+
-
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
- 9.0.9
+ 9.0.10
-
-
+
+
-
+
-
-
+
+
- 9.0.9
+ 9.0.10
-
-
+
+
- 9.0.9
+ 9.0.10
-
-
+
+
- 9.0.9
+ 9.0.10
@@ -493,510 +493,510 @@
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
-
+
- 9.0.9
+ 9.0.10
-
+
- 9.0.9
+ 9.0.10
-
+
- 9.0.9
+ 9.0.10
-
-
-
+
+
+
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
-
-
+
+
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
-
-
+
+
-
-
+
+
-
-
+
+
- 9.0.9
+ 9.0.10
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
- 9.0.9
+ 9.0.10
-
-
+
+
-
+
-
-
+
+
-
-
-
+
+
+
- 9.0.9
+ 9.0.10
-
+
-
+
-
+
- 9.0.9
+ 9.0.10
-
+
-
+
-
+
- 9.0.9
+ 9.0.10
-
+
-
+
-
+
- 9.0.9
+ 9.0.10
-
-
-
-
+
+
+
+
- 9.0.9
+ 9.0.10
-
+
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
-
+
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
-
+
- 9.0.9
+ 9.0.10
-
+
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
-
-
+
+
-
-
+
+
-
-
+
+
- 9.0.9
+ 9.0.10
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
- 9.0.9
+ 9.0.10
-
-
+
+
-
-
+
+
-
-
+
+
- 9.0.9
+ 9.0.10
-
-
-
-
-
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
+
+
+
+
+
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
-
-
-
+
+
+
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
-
+
-
+
- 9.0.9
+ 9.0.10
-
+
- 9.0.9
+ 9.0.10
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
- 9.0.9
+ 9.0.10
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
- 9.0.9
+ 9.0.10
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
- 9.0.9
+ 9.0.10
- 9.0.9
+ 9.0.10
-
+
- 9.0.9
+ 9.0.10
-
+
\ No newline at end of file
diff --git a/eng/Baseline.xml b/eng/Baseline.xml
index 3ebda983fc82..04d7c413b07a 100644
--- a/eng/Baseline.xml
+++ b/eng/Baseline.xml
@@ -4,110 +4,110 @@ This file contains a list of all the packages and their versions which were rele
Update this list when preparing for a new patch.
-->
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml
index 2a72e30f1695..1d68938b6adf 100644
--- a/eng/Version.Details.xml
+++ b/eng/Version.Details.xml
@@ -9,325 +9,325 @@
-->
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-efcore
- 78871c83aac6c38eb5476c2f34aae98ef65314f5
+ 5452ff90a79084afd23df379388ae8bca24284f3
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-efcore
- 78871c83aac6c38eb5476c2f34aae98ef65314f5
+ 5452ff90a79084afd23df379388ae8bca24284f3
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-efcore
- 78871c83aac6c38eb5476c2f34aae98ef65314f5
+ 5452ff90a79084afd23df379388ae8bca24284f3
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-efcore
- 78871c83aac6c38eb5476c2f34aae98ef65314f5
+ 5452ff90a79084afd23df379388ae8bca24284f3
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-efcore
- 78871c83aac6c38eb5476c2f34aae98ef65314f5
+ 5452ff90a79084afd23df379388ae8bca24284f3
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-efcore
- 78871c83aac6c38eb5476c2f34aae98ef65314f5
+ 5452ff90a79084afd23df379388ae8bca24284f3
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-efcore
- 78871c83aac6c38eb5476c2f34aae98ef65314f5
+ 5452ff90a79084afd23df379388ae8bca24284f3
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-efcore
- 78871c83aac6c38eb5476c2f34aae98ef65314f5
+ 5452ff90a79084afd23df379388ae8bca24284f3
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
https://github.com/dotnet/xdt
@@ -367,9 +367,9 @@
bc1c3011064a493b0ca527df6fb7215e2e5cfa96
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
@@ -380,9 +380,9 @@
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 893c2ebbd49952ca49e93298148af2d95a61a0a4
+ e1f19886fe3354963a4a790c896b3f99689fd7a5
https://github.com/dotnet/winforms
diff --git a/eng/Versions.props b/eng/Versions.props
index ab2d07e47259..b0a16b5b99c5 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -11,7 +11,7 @@
11
- false
+ true
8.0.1
*-*
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9-servicing.25419.16
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9-servicing.25419.16
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9-servicing.25419.16
- 9.0.9-servicing.25419.16
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10-servicing.25475.15
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10-servicing.25475.15
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10-servicing.25475.15
+ 9.0.10-servicing.25475.15
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
- 9.0.9-servicing.25419.16
- 9.0.9
+ 9.0.10-servicing.25475.15
+ 9.0.10
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
9.10.0-preview.1.25475.1
9.10.0-preview.1.25475.1
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
- 9.0.9
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
+ 9.0.10
4.11.0-3.24554.2
4.11.0-3.24554.2
diff --git a/global.json b/global.json
index f6c5aeab7a5c..665441c65a4f 100644
--- a/global.json
+++ b/global.json
@@ -1,9 +1,9 @@
{
"sdk": {
- "version": "9.0.110"
+ "version": "9.0.111"
},
"tools": {
- "dotnet": "9.0.110",
+ "dotnet": "9.0.111",
"runtimes": {
"dotnet/x86": [
"$(MicrosoftNETCoreBrowserDebugHostTransportVersion)"
diff --git a/src/Servers/Kestrel/Core/src/CoreStrings.resx b/src/Servers/Kestrel/Core/src/CoreStrings.resx
index 55f5bde688f0..c6fb576b6011 100644
--- a/src/Servers/Kestrel/Core/src/CoreStrings.resx
+++ b/src/Servers/Kestrel/Core/src/CoreStrings.resx
@@ -740,4 +740,7 @@ For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?l
The client sent a {frameType} frame to a control stream that was too large.
+
+ Bad chunk extension.
+
\ No newline at end of file
diff --git a/src/Servers/Kestrel/Core/src/Internal/Http/Http1ChunkedEncodingMessageBody.cs b/src/Servers/Kestrel/Core/src/Internal/Http/Http1ChunkedEncodingMessageBody.cs
index 5e426ed25721..6f2b39a205b7 100644
--- a/src/Servers/Kestrel/Core/src/Internal/Http/Http1ChunkedEncodingMessageBody.cs
+++ b/src/Servers/Kestrel/Core/src/Internal/Http/Http1ChunkedEncodingMessageBody.cs
@@ -16,6 +16,7 @@ internal sealed class Http1ChunkedEncodingMessageBody : Http1MessageBody
{
// byte consts don't have a data type annotation so we pre-cast it
private const byte ByteCR = (byte)'\r';
+ private const byte ByteLF = (byte)'\n';
// "7FFFFFFF\r\n" is the largest chunk size that could be returned as an int.
private const int MaxChunkPrefixBytes = 10;
@@ -27,6 +28,8 @@ internal sealed class Http1ChunkedEncodingMessageBody : Http1MessageBody
private readonly Pipe _requestBodyPipe;
private ReadResult _readResult;
+ private static readonly bool InsecureChunkedParsing = AppContext.TryGetSwitch("Microsoft.AspNetCore.Server.Kestrel.EnableInsecureChunkedRequestParsing", out var value) && value;
+
public Http1ChunkedEncodingMessageBody(Http1Connection context, bool keepAlive)
: base(context, keepAlive)
{
@@ -345,15 +348,31 @@ private void ParseChunkedPrefix(in ReadOnlySequence buffer, out SequencePo
KestrelBadHttpRequestException.Throw(RequestRejectionReason.BadChunkSizeData);
}
+ // https://www.rfc-editor.org/rfc/rfc9112#section-7.1
+ // chunk = chunk-size [ chunk-ext ] CRLF
+ // chunk-data CRLF
+
+ // https://www.rfc-editor.org/rfc/rfc9112#section-7.1.1
+ // chunk-ext = *( BWS ";" BWS chunk-ext-name
+ // [BWS "=" BWS chunk-ext-val] )
+ // chunk-ext-name = token
+ // chunk-ext-val = token / quoted-string
private void ParseExtension(ReadOnlySequence buffer, out SequencePosition consumed, out SequencePosition examined)
{
- // Chunk-extensions not currently parsed
- // Just drain the data
- examined = buffer.Start;
+ // Chunk-extensions parsed for \r\n and throws for unpaired \r or \n.
do
{
- SequencePosition? extensionCursorPosition = buffer.PositionOf(ByteCR);
+ SequencePosition? extensionCursorPosition;
+ if (InsecureChunkedParsing)
+ {
+ extensionCursorPosition = buffer.PositionOf(ByteCR);
+ }
+ else
+ {
+ extensionCursorPosition = buffer.PositionOfAny(ByteCR, ByteLF);
+ }
+
if (extensionCursorPosition == null)
{
// End marker not found yet
@@ -361,9 +380,10 @@ private void ParseExtension(ReadOnlySequence buffer, out SequencePosition
examined = buffer.End;
AddAndCheckObservedBytes(buffer.Length);
return;
- };
+ }
var extensionCursor = extensionCursorPosition.Value;
+
var charsToByteCRExclusive = buffer.Slice(0, extensionCursor).Length;
var suffixBuffer = buffer.Slice(extensionCursor);
@@ -378,7 +398,9 @@ private void ParseExtension(ReadOnlySequence buffer, out SequencePosition
suffixBuffer = suffixBuffer.Slice(0, 2);
var suffixSpan = suffixBuffer.ToSpan();
- if (suffixSpan[1] == '\n')
+ if (InsecureChunkedParsing
+ ? (suffixSpan[1] == ByteLF)
+ : (suffixSpan[0] == ByteCR && suffixSpan[1] == ByteLF))
{
// We consumed the \r\n at the end of the extension, so switch modes.
_mode = _inputLength > 0 ? Mode.Data : Mode.Trailer;
@@ -387,13 +409,22 @@ private void ParseExtension(ReadOnlySequence buffer, out SequencePosition
examined = suffixBuffer.End;
AddAndCheckObservedBytes(charsToByteCRExclusive + 2);
}
- else
+ else if (InsecureChunkedParsing)
{
+ examined = buffer.Start;
// Don't consume suffixSpan[1] in case it is also a \r.
buffer = buffer.Slice(charsToByteCRExclusive + 1);
consumed = extensionCursor;
AddAndCheckObservedBytes(charsToByteCRExclusive + 1);
}
+ else
+ {
+ consumed = suffixBuffer.End;
+ examined = suffixBuffer.End;
+
+ // We have \rX or \nX, that's an invalid extension.
+ KestrelBadHttpRequestException.Throw(RequestRejectionReason.BadChunkExtension);
+ }
} while (_mode == Mode.Extension);
}
diff --git a/src/Servers/Kestrel/Core/src/Internal/Http/RequestRejectionReason.cs b/src/Servers/Kestrel/Core/src/Internal/Http/RequestRejectionReason.cs
index 827192823023..91467c6cb046 100644
--- a/src/Servers/Kestrel/Core/src/Internal/Http/RequestRejectionReason.cs
+++ b/src/Servers/Kestrel/Core/src/Internal/Http/RequestRejectionReason.cs
@@ -16,6 +16,7 @@ internal enum RequestRejectionReason
UnexpectedEndOfRequestContent,
BadChunkSuffix,
BadChunkSizeData,
+ BadChunkExtension,
ChunkedRequestIncomplete,
InvalidRequestTarget,
InvalidCharactersInHeaderName,
@@ -31,5 +32,5 @@ internal enum RequestRejectionReason
ConnectMethodRequired,
MissingHostHeader,
MultipleHostHeaders,
- InvalidHostHeader
+ InvalidHostHeader,
}
diff --git a/src/Servers/Kestrel/Core/src/KestrelBadHttpRequestException.cs b/src/Servers/Kestrel/Core/src/KestrelBadHttpRequestException.cs
index 05ae34f89802..6bfa5bfe60c4 100644
--- a/src/Servers/Kestrel/Core/src/KestrelBadHttpRequestException.cs
+++ b/src/Servers/Kestrel/Core/src/KestrelBadHttpRequestException.cs
@@ -49,6 +49,9 @@ internal static BadHttpRequestException GetException(RequestRejectionReason reas
case RequestRejectionReason.BadChunkSizeData:
ex = new BadHttpRequestException(CoreStrings.BadRequest_BadChunkSizeData, StatusCodes.Status400BadRequest, reason);
break;
+ case RequestRejectionReason.BadChunkExtension:
+ ex = new BadHttpRequestException(CoreStrings.BadRequest_BadChunkExtension, StatusCodes.Status400BadRequest, reason);
+ break;
case RequestRejectionReason.ChunkedRequestIncomplete:
ex = new BadHttpRequestException(CoreStrings.BadRequest_ChunkedRequestIncomplete, StatusCodes.Status400BadRequest, reason);
break;
diff --git a/src/Servers/Kestrel/Core/test/MessageBodyTests.cs b/src/Servers/Kestrel/Core/test/MessageBodyTests.cs
index 8cd5db8c8cbe..d9ee3c979a11 100644
--- a/src/Servers/Kestrel/Core/test/MessageBodyTests.cs
+++ b/src/Servers/Kestrel/Core/test/MessageBodyTests.cs
@@ -338,14 +338,14 @@ public async Task ReadExitsGivenIncompleteChunkedExtension()
var stream = new HttpRequestStream(Mock.Of(), reader);
reader.StartAcceptingReads(body);
- input.Add("5;\r\0");
+ input.Add("5;\r");
var buffer = new byte[1024];
var readTask = stream.ReadAsync(buffer, 0, buffer.Length);
Assert.False(readTask.IsCompleted);
- input.Add("\r\r\r\nHello\r\n0\r\n\r\n");
+ input.Add("\nHello\r\n0\r\n\r\n");
Assert.Equal(5, await readTask.DefaultTimeout());
try
diff --git a/src/Servers/Kestrel/test/InMemory.FunctionalTests/ChunkedRequestTests.cs b/src/Servers/Kestrel/test/InMemory.FunctionalTests/ChunkedRequestTests.cs
index f5ee2b28228e..7859716d6ff1 100644
--- a/src/Servers/Kestrel/test/InMemory.FunctionalTests/ChunkedRequestTests.cs
+++ b/src/Servers/Kestrel/test/InMemory.FunctionalTests/ChunkedRequestTests.cs
@@ -4,6 +4,7 @@
using System.Buffers;
using System.Globalization;
using System.Text;
+using Microsoft.AspNetCore.Hosting.Server;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.InternalTesting;
using Microsoft.AspNetCore.Server.Kestrel.Core;
@@ -18,6 +19,70 @@ namespace Microsoft.AspNetCore.Server.Kestrel.InMemory.FunctionalTests;
public class ChunkedRequestTests : LoggedTest
{
+ [Theory]
+ [InlineData("2;\rxx\r\nxy\r\n0")] // \r in chunk extensions
+ [InlineData("2;\nxx\r\nxy\r\n0")] // \n in chunk extensions
+ public async Task RejectsInvalidChunkExtensions(string invalidChunkLine)
+ {
+ var testContext = new TestServiceContext(LoggerFactory);
+
+ await using (var server = new TestServer(AppChunked, testContext))
+ {
+ using (var connection = server.CreateConnection())
+ {
+ await connection.Send(
+ "POST / HTTP/1.1",
+ "Host:",
+ "Transfer-Encoding: chunked",
+ "Content-Type: text/plain",
+ "",
+ invalidChunkLine,
+ "",
+ "");
+ await connection.ReceiveEnd(
+ "HTTP/1.1 400 Bad Request",
+ "Content-Length: 0",
+ "Connection: close",
+ $"Date: {testContext.DateHeaderValue}",
+ "",
+ "");
+ }
+ }
+ }
+
+ [Theory]
+ [InlineData("2;a=b;b=c\r\nxy\r\n0")] // Multiple chunk extensions
+ [InlineData("2; \r\nxy\r\n0")] // Space in chunk extensions (BWS)
+ [InlineData("2;;;\r\nxy\r\n0")] // Multiple ';' in chunk extensions
+ [InlineData("2;novalue\r\nxy\r\n0")] // Name only chunk extension
+ //[InlineData("2 ;\r\nxy\r\n0")] // Technically allowed per spec, but we never supported it, and no one should be sending it
+ public async Task AllowsValidChunkExtensions(string chunkLine)
+ {
+ var testContext = new TestServiceContext(LoggerFactory);
+
+ await using (var server = new TestServer(AppChunked, testContext))
+ {
+ using (var connection = server.CreateConnection())
+ {
+ await connection.Send(
+ "POST / HTTP/1.1",
+ "Host:",
+ "Transfer-Encoding: chunked",
+ "Content-Type: text/plain",
+ "",
+ chunkLine,
+ "",
+ "");
+ await connection.Receive(
+ "HTTP/1.1 200 OK",
+ "Content-Length: 2",
+ $"Date: {testContext.DateHeaderValue}",
+ "",
+ "xy");
+ }
+ }
+ }
+
private async Task App(HttpContext httpContext)
{
var request = httpContext.Request;
@@ -1117,4 +1182,86 @@ await connection.Receive(
}
}
}
+
+ [Fact]
+ public async Task MultiReadWithInvalidNewlineAcrossReads()
+ {
+ // Inline so that we know when the first connection.Send has been parsed so we can send the next part
+ var testContext = new TestServiceContext(LoggerFactory)
+ { Scheduler = System.IO.Pipelines.PipeScheduler.Inline };
+
+ var tcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously);
+
+ await using (var server = new TestServer(async httpContext =>
+ {
+ var request = httpContext.Request;
+ var readTask = request.BodyReader.ReadAsync();
+ tcs.TrySetResult();
+ var readResult = await readTask;
+ request.BodyReader.AdvanceTo(readResult.Buffer.End);
+ }, testContext))
+ {
+ using (var connection = server.CreateConnection())
+ {
+ await connection.SendAll(
+ "GET / HTTP/1.1",
+ "Host:",
+ "Transfer-Encoding: chunked",
+ "",
+ "1;\r");
+ await tcs.Task;
+ await connection.SendAll(
+ "\r");
+
+ await connection.ReceiveEnd(
+ "HTTP/1.1 400 Bad Request",
+ "Content-Length: 0",
+ "Connection: close",
+ $"Date: {testContext.DateHeaderValue}",
+ "",
+ "");
+ }
+ }
+ }
+
+ [Fact]
+ public async Task InvalidNewlineInFirstReadWithPartialChunkExtension()
+ {
+ // Inline so that we know when the first connection.Send has been parsed so we can send the next part
+ var testContext = new TestServiceContext(LoggerFactory)
+ { Scheduler = System.IO.Pipelines.PipeScheduler.Inline };
+
+ var tcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously);
+
+ await using (var server = new TestServer(async httpContext =>
+ {
+ var request = httpContext.Request;
+ var readTask = request.BodyReader.ReadAsync();
+ tcs.TrySetResult();
+ var readResult = await readTask;
+ request.BodyReader.AdvanceTo(readResult.Buffer.End);
+ }, testContext))
+ {
+ using (var connection = server.CreateConnection())
+ {
+ await connection.SendAll(
+ "GET / HTTP/1.1",
+ "Host:",
+ "Transfer-Encoding: chunked",
+ "",
+ "1;\n");
+ await tcs.Task;
+ await connection.SendAll(
+ "t");
+
+ await connection.ReceiveEnd(
+ "HTTP/1.1 400 Bad Request",
+ "Content-Length: 0",
+ "Connection: close",
+ $"Date: {testContext.DateHeaderValue}",
+ "",
+ "");
+ }
+ }
+ }
}