Skip to content

Merging internal commits for release/9.0#125402

Open
vseanreesermsft wants to merge 15 commits intodotnet:release/9.0from
vseanreesermsft:internal-merge-9.0-2026-03-10-1317
Open

Merging internal commits for release/9.0#125402
vseanreesermsft wants to merge 15 commits intodotnet:release/9.0from
vseanreesermsft:internal-merge-9.0-2026-03-10-1317

Conversation

@vseanreesermsft
Copy link

No description provided.

Mirroring and others added 15 commits January 13, 2026 21:44
…ut (dotnet#124540)

Base64Url.DecodeFromChars in Microsoft.Bcl.Memory has an out-of-bounds
read bug: DecodeFrom uses Unsafe.Add with raw char values as indices
into a 256-element DecodingMap without checking the DecodeRemaining
return value first. Non-ASCII chars (value > ~2048) cause an
AccessViolationException on .NET 8.

Workaround: Add System.Text.Ascii.IsValid check before decoding to
reject non-ASCII input early. Base64/Base64Url only uses ASCII
characters, so any non-ASCII input is inherently invalid.

Fixes dotnet#124513

---------

Co-authored-by: t.csala <t.csala@criteo.com>
…ut (dotnet#124540)

Base64Url.DecodeFromChars in Microsoft.Bcl.Memory has an out-of-bounds
read bug: DecodeFrom uses Unsafe.Add with raw char values as indices
into a 256-element DecodingMap without checking the DecodeRemaining
return value first. Non-ASCII chars (value > ~2048) cause an
AccessViolationException on .NET 8.

Workaround: Add System.Text.Ascii.IsValid check before decoding to
reject non-ASCII input early. Base64/Base64Url only uses ASCII
characters, so any non-ASCII input is inherently invalid.

Fixes dotnet#124513

---------

Co-authored-by: t.csala <t.csala@criteo.com>
@dotnet-policy-service
Copy link
Contributor

Tagging subscribers to this area: @dotnet/area-system-memory
See info in area-owners.md if you want to be subscribed.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Tightens Base64(Base64Url) decoding error handling for trailing / partial blocks and adds a regression test to ensure non-ASCII (including chars > 255) input is rejected cleanly.

Changes:

  • Treat negative return from DecodeRemaining as invalid data immediately during final-block decoding.
  • Add a new invalid-input test case covering a non-ASCII character > 255 (\u1000) in the scalar decoding path.
  • Remove the BOM from the Base64Url Unicode API unit test file header (no functional impact).

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

File Description
src/libraries/System.Private.CoreLib/src/System/Buffers/Text/Base64Helper/Base64DecoderHelper.cs Adds an early invalid-data exit when DecodeRemaining signals failure.
src/libraries/System.Memory/tests/Base64Url/Base64UrlUnicodeAPIsUnitTests.cs Adds regression coverage for non-ASCII (>255) invalid decode input; normalizes file header.

You can also share your feedback on Copilot code review. Take the survey.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants