Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
f1d743e
Solve symlinks before extraction to avoid possible traversals
alinpahontu2912 Apr 30, 2026
ad2953d
solve copilot comments
alinpahontu2912 Apr 30, 2026
06eb769
allow UnauthorizedException to bubble out and update test assertion
alinpahontu2912 May 4, 2026
50179ce
fix ambiguous calls
alinpahontu2912 May 4, 2026
84d9ee3
address comments
alinpahontu2912 May 5, 2026
bdf9959
add missing using
alinpahontu2912 May 6, 2026
091982e
Merge commit 'ebcc0f8c4f76c1a1027ccba2bfe79ac8b209784e'
May 6, 2026
ff140ff
Merged PR 59958: [release/8.0] Fix NativeAOT possible out-of-bounds w…
elinor-fung May 11, 2026
d1e47f8
Merge commit '90cf489db8836d7530a5d50e02adabee8b5065ff'
May 13, 2026
aa0e373
Merge commit 'a2270915c77365f1b84165844e06f2f35588c2d9'
May 13, 2026
e77fe84
Merged PR 60646: Fix tar symlink resolution - NET 8
alinpahontu2912 May 14, 2026
18c85f9
[release/8.0] Merge release/8.0-staging -> release/8.0 (#128131)
hoyosjs May 14, 2026
46295af
Merge commit '18c85f96f6c4e8609247235f6486d5807a2f42af'
May 14, 2026
20950fc
Update branding to 8.0.29 (#128914)
vseanreesermsft Jun 3, 2026
b4ca168
[release/8.0] Update dependencies from dotnet/cecil (#126004)
dotnet-maestro[bot] Jun 9, 2026
5c83ff8
Merge commit '46295af5828b062bbbf93a9cef50fd8cb9fbcb09' into internal…
vseanreesermsft Jun 9, 2026
370e268
Marked failing tests as ActiveIssue
svick Jun 10, 2026
c5d2de9
Marked more failing tests as ActiveIssue
svick Jun 10, 2026
22b5392
Merging internal commits for release/8.0 (#129195)
hoyosjs Jun 11, 2026
738e6ff
[release/8.0] Update dependencies from dotnet/arcade (#126394)
dotnet-maestro[bot] Jun 11, 2026
4e7e8e5
[release/8.0] Update dependencies from dotnet/emsdk (#128223)
dotnet-maestro[bot] Jun 11, 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 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-35ebe6f" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/darc-pub-dotnet-emsdk-35ebe6f3/nuget/v3/index.json" />
<add key="darc-pub-dotnet-emsdk-ac9f809" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/darc-pub-dotnet-emsdk-ac9f8092/nuget/v3/index.json" />
<!-- End: Package sources from dotnet-emsdk -->
<!-- Begin: Package sources from dotnet-sdk -->
<!-- End: Package sources from dotnet-sdk -->
Expand Down
84 changes: 42 additions & 42 deletions eng/Version.Details.xml
Original file line number Diff line number Diff line change
Expand Up @@ -86,18 +86,18 @@
<Sha>02fe27cd6a9b001c8feb7938e6ef4b3799745759</Sha>
<SourceBuild RepoName="command-line-api" ManagedOnly="true" />
</Dependency>
<Dependency Name="Microsoft.DotNet.Cecil" Version="0.11.4-alpha.26158.1">
<Dependency Name="Microsoft.DotNet.Cecil" Version="0.11.4-alpha.26281.3">
<Uri>https://github.com/dotnet/cecil</Uri>
<Sha>dc12f3e6ccb3fd7b76c0d5ee3365e6b58d796de0</Sha>
<Sha>fca1a685c57d208f52fd7e7ba48e2059e3bf0c34</Sha>
<SourceBuild RepoName="cecil" ManagedOnly="true" />
</Dependency>
<Dependency Name="Microsoft.NET.Workload.Emscripten.Current.Manifest-8.0.100" Version="8.0.28">
<Dependency Name="Microsoft.NET.Workload.Emscripten.Current.Manifest-8.0.100" Version="8.0.29">
<Uri>https://github.com/dotnet/emsdk</Uri>
<Sha>35ebe6f3e6953f878ed92f637ad8d7f27202f7a6</Sha>
<Sha>ac9f8092f4f527cb3ace4aac03f8d1dbadc39983</Sha>
</Dependency>
<Dependency Name="Microsoft.SourceBuild.Intermediate.emsdk" Version="8.0.28-servicing.26258.2">
<Dependency Name="Microsoft.SourceBuild.Intermediate.emsdk" Version="8.0.29-servicing.26303.5">
<Uri>https://github.com/dotnet/emsdk</Uri>
<Sha>35ebe6f3e6953f878ed92f637ad8d7f27202f7a6</Sha>
<Sha>ac9f8092f4f527cb3ace4aac03f8d1dbadc39983</Sha>
<SourceBuild RepoName="emsdk" ManagedOnly="true" />
</Dependency>
<Dependency Name="Microsoft.SourceBuild.Intermediate.source-build-assets" Version="8.0.0-alpha.1.26208.5">
Expand All @@ -112,79 +112,79 @@
</Dependency>
</ProductDependencies>
<ToolsetDependencies>
<Dependency Name="Microsoft.DotNet.Arcade.Sdk" Version="8.0.0-beta.26224.3">
<Dependency Name="Microsoft.DotNet.Arcade.Sdk" Version="8.0.0-beta.26278.3">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>d9af20b993c474033098fe0851c2d71b4ecf434b</Sha>
<Sha>4b95fb1a9307265eb75f62d4937be50e6786e94e</Sha>
<SourceBuild RepoName="arcade" ManagedOnly="true" />
</Dependency>
<Dependency Name="Microsoft.DotNet.XliffTasks" Version="1.0.0-beta.23475.1" CoherentParentDependency="Microsoft.DotNet.Arcade.Sdk">
<Uri>https://github.com/dotnet/xliff-tasks</Uri>
<Sha>73f0850939d96131c28cf6ea6ee5aacb4da0083a</Sha>
<SourceBuild RepoName="xliff-tasks" ManagedOnly="true" />
</Dependency>
<Dependency Name="Microsoft.DotNet.Helix.Sdk" Version="8.0.0-beta.26224.3">
<Dependency Name="Microsoft.DotNet.Helix.Sdk" Version="8.0.0-beta.26278.3">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>d9af20b993c474033098fe0851c2d71b4ecf434b</Sha>
<Sha>4b95fb1a9307265eb75f62d4937be50e6786e94e</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.GenAPI" Version="8.0.0-beta.26224.3">
<Dependency Name="Microsoft.DotNet.GenAPI" Version="8.0.0-beta.26278.3">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>d9af20b993c474033098fe0851c2d71b4ecf434b</Sha>
<Sha>4b95fb1a9307265eb75f62d4937be50e6786e94e</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.GenFacades" Version="8.0.0-beta.26224.3">
<Dependency Name="Microsoft.DotNet.GenFacades" Version="8.0.0-beta.26278.3">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>d9af20b993c474033098fe0851c2d71b4ecf434b</Sha>
<Sha>4b95fb1a9307265eb75f62d4937be50e6786e94e</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.XUnitExtensions" Version="8.0.0-beta.26224.3">
<Dependency Name="Microsoft.DotNet.XUnitExtensions" Version="8.0.0-beta.26278.3">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>d9af20b993c474033098fe0851c2d71b4ecf434b</Sha>
<Sha>4b95fb1a9307265eb75f62d4937be50e6786e94e</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.XUnitConsoleRunner" Version="2.5.1-beta.26224.3">
<Dependency Name="Microsoft.DotNet.XUnitConsoleRunner" Version="2.5.1-beta.26278.3">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>d9af20b993c474033098fe0851c2d71b4ecf434b</Sha>
<Sha>4b95fb1a9307265eb75f62d4937be50e6786e94e</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.Build.Tasks.Archives" Version="8.0.0-beta.26224.3">
<Dependency Name="Microsoft.DotNet.Build.Tasks.Archives" Version="8.0.0-beta.26278.3">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>d9af20b993c474033098fe0851c2d71b4ecf434b</Sha>
<Sha>4b95fb1a9307265eb75f62d4937be50e6786e94e</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.Build.Tasks.Packaging" Version="8.0.0-beta.26224.3">
<Dependency Name="Microsoft.DotNet.Build.Tasks.Packaging" Version="8.0.0-beta.26278.3">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>d9af20b993c474033098fe0851c2d71b4ecf434b</Sha>
<Sha>4b95fb1a9307265eb75f62d4937be50e6786e94e</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.Build.Tasks.Installers" Version="8.0.0-beta.26224.3">
<Dependency Name="Microsoft.DotNet.Build.Tasks.Installers" Version="8.0.0-beta.26278.3">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>d9af20b993c474033098fe0851c2d71b4ecf434b</Sha>
<Sha>4b95fb1a9307265eb75f62d4937be50e6786e94e</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.Build.Tasks.Templating" Version="8.0.0-beta.26224.3">
<Dependency Name="Microsoft.DotNet.Build.Tasks.Templating" Version="8.0.0-beta.26278.3">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>d9af20b993c474033098fe0851c2d71b4ecf434b</Sha>
<Sha>4b95fb1a9307265eb75f62d4937be50e6786e94e</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.Build.Tasks.Workloads" Version="8.0.0-beta.26224.3">
<Dependency Name="Microsoft.DotNet.Build.Tasks.Workloads" Version="8.0.0-beta.26278.3">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>d9af20b993c474033098fe0851c2d71b4ecf434b</Sha>
<Sha>4b95fb1a9307265eb75f62d4937be50e6786e94e</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.CodeAnalysis" Version="8.0.0-beta.26224.3">
<Dependency Name="Microsoft.DotNet.CodeAnalysis" Version="8.0.0-beta.26278.3">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>d9af20b993c474033098fe0851c2d71b4ecf434b</Sha>
<Sha>4b95fb1a9307265eb75f62d4937be50e6786e94e</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.Build.Tasks.TargetFramework" Version="8.0.0-beta.26224.3">
<Dependency Name="Microsoft.DotNet.Build.Tasks.TargetFramework" Version="8.0.0-beta.26278.3">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>d9af20b993c474033098fe0851c2d71b4ecf434b</Sha>
<Sha>4b95fb1a9307265eb75f62d4937be50e6786e94e</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.RemoteExecutor" Version="8.0.0-beta.26224.3">
<Dependency Name="Microsoft.DotNet.RemoteExecutor" Version="8.0.0-beta.26278.3">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>d9af20b993c474033098fe0851c2d71b4ecf434b</Sha>
<Sha>4b95fb1a9307265eb75f62d4937be50e6786e94e</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.Build.Tasks.Feed" Version="8.0.0-beta.26224.3">
<Dependency Name="Microsoft.DotNet.Build.Tasks.Feed" Version="8.0.0-beta.26278.3">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>d9af20b993c474033098fe0851c2d71b4ecf434b</Sha>
<Sha>4b95fb1a9307265eb75f62d4937be50e6786e94e</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.VersionTools.Tasks" Version="8.0.0-beta.26224.3">
<Dependency Name="Microsoft.DotNet.VersionTools.Tasks" Version="8.0.0-beta.26278.3">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>d9af20b993c474033098fe0851c2d71b4ecf434b</Sha>
<Sha>4b95fb1a9307265eb75f62d4937be50e6786e94e</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.SharedFramework.Sdk" Version="8.0.0-beta.26224.3">
<Dependency Name="Microsoft.DotNet.SharedFramework.Sdk" Version="8.0.0-beta.26278.3">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>d9af20b993c474033098fe0851c2d71b4ecf434b</Sha>
<Sha>4b95fb1a9307265eb75f62d4937be50e6786e94e</Sha>
</Dependency>
<Dependency Name="System.ComponentModel.TypeConverter.TestData" Version="8.0.0-beta.26153.1">
<Uri>https://github.com/dotnet/runtime-assets</Uri>
Expand Down Expand Up @@ -335,9 +335,9 @@
<Uri>https://github.com/dotnet/xharness</Uri>
<Sha>28f5ed3a089ff1a179f523da0c910348e9010414</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.PackageTesting" Version="8.0.0-beta.26224.3">
<Dependency Name="Microsoft.DotNet.PackageTesting" Version="8.0.0-beta.26278.3">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>d9af20b993c474033098fe0851c2d71b4ecf434b</Sha>
<Sha>4b95fb1a9307265eb75f62d4937be50e6786e94e</Sha>
</Dependency>
<Dependency Name="optimization.windows_nt-x64.MIBC.Runtime" Version="1.0.0-prerelease.23566.3">
<Uri>https://dev.azure.com/dnceng/internal/_git/dotnet-optimization</Uri>
Expand Down
38 changes: 19 additions & 19 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>8.0.28</ProductVersion>
<ProductVersion>8.0.29</ProductVersion>
<!-- File version numbers -->
<MajorVersion>8</MajorVersion>
<MinorVersion>0</MinorVersion>
<PatchVersion>28</PatchVersion>
<PatchVersion>29</PatchVersion>
<SdkBandVersion>8.0.100</SdkBandVersion>
<PackageVersionNet7>7.0.20</PackageVersionNet7>
<PackageVersionNet6>6.0.36</PackageVersionNet6>
Expand Down Expand Up @@ -88,21 +88,21 @@
<!-- SDK dependencies -->
<MicrosoftDotNetApiCompatTaskVersion>8.0.100</MicrosoftDotNetApiCompatTaskVersion>
<!-- Arcade dependencies -->
<MicrosoftDotNetBuildTasksFeedVersion>8.0.0-beta.26224.3</MicrosoftDotNetBuildTasksFeedVersion>
<MicrosoftDotNetCodeAnalysisVersion>8.0.0-beta.26224.3</MicrosoftDotNetCodeAnalysisVersion>
<MicrosoftDotNetGenAPIVersion>8.0.0-beta.26224.3</MicrosoftDotNetGenAPIVersion>
<MicrosoftDotNetGenFacadesVersion>8.0.0-beta.26224.3</MicrosoftDotNetGenFacadesVersion>
<MicrosoftDotNetXUnitExtensionsVersion>8.0.0-beta.26224.3</MicrosoftDotNetXUnitExtensionsVersion>
<MicrosoftDotNetXUnitConsoleRunnerVersion>2.5.1-beta.26224.3</MicrosoftDotNetXUnitConsoleRunnerVersion>
<MicrosoftDotNetBuildTasksArchivesVersion>8.0.0-beta.26224.3</MicrosoftDotNetBuildTasksArchivesVersion>
<MicrosoftDotNetBuildTasksInstallersVersion>8.0.0-beta.26224.3</MicrosoftDotNetBuildTasksInstallersVersion>
<MicrosoftDotNetBuildTasksPackagingVersion>8.0.0-beta.26224.3</MicrosoftDotNetBuildTasksPackagingVersion>
<MicrosoftDotNetBuildTasksTargetFrameworkVersion>8.0.0-beta.26224.3</MicrosoftDotNetBuildTasksTargetFrameworkVersion>
<MicrosoftDotNetBuildTasksTemplatingVersion>8.0.0-beta.26224.3</MicrosoftDotNetBuildTasksTemplatingVersion>
<MicrosoftDotNetBuildTasksWorkloadsPackageVersion>8.0.0-beta.26224.3</MicrosoftDotNetBuildTasksWorkloadsPackageVersion>
<MicrosoftDotNetRemoteExecutorVersion>8.0.0-beta.26224.3</MicrosoftDotNetRemoteExecutorVersion>
<MicrosoftDotNetVersionToolsTasksVersion>8.0.0-beta.26224.3</MicrosoftDotNetVersionToolsTasksVersion>
<MicrosoftDotNetPackageTestingVersion>8.0.0-beta.26224.3</MicrosoftDotNetPackageTestingVersion>
<MicrosoftDotNetBuildTasksFeedVersion>8.0.0-beta.26278.3</MicrosoftDotNetBuildTasksFeedVersion>
<MicrosoftDotNetCodeAnalysisVersion>8.0.0-beta.26278.3</MicrosoftDotNetCodeAnalysisVersion>
<MicrosoftDotNetGenAPIVersion>8.0.0-beta.26278.3</MicrosoftDotNetGenAPIVersion>
<MicrosoftDotNetGenFacadesVersion>8.0.0-beta.26278.3</MicrosoftDotNetGenFacadesVersion>
<MicrosoftDotNetXUnitExtensionsVersion>8.0.0-beta.26278.3</MicrosoftDotNetXUnitExtensionsVersion>
<MicrosoftDotNetXUnitConsoleRunnerVersion>2.5.1-beta.26278.3</MicrosoftDotNetXUnitConsoleRunnerVersion>
<MicrosoftDotNetBuildTasksArchivesVersion>8.0.0-beta.26278.3</MicrosoftDotNetBuildTasksArchivesVersion>
<MicrosoftDotNetBuildTasksInstallersVersion>8.0.0-beta.26278.3</MicrosoftDotNetBuildTasksInstallersVersion>
<MicrosoftDotNetBuildTasksPackagingVersion>8.0.0-beta.26278.3</MicrosoftDotNetBuildTasksPackagingVersion>
<MicrosoftDotNetBuildTasksTargetFrameworkVersion>8.0.0-beta.26278.3</MicrosoftDotNetBuildTasksTargetFrameworkVersion>
<MicrosoftDotNetBuildTasksTemplatingVersion>8.0.0-beta.26278.3</MicrosoftDotNetBuildTasksTemplatingVersion>
<MicrosoftDotNetBuildTasksWorkloadsPackageVersion>8.0.0-beta.26278.3</MicrosoftDotNetBuildTasksWorkloadsPackageVersion>
<MicrosoftDotNetRemoteExecutorVersion>8.0.0-beta.26278.3</MicrosoftDotNetRemoteExecutorVersion>
<MicrosoftDotNetVersionToolsTasksVersion>8.0.0-beta.26278.3</MicrosoftDotNetVersionToolsTasksVersion>
<MicrosoftDotNetPackageTestingVersion>8.0.0-beta.26278.3</MicrosoftDotNetPackageTestingVersion>
<!-- NuGet dependencies -->
<NuGetBuildTasksPackVersion>6.0.0-preview.1.102</NuGetBuildTasksPackVersion>
<!-- Installer dependencies -->
Expand Down Expand Up @@ -227,7 +227,7 @@
<!-- ILLink -->
<MicrosoftNETILLinkTasksVersion>8.0.0-rc.1.23406.6</MicrosoftNETILLinkTasksVersion>
<!-- Mono Cecil -->
<MicrosoftDotNetCecilVersion>0.11.4-alpha.26158.1</MicrosoftDotNetCecilVersion>
<MicrosoftDotNetCecilVersion>0.11.4-alpha.26281.3</MicrosoftDotNetCecilVersion>
<!-- ILCompiler -->
<MicrosoftDotNetILCompilerVersion>8.0.0-rc.1.23406.6</MicrosoftDotNetILCompilerVersion>
<!-- ICU -->
Expand All @@ -253,7 +253,7 @@
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-8_0_100_Transport
-->
<MicrosoftNETWorkloadEmscriptenCurrentManifest80100Version>8.0.28</MicrosoftNETWorkloadEmscriptenCurrentManifest80100Version>
<MicrosoftNETWorkloadEmscriptenCurrentManifest80100Version>8.0.29</MicrosoftNETWorkloadEmscriptenCurrentManifest80100Version>
<MicrosoftNETRuntimeEmscriptenVersion>$(MicrosoftNETWorkloadEmscriptenCurrentManifest80100Version)</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 Down
6 changes: 3 additions & 3 deletions global.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@
"dotnet": "8.0.126"
},
"msbuild-sdks": {
"Microsoft.DotNet.Arcade.Sdk": "8.0.0-beta.26224.3",
"Microsoft.DotNet.Helix.Sdk": "8.0.0-beta.26224.3",
"Microsoft.DotNet.SharedFramework.Sdk": "8.0.0-beta.26224.3",
"Microsoft.DotNet.Arcade.Sdk": "8.0.0-beta.26278.3",
"Microsoft.DotNet.Helix.Sdk": "8.0.0-beta.26278.3",
"Microsoft.DotNet.SharedFramework.Sdk": "8.0.0-beta.26278.3",
"Microsoft.Build.NoTargets": "3.7.0",
"Microsoft.Build.Traversal": "3.4.0",
"Microsoft.NET.Sdk.IL": "8.0.0-rc.1.23406.6"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,9 @@ internal static unsafe void StringToByValAnsiString(string str, byte* pNative, i

fixed (char* pManaged = str)
{
PInvokeMarshal.StringToAnsiString(pManaged, lenUnicode, pNative, /*terminateWithNull=*/true, bestFit, throwOnUnmappableChar);
PInvokeMarshal.StringToAnsiString(pManaged, lenUnicode, pNative,
/*terminateWithNull=*/true, bestFit, throwOnUnmappableChar,
nativeByteLength: charCount);
}
}
else
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -500,9 +500,14 @@ public static unsafe char AnsiCharToWideChar(byte nativeValue)
}

// c# string (UTF-16) to UTF-8 encoded byte array
// If specified, nativeByteLength represents the length of the output buffer and this function
// will not write more than that many bytes. If negative, this function writes as many bytes
// as needed to encode the string.
internal static unsafe byte* StringToAnsiString(char* pManaged, int lenUnicode, byte* pNative, bool terminateWithNull,
bool bestFit, bool throwOnUnmappableChar)
bool bestFit, bool throwOnUnmappableChar, int nativeByteLength = -1)
{
Debug.Assert(pNative != null || nativeByteLength == -1, "Native buffer should not be null when nativeByteLength is specified.");

bool allAscii = Ascii.IsValid(new ReadOnlySpan<char>(pManaged, lenUnicode));
int length;

Expand All @@ -515,6 +520,18 @@ public static unsafe char AnsiCharToWideChar(byte nativeValue)
length = GetByteCount(pManaged, lenUnicode);
}

// Clamp to nativeByteLength when caller provides a bounded output buffer (ByValTStr).
// For non-ASCII, ConvertWideCharToMultiByte will throw (Unix) or truncate (Windows)
// when the encoded bytes exceed the clamped length. This matches CoreCLR behavior.
if (nativeByteLength >= 0)
{
int maxBytesToWrite = terminateWithNull ? Math.Max(0, nativeByteLength - 1) : nativeByteLength;
if (length > maxBytesToWrite)
{
length = maxBytesToWrite;
}
}

if (pNative == null)
{
pNative = (byte*)Marshal.AllocCoTaskMem(checked(length + 1));
Expand All @@ -534,8 +551,8 @@ public static unsafe char AnsiCharToWideChar(byte nativeValue)
throwOnUnmappableChar);
}

// Zero terminate
if (terminateWithNull)
// Zero terminate if requested and the buffer is not specified to be size 0.
if (terminateWithNull && nativeByteLength != 0)
*(pNative + length) = 0;

return pNative;
Expand Down
Loading
Loading