Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
b520113
Merge commit '4ba092c40c8d5812b9fd5198f6daecbd282df7a9'
Feb 26, 2026
d9c0dbf
Merge commit '618aa189cda6bdcdfaff78ecb3a93bd9d40a2f77'
Mar 3, 2026
b234b9a
Merged PR 58448: [release/9.0] Apply mitigations to System.Security.C…
eiriktsarpalis Mar 4, 2026
f18835d
Merge commit 'a42ba886bd029ded095c7005a6d8b48a19d272a3'
Mar 11, 2026
4ec47bc
Merge commit 'a1b54a0052fa51fec4ed554ce0b8bba2e1a75f26'
Mar 11, 2026
fc1278e
Merge commit 'a45b4e35a0cdc50fd32a76a2cfa8a80017bcd6c9'
Mar 11, 2026
df1ae78
Merged PR 58740: [internal/release/9.0] Reject mail addresses contain…
liveans Mar 12, 2026
b7dfbe4
Merge commit '76cf20362b912f13c17db56a78dfe65de52295ac'
Mar 13, 2026
3c7b000
Updated xplat-setup.yml
vseanreesermsft Mar 13, 2026
b81d32c
Updated xplat-setup.yml
vseanreesermsft Mar 14, 2026
7c5c413
Merged PR 59059: use AZL3 instead of Ubuntu for builds
vseanreesermsft Mar 14, 2026
ddee485
Merge commit 'ef7db8d8bffdec68b4ffc583d9447c96dc90799d'
Mar 15, 2026
ef54dc1
[release/9.0] update MsQuic
wfurt Mar 18, 2026
d4bd3fe
Merge commit 'b07b47c21c06371185f1bfe9e25fcf5fd149d221'
Mar 18, 2026
e19960d
Merged PR 59184: [release/9.0] update MsQuic
Mar 18, 2026
79423ab
Merge commit '1430f560e53cd353a637fab0809709e953649de7'
Mar 19, 2026
4ba881a
Merge commit '57a3b46c27bcd93bd36cfa322c186f1baa5d462f'
Mar 19, 2026
672f407
Merge commit '072c240e366281daf80f474440a74c5334e88f07'
Mar 20, 2026
d9e09c2
update dependencies from emsdk 9.0.15 (#126134)
vseanreesermsft Mar 25, 2026
1520851
[release/9.0] Update dependencies from dotnet/emsdk (#126119)
dotnet-maestro[bot] Mar 26, 2026
4250c83
Merge commit '152085126a3dc5063aac6e9ae9ed2cda2be2f4bf'
Mar 26, 2026
b08e7fa
[release/9.0] Update WebAssembly Helix image versions (#126527)
richlander Apr 6, 2026
5c188fe
[release/9.0] Update branding to 9.0.16 (#126616)
vseanreesermsft Apr 9, 2026
c9ace88
Merge release/9.0 staging into release/9 (#125832)
steveisok Apr 14, 2026
c04ef9a
Merge commit '4250c8399aa851d2d6a95efbdcc5c4c12311e024' into internal…
vseanreesermsft Apr 14, 2026
12a10ea
Merging internal commits for release/9.0 (#126897)
wfurt Apr 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .config/dotnet-tools.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
]
},
"microsoft.dotnet.xharness.cli": {
"version": "11.0.0-prerelease.26117.1",
"version": "11.0.0-prerelease.26168.1",
"commands": [
"xharness"
]
Expand Down
2 changes: 1 addition & 1 deletion NuGet.config
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<clear />
<!--Begin: Package sources managed by Dependency Flow automation. Do not edit the sources below.-->
<!-- Begin: Package sources from dotnet-emsdk -->
<add key="darc-pub-dotnet-emsdk-dee9781" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/darc-pub-dotnet-emsdk-dee97813/nuget/v3/index.json" />
<add key="darc-pub-dotnet-emsdk-918f4ea" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/darc-pub-dotnet-emsdk-918f4eac/nuget/v3/index.json" />
<!-- End: Package sources from dotnet-emsdk -->
<!-- Begin: Package sources from dotnet-sdk -->
<!-- End: Package sources from dotnet-sdk -->
Expand Down
2 changes: 1 addition & 1 deletion docs/workflow/building/coreclr/cross-building.md
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ docker run --rm \
-v <RUNTIME_REPO_PATH>:/runtime \
-w /runtime \
-e ROOTFS_DIR=/crossrootfs/arm64 \
mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-cross-arm64 \
mcr.microsoft.com/dotnet-buildtools/prereqs:azurelinux-3.0-net9.0-cross-arm64 \
./build.sh --subset clr --cross --arch arm64
```

Expand Down
112 changes: 56 additions & 56 deletions eng/Version.Details.xml

Large diffs are not rendered by default.

60 changes: 30 additions & 30 deletions eng/Versions.props
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
<Project>
<PropertyGroup>
<!-- The .NET product branding version -->
<ProductVersion>9.0.15</ProductVersion>
<ProductVersion>9.0.16</ProductVersion>
<!-- File version numbers -->
<MajorVersion>9</MajorVersion>
<MinorVersion>0</MinorVersion>
<PatchVersion>15</PatchVersion>
<PatchVersion>16</PatchVersion>
<SdkBandVersion>9.0.100</SdkBandVersion>
<PackageVersionNet8>8.0.$([MSBuild]::Add($(PatchVersion),11))</PackageVersionNet8>
<PackageVersionNet7>7.0.20</PackageVersionNet7>
Expand Down Expand Up @@ -190,9 +190,9 @@
<MicrosoftNETCoreCoreDisToolsVersion>1.4.0</MicrosoftNETCoreCoreDisToolsVersion>
<MicrosoftNETTestSdkVersion>17.4.0-preview-20220707-01</MicrosoftNETTestSdkVersion>
<!-- xharness -->
<MicrosoftDotNetXHarnessTestRunnersCommonVersion>11.0.0-prerelease.26117.1</MicrosoftDotNetXHarnessTestRunnersCommonVersion>
<MicrosoftDotNetXHarnessTestRunnersXunitVersion>11.0.0-prerelease.26117.1</MicrosoftDotNetXHarnessTestRunnersXunitVersion>
<MicrosoftDotNetXHarnessCLIVersion>11.0.0-prerelease.26117.1</MicrosoftDotNetXHarnessCLIVersion>
<MicrosoftDotNetXHarnessTestRunnersCommonVersion>11.0.0-prerelease.26168.1</MicrosoftDotNetXHarnessTestRunnersCommonVersion>
<MicrosoftDotNetXHarnessTestRunnersXunitVersion>11.0.0-prerelease.26168.1</MicrosoftDotNetXHarnessTestRunnersXunitVersion>
<MicrosoftDotNetXHarnessCLIVersion>11.0.0-prerelease.26168.1</MicrosoftDotNetXHarnessCLIVersion>
<!-- hotreload-utils -->
<MicrosoftDotNetHotReloadUtilsGeneratorBuildToolVersion>9.0.0-alpha.0.26152.4</MicrosoftDotNetHotReloadUtilsGeneratorBuildToolVersion>
<NUnitVersion>3.12.0</NUnitVersion>
Expand Down Expand Up @@ -229,28 +229,28 @@
<MicrosoftNETCoreRuntimeICUTransportVersion>9.0.0-rtm.25627.1</MicrosoftNETCoreRuntimeICUTransportVersion>
<MicrosoftNETCoreRuntimeICUTransportVersion>9.0.0-rtm.24466.4</MicrosoftNETCoreRuntimeICUTransportVersion>
<!-- MsQuic -->
<MicrosoftNativeQuicMsQuicSchannelVersion>2.4.8</MicrosoftNativeQuicMsQuicSchannelVersion>
<MicrosoftNativeQuicMsQuicSchannelVersion>2.4.17</MicrosoftNativeQuicMsQuicSchannelVersion>
<!-- Mono LLVM -->
<runtimelinuxarm64MicrosoftNETCoreRuntimeMonoLLVMSdkVersion>19.1.0-alpha.1.26152.4</runtimelinuxarm64MicrosoftNETCoreRuntimeMonoLLVMSdkVersion>
<runtimelinuxarm64MicrosoftNETCoreRuntimeMonoLLVMToolsVersion>19.1.0-alpha.1.26152.4</runtimelinuxarm64MicrosoftNETCoreRuntimeMonoLLVMToolsVersion>
<runtimelinuxmuslarm64MicrosoftNETCoreRuntimeMonoLLVMSdkVersion>19.1.0-alpha.1.26152.4</runtimelinuxmuslarm64MicrosoftNETCoreRuntimeMonoLLVMSdkVersion>
<runtimelinuxmuslarm64MicrosoftNETCoreRuntimeMonoLLVMToolsVersion>19.1.0-alpha.1.26152.4</runtimelinuxmuslarm64MicrosoftNETCoreRuntimeMonoLLVMToolsVersion>
<runtimelinuxx64MicrosoftNETCoreRuntimeMonoLLVMSdkVersion>19.1.0-alpha.1.26152.4</runtimelinuxx64MicrosoftNETCoreRuntimeMonoLLVMSdkVersion>
<runtimelinuxx64MicrosoftNETCoreRuntimeMonoLLVMToolsVersion>19.1.0-alpha.1.26152.4</runtimelinuxx64MicrosoftNETCoreRuntimeMonoLLVMToolsVersion>
<runtimelinuxmuslx64MicrosoftNETCoreRuntimeMonoLLVMSdkVersion>19.1.0-alpha.1.26152.4</runtimelinuxmuslx64MicrosoftNETCoreRuntimeMonoLLVMSdkVersion>
<runtimelinuxmuslx64MicrosoftNETCoreRuntimeMonoLLVMToolsVersion>19.1.0-alpha.1.26152.4</runtimelinuxmuslx64MicrosoftNETCoreRuntimeMonoLLVMToolsVersion>
<runtimewinx64MicrosoftNETCoreRuntimeMonoLLVMSdkVersion>19.1.0-alpha.1.26152.4</runtimewinx64MicrosoftNETCoreRuntimeMonoLLVMSdkVersion>
<runtimewinx64MicrosoftNETCoreRuntimeMonoLLVMToolsVersion>19.1.0-alpha.1.26152.4</runtimewinx64MicrosoftNETCoreRuntimeMonoLLVMToolsVersion>
<runtimeosxarm64MicrosoftNETCoreRuntimeMonoLLVMSdkVersion>19.1.0-alpha.1.26152.4</runtimeosxarm64MicrosoftNETCoreRuntimeMonoLLVMSdkVersion>
<runtimeosxarm64MicrosoftNETCoreRuntimeMonoLLVMToolsVersion>19.1.0-alpha.1.26152.4</runtimeosxarm64MicrosoftNETCoreRuntimeMonoLLVMToolsVersion>
<runtimeosxx64MicrosoftNETCoreRuntimeMonoLLVMSdkVersion>19.1.0-alpha.1.26152.4</runtimeosxx64MicrosoftNETCoreRuntimeMonoLLVMSdkVersion>
<runtimeosxx64MicrosoftNETCoreRuntimeMonoLLVMToolsVersion>19.1.0-alpha.1.26152.4</runtimeosxx64MicrosoftNETCoreRuntimeMonoLLVMToolsVersion>
<runtimelinuxarm64MicrosoftNETCoreRuntimeMonoLLVMSdkVersion>19.1.0-alpha.1.26167.4</runtimelinuxarm64MicrosoftNETCoreRuntimeMonoLLVMSdkVersion>
<runtimelinuxarm64MicrosoftNETCoreRuntimeMonoLLVMToolsVersion>19.1.0-alpha.1.26167.4</runtimelinuxarm64MicrosoftNETCoreRuntimeMonoLLVMToolsVersion>
<runtimelinuxmuslarm64MicrosoftNETCoreRuntimeMonoLLVMSdkVersion>19.1.0-alpha.1.26167.4</runtimelinuxmuslarm64MicrosoftNETCoreRuntimeMonoLLVMSdkVersion>
<runtimelinuxmuslarm64MicrosoftNETCoreRuntimeMonoLLVMToolsVersion>19.1.0-alpha.1.26167.4</runtimelinuxmuslarm64MicrosoftNETCoreRuntimeMonoLLVMToolsVersion>
<runtimelinuxx64MicrosoftNETCoreRuntimeMonoLLVMSdkVersion>19.1.0-alpha.1.26167.4</runtimelinuxx64MicrosoftNETCoreRuntimeMonoLLVMSdkVersion>
<runtimelinuxx64MicrosoftNETCoreRuntimeMonoLLVMToolsVersion>19.1.0-alpha.1.26167.4</runtimelinuxx64MicrosoftNETCoreRuntimeMonoLLVMToolsVersion>
<runtimelinuxmuslx64MicrosoftNETCoreRuntimeMonoLLVMSdkVersion>19.1.0-alpha.1.26167.4</runtimelinuxmuslx64MicrosoftNETCoreRuntimeMonoLLVMSdkVersion>
<runtimelinuxmuslx64MicrosoftNETCoreRuntimeMonoLLVMToolsVersion>19.1.0-alpha.1.26167.4</runtimelinuxmuslx64MicrosoftNETCoreRuntimeMonoLLVMToolsVersion>
<runtimewinx64MicrosoftNETCoreRuntimeMonoLLVMSdkVersion>19.1.0-alpha.1.26167.4</runtimewinx64MicrosoftNETCoreRuntimeMonoLLVMSdkVersion>
<runtimewinx64MicrosoftNETCoreRuntimeMonoLLVMToolsVersion>19.1.0-alpha.1.26167.4</runtimewinx64MicrosoftNETCoreRuntimeMonoLLVMToolsVersion>
<runtimeosxarm64MicrosoftNETCoreRuntimeMonoLLVMSdkVersion>19.1.0-alpha.1.26167.4</runtimeosxarm64MicrosoftNETCoreRuntimeMonoLLVMSdkVersion>
<runtimeosxarm64MicrosoftNETCoreRuntimeMonoLLVMToolsVersion>19.1.0-alpha.1.26167.4</runtimeosxarm64MicrosoftNETCoreRuntimeMonoLLVMToolsVersion>
<runtimeosxx64MicrosoftNETCoreRuntimeMonoLLVMSdkVersion>19.1.0-alpha.1.26167.4</runtimeosxx64MicrosoftNETCoreRuntimeMonoLLVMSdkVersion>
<runtimeosxx64MicrosoftNETCoreRuntimeMonoLLVMToolsVersion>19.1.0-alpha.1.26167.4</runtimeosxx64MicrosoftNETCoreRuntimeMonoLLVMToolsVersion>
<!-- emscripten / Node
Note: when the name is updated, make sure to update dependency name in eng/pipelines/common/xplat-setup.yml
like - DarcDependenciesChanged.Microsoft_NET_Workload_Emscripten_Current_Manifest-9_0_100_Transport
-->
<MicrosoftNETWorkloadEmscriptenCurrentManifest90100TransportVersion>9.0.16-servicing.26160.4</MicrosoftNETWorkloadEmscriptenCurrentManifest90100TransportVersion>
<MicrosoftNETWorkloadEmscriptenCurrentManifest90100Version>9.0.16</MicrosoftNETWorkloadEmscriptenCurrentManifest90100Version>
<MicrosoftNETWorkloadEmscriptenCurrentManifest90100TransportVersion>9.0.15-servicing.26175.1</MicrosoftNETWorkloadEmscriptenCurrentManifest90100TransportVersion>
<MicrosoftNETWorkloadEmscriptenCurrentManifest90100Version>9.0.15</MicrosoftNETWorkloadEmscriptenCurrentManifest90100Version>
<MicrosoftNETRuntimeEmscriptenVersion>$(MicrosoftNETWorkloadEmscriptenCurrentManifest90100Version)</MicrosoftNETRuntimeEmscriptenVersion>
<!-- SdkVersionForWorkloadTesting is used to compute the sdk band and version for workload testing.
The published manifests are built in dotnet/sdk so these values are for testing purposes only.
Expand All @@ -268,14 +268,14 @@
<SwixPackageVersion>1.1.87-gba258badda</SwixPackageVersion>
<WixPackageVersion>1.0.0-v3.14.0.5722</WixPackageVersion>
<!-- JIT Tools -->
<runtimelinuxarm64MicrosoftNETCoreRuntimeJITToolsVersion>19.1.0-alpha.1.26152.4</runtimelinuxarm64MicrosoftNETCoreRuntimeJITToolsVersion>
<runtimelinuxx64MicrosoftNETCoreRuntimeJITToolsVersion>19.1.0-alpha.1.26152.4</runtimelinuxx64MicrosoftNETCoreRuntimeJITToolsVersion>
<runtimelinuxmuslarm64MicrosoftNETCoreRuntimeJITToolsVersion>19.1.0-alpha.1.26152.4</runtimelinuxmuslarm64MicrosoftNETCoreRuntimeJITToolsVersion>
<runtimelinuxmuslx64MicrosoftNETCoreRuntimeJITToolsVersion>19.1.0-alpha.1.26152.4</runtimelinuxmuslx64MicrosoftNETCoreRuntimeJITToolsVersion>
<runtimewinarm64MicrosoftNETCoreRuntimeJITToolsVersion>19.1.0-alpha.1.26152.4</runtimewinarm64MicrosoftNETCoreRuntimeJITToolsVersion>
<runtimewinx64MicrosoftNETCoreRuntimeJITToolsVersion>19.1.0-alpha.1.26152.4</runtimewinx64MicrosoftNETCoreRuntimeJITToolsVersion>
<runtimeosxarm64MicrosoftNETCoreRuntimeJITToolsVersion>19.1.0-alpha.1.26152.4</runtimeosxarm64MicrosoftNETCoreRuntimeJITToolsVersion>
<runtimeosxx64MicrosoftNETCoreRuntimeJITToolsVersion>19.1.0-alpha.1.26152.4</runtimeosxx64MicrosoftNETCoreRuntimeJITToolsVersion>
<runtimelinuxarm64MicrosoftNETCoreRuntimeJITToolsVersion>19.1.0-alpha.1.26167.4</runtimelinuxarm64MicrosoftNETCoreRuntimeJITToolsVersion>
<runtimelinuxx64MicrosoftNETCoreRuntimeJITToolsVersion>19.1.0-alpha.1.26167.4</runtimelinuxx64MicrosoftNETCoreRuntimeJITToolsVersion>
<runtimelinuxmuslarm64MicrosoftNETCoreRuntimeJITToolsVersion>19.1.0-alpha.1.26167.4</runtimelinuxmuslarm64MicrosoftNETCoreRuntimeJITToolsVersion>
<runtimelinuxmuslx64MicrosoftNETCoreRuntimeJITToolsVersion>19.1.0-alpha.1.26167.4</runtimelinuxmuslx64MicrosoftNETCoreRuntimeJITToolsVersion>
<runtimewinarm64MicrosoftNETCoreRuntimeJITToolsVersion>19.1.0-alpha.1.26167.4</runtimewinarm64MicrosoftNETCoreRuntimeJITToolsVersion>
<runtimewinx64MicrosoftNETCoreRuntimeJITToolsVersion>19.1.0-alpha.1.26167.4</runtimewinx64MicrosoftNETCoreRuntimeJITToolsVersion>
<runtimeosxarm64MicrosoftNETCoreRuntimeJITToolsVersion>19.1.0-alpha.1.26167.4</runtimeosxarm64MicrosoftNETCoreRuntimeJITToolsVersion>
<runtimeosxx64MicrosoftNETCoreRuntimeJITToolsVersion>19.1.0-alpha.1.26167.4</runtimeosxx64MicrosoftNETCoreRuntimeJITToolsVersion>
<!-- BrowserDebugProxy libs -->
<MicrosoftExtensionsLoggingVersion>3.1.7</MicrosoftExtensionsLoggingVersion>
<MicrosoftSymbolStoreVersion>1.0.406601</MicrosoftSymbolStoreVersion>
Expand Down
4 changes: 2 additions & 2 deletions eng/pipelines/common/xplat-setup.yml
Original file line number Diff line number Diff line change
Expand Up @@ -163,12 +163,12 @@ jobs:
# Public Linux Build Pool
${{ if and(or(in(parameters.osGroup, 'linux', 'freebsd', 'android', 'tizen'), eq(parameters.jobParameters.hostedOs, 'linux')), eq(variables['System.TeamProject'], 'public')) }}:
name: $(DncEngPublicBuildPool)
demands: ImageOverride -equals Build.Ubuntu.2204.Amd64.Open
demands: ImageOverride -equals build.azurelinux.3.amd64.open

# Official Build Linux Pool
${{ if and(or(in(parameters.osGroup, 'linux', 'freebsd', 'android', 'tizen'), eq(parameters.jobParameters.hostedOs, 'linux')), ne(variables['System.TeamProject'], 'public')) }}:
name: $(DncEngInternalBuildPool)
demands: ImageOverride -equals 1es-ubuntu-2204
demands: ImageOverride -equals build.azurelinux.3.amd64
os: linux

# OSX Public Build Pool (we don't have on-prem OSX BuildPool).
Expand Down
2 changes: 1 addition & 1 deletion eng/pipelines/coreclr/templates/helix-queues-setup.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ jobs:

# Browser wasm
- ${{ if eq(parameters.platform, 'browser_wasm') }}:
- (Ubuntu.2204.Amd64)Ubuntu.2204.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04-helix-webassembly
- (Ubuntu.2604.Amd64.Open)AzureLinux.3.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-26.04-helix-webassembly-amd64

# iOS devices
- ${{ if in(parameters.platform, 'ios_arm64') }}:
Expand Down
10 changes: 5 additions & 5 deletions eng/pipelines/libraries/helix-queues-setup.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,8 @@ jobs:
# CoreCLR path
- ${{ if and(eq(parameters.jobParameters.isExtraPlatformsBuild, true), ne(parameters.jobParameters.testScope, 'outerloop'))}}:
# extra-platforms CoreCLR (inner loop only)
- AzureLinux.3.Amd64.Open
- (Debian.12.Amd64.Open)AzureLinux.3.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-12-helix-amd64
- (Mariner.2.0.Amd64.Open)AzureLinux.3.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-helix-amd64

- ${{ if eq(parameters.jobParameters.testScope, 'outerloop') }}:
# outerloop only CoreCLR
Expand All @@ -68,7 +68,7 @@ jobs:
- ${{ if or(ne(parameters.jobParameters.isExtraPlatformsBuild, true), eq(parameters.jobParameters.includeAllPlatforms, true))}}:
# inner and outer loop CoreCLR (general set)
- Ubuntu.2204.Amd64.Open
- (AzureLinux.3.0.Amd64.Open)AzureLinux.3.Amd64.open@mcr.microsoft.com/dotnet-buildtools/prereqs:azurelinux-3.0-helix-amd64
- (AzureLinux.3.0.Amd64.Open)AzureLinux.3.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:azurelinux-3.0-helix-amd64
- (Centos.10.Amd64.Open)AzureLinux.3.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream-10-helix-amd64

# OSX arm64
Expand Down Expand Up @@ -152,15 +152,15 @@ jobs:

# WASI
- ${{ if eq(parameters.platform, 'wasi_wasm') }}:
- (Ubuntu.2204.Amd64)AzureLinux.3.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04-helix-webassembly
- (Ubuntu.2604.Amd64.Open)AzureLinux.3.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-26.04-helix-webassembly-amd64

# Browser WebAssembly
- ${{ if eq(parameters.platform, 'browser_wasm') }}:
- (Ubuntu.2204.Amd64)AzureLinux.3.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04-helix-webassembly
- (Ubuntu.2604.Amd64.Open)AzureLinux.3.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-26.04-helix-webassembly-amd64

# Browser WebAssembly Firefox
- ${{ if eq(parameters.platform, 'browser_wasm_firefox') }}:
- (Ubuntu.2204.Amd64)AzureLinux.3.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04-helix-webassembly
- (Ubuntu.2604.Amd64.Open)AzureLinux.3.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-26.04-helix-webassembly-amd64

# Browser WebAssembly windows
- ${{ if in(parameters.platform, 'browser_wasm_win', 'wasi_wasm_win') }}:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,20 @@ private static bool TryParseAddress(string data, bool expectMultipleAddresses, r
Debug.Assert(!string.IsNullOrEmpty(data));
Debug.Assert(index >= 0 && index < data.Length, $"Index out of range: {index}, {data.Length}");

// Check for CR or LF characters which are not allowed in mail addresses.
// Only scan on the first call (index == data.Length - 1) to avoid repeated O(n) scans
// when parsing multiple addresses from the same string.
if (index == data.Length - 1 && MailBnfHelper.HasCROrLF(data))
{
if (throwExceptionIfFail)
{
throw new FormatException(SR.MailAddressInvalidFormat);
}

parseAddressInfo = default;
return false;
}

// Parsed components to be assembled as a MailAddress later
string? displayName;

Expand Down
30 changes: 5 additions & 25 deletions src/libraries/System.Net.Mail/tests/Functional/SmtpClientTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -580,37 +580,17 @@ public void TestGssapiAuthentication()

[Theory]
[MemberData(nameof(SendMail_MultiLineDomainLiterals_Data))]
public async Task SendMail_MultiLineDomainLiterals_Disabled_Throws(string from, string to, bool asyncSend)
public void SendMail_MultiLineDomainLiterals_Disabled_Throws(string from, string to)
{
using var server = new LoopbackSmtpServer();

using SmtpClient client = server.CreateClient();
client.Credentials = new NetworkCredential("Foo", "Bar");

using var msg = new MailMessage(@from, @to, "subject", "body");

await Assert.ThrowsAsync<SmtpException>(async () =>
{
if (asyncSend)
{
await client.SendMailAsync(msg).WaitAsync(TimeSpan.FromSeconds(30));
}
else
{
client.Send(msg);
}
});
Assert.Throws<FormatException>(() => new MailMessage(@from, @to, "subject", "body"));
}

public static IEnumerable<object[]> SendMail_MultiLineDomainLiterals_Data()
{
foreach (bool async in new[] { true, false })
foreach (string address in new[] { "foo@[\r\n bar]", "foo@[bar\r\n ]", "foo@[bar\r\n baz]" })
{
foreach (string address in new[] { "foo@[\r\n bar]", "foo@[bar\r\n ]", "foo@[bar\r\n baz]" })
{
yield return new object[] { address, "foo@example.com", async };
yield return new object[] { "foo@example.com", address, async };
}
yield return new object[] { address, "foo@example.com" };
yield return new object[] { "foo@example.com", address };
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -559,5 +559,39 @@ public void ParseAddresses_WithManyComplexAddresses_ShouldReadCorrectly()
Assert.Equal("\" asciin;,oqu o.tesws \"", result[6].User);
Assert.Equal("this.test.this", result[6].Host);
}

[Theory]
[InlineData("test\r@example.com")]
[InlineData("test\n@example.com")]
[InlineData("test\r\n@example.com")]
[InlineData("Display\r\nName <test@example.com>")]
[InlineData("test@example\r.com")]
[InlineData("test@example\n.com")]
[InlineData("test@example.com\r\n")]
public void TryParseAddress_WithCROrLF_ShouldThrow(string address)
{
Assert.Throws<FormatException>(() => MailAddressParser.TryParseAddress(address, out _, throwExceptionIfFail: true));
}

[Theory]
[InlineData("test\r@example.com")]
[InlineData("test\n@example.com")]
[InlineData("test\r\n@example.com")]
[InlineData("Display\r\nName <test@example.com>")]
[InlineData("test@example\r.com")]
[InlineData("test@example\n.com")]
[InlineData("test@example.com\r\n")]
public void TryParseAddress_WithCROrLF_ShouldReturnFalse(string address)
{
Assert.False(MailAddressParser.TryParseAddress(address, out _, throwExceptionIfFail: false));
}

[Fact]
public void ParseMultipleAddresses_WithCROrLF_ShouldThrow()
{
Assert.Throws<FormatException>(() => MailAddressParser.ParseMultipleAddresses("a@b.com, test\r\n@example.com"));
Assert.Throws<FormatException>(() => MailAddressParser.ParseMultipleAddresses("test\n@example.com, a@b.com"));
Assert.Throws<FormatException>(() => MailAddressParser.ParseMultipleAddresses("a@b.com, c@d.com, e\r@f.com"));
}
}
}
Loading
Loading