Pull Request on 2026年08月28日

dotnet/runtimeにマージされたPull RequestをAIで日本語要約

注意点

このページは、dotnet/runtimeリポジトリにマージされたPull Requestを自動的に収集し、その内容をAIが要約した内容を表示しています。そのため、必ずしも正確な要約ではない場合があります。


目次

  1. #132906 [wasm] Carry R2R function names in a name section, not the export table
  2. #132904 [release/11.0] Normalize X509Chain App/Cert policies across OSes
  3. #132903 [release/11.0] Gate Composite ML-DSA CNG tests on NCrypt support
  4. #132896 Avoid unnecessary JIT data section constants
  5. #132885 [release/11.0] Exclude Helix Job Monitor stages when toggled off
  6. #132884 Exclude Helix Job Monitor stages when toggled off
  7. #132883 [release/11.0] Correctly exclude the Helix Job Monitor stage in coreclr outerloop
  8. #132882 Correctly exclude the Helix Job Monitor stage in coreclr outerloop
  9. #132880 [release/11.0] Temporarily disable Helix Job Monitor
  10. #132878 Fix WebProxy treating hosts with non-ASCII dot separators as local
  11. #132870 [wasm] Fail hard when the engine rejects a Webcil R2R image
  12. #132868 [release/11.0-rc1] Update Helix Job Monitor to 11.0.0-beta.26427.10
  13. #132869 [release/11.0] Update Helix Job Monitor to 11.0.0-beta.26427.10
  14. #132867 Update Helix Job Monitor to 11.0.0-beta.26427.10
  15. #132857 Fix crossgen2 rejecting input files with uppercase .DLL/.EXE extensions
  16. #132856 [release/11.0] Document async validation cancellation contract
  17. #132854 Gate Composite ML-DSA CNG tests on NCrypt support
  18. #132853 [release/11.0] Add message template formatting to DataAnnotations validation attributes
  19. #132838 Fix wrong element types (bytes vs chars) in Base64/Base64Url XML docs
  20. #132833 Clarify documentation for BackgroundServiceExceptionBehavior.StopHost
  21. #132832 Detect ephemeral client cert key via SEC_E_UNKNOWN_CREDENTIALS in QUIC
  22. #132826 Allow async variants of ComImport methods
  23. #132766 Throw JsonException for duplicate JsonObject properties
  24. #132765 Increase spinning/polling aggressiveness in the thread pool in low-saturation scenarios
  25. #132751 Reset bFallingBack and iRecursionCount on 0 return
  26. #132739 [browser] Generate the Wasm.Build.Tests Helix class list at build time
  27. #132738 Include issue authors in CI scan dedup searches
  28. #132665 Remove the uniprocessor (non-TLS) allocation helpers
  29. #132659 Add managed Composite ML-KEM implementation
  30. #132527 Add a SuperPMI collection over the Aspire CLI (NativeAOT)
  31. #132473 Handle Unicode scalars in UTF-8 parsing and formatting
  32. #132348 Normalize X509Chain App/Cert policies across OSes
  33. #132275 Add configurable SSE parser buffer limit
  34. #132190 Report CoreCLR Write Barriers And Code-Heap Stubs In Traces
  35. #132093 Fix contract violation in AsyncThunkStubManager::TraceManager
  36. #131655 Build vararg support only where it is reachable
  37. #130870 Fix LargestVectorSize and buffer size in ARM HW intrinsic tests

#132906 [wasm] Carry R2R function names in a name section, not the export table

概要

WebAssembly エンジンの effective type-size limit を超える問題を解決するため、WebCil wasm object writer がすべての定義関数をエクスポートするのをやめ、代わりに関数名を name カスタムセクションで保持するようにしました。エクスポートテーブルはホストが呼び出すスタブ関数のみに限定されます。

フレームワーク規模(181アセンブリ + corelib)での効果:

  • 関数数:232,673(不変)
  • エクスポート数:232,675 → 4
  • エクスポートセクション:29.0 MB → 65 bytes
  • 検証結果:❌ effective type size exceeds 1000000 → ✅ valid

変更内容

  • WebCilObjectWriter.cs: name カスタムセクションをモジュール末尾に追加し、エクスポートをホスト呼び出しスタブのみに制限
  • WasmObjectWriter.cs: ライター挿入スタブの名前追跡機能を追加
  • WasmNameSection.cs(新規): name カスタムセクションの関数名サブセクション生成を実装
  • WasmR2RAssert.cs: テストを更新し、スタブのみのエクスポートと name セクションが定義関数をカバーしていることを検証
  • webcil.md: コンパイル済みメソッドボディをエクスポートしないこと、名前が name セクションに存在することをドキュメント化

パフォーマンスへの影響

  • モジュール検証: フレームワーク規模で無効化されていたモジュールが検証可能に(effective type-size limit の超過を解決)
  • モジュールサイズ: エクスポートセクション削減により大幅に削減(29.0 MB → 65 bytes)
  • ランタイム動作: R2R 有効時 5 ms vs 解釈実行 112–119 ms で同一の出力確認、R2R が実際に使用されていることを検証
  • cross-module リンケージ: 共有テーブル経由の仕組みで実装されており、エクスポート削除の影響なし(call_indirect による呼び出しのため)

関連Issue

#132905

その他

  • 互換性: 内部実装の変更。公開 API への影響なし
  • 動作原理: 関数への直接 call はインデックスを使用、cross-module 呼び出しは function imports ではなく共有テーブル経由の R2R fixup セルで解決されるため、エクスポートテーブルは不要
  • name セクション: wasm エンジンでは無視されるが、wasm-merge -g がコンポジット compositeモジュールのデバッガ名前解決に使用可能
  • テスト検証: composite/非 composite 両モードでブラウザ end-to-end テスト実施、ILCompiler.ReadyToRun.Tests で 55/0(browser)、85/0(デフォルト)合格

#132904 [release/11.0] Normalize X509Chain App/Cert policies across OSes

概要

X509Chain APIの証明書ポリシー検証(ApplicationPolicies・CertificatePolicies)をプラットフォーム間で統一し、Windows・Linux・macOS・Androidで一貫した動作を実現します。これまで、ms-appPolicy、EKU、CertPolicy、CertPolicyMappingなどの拡張機能の処理がプラットフォーム依存であり、チェーン検証結果がOSによって異なる問題を解決します。

変更内容

  • CertificatePolicy.cs: 証明書ポリシーバリデータの実装を大幅拡張(314行追加)。ポリシーマッピング、Any-Policy、Inhibit-Any-Policyの処理をWindows互換で統一実装
  • OpenSslX509ChainProcessor.cs: Linux/OpenSSLプラットフォームでのポリシー検証ロジックを刷新(110行追加)
  • ChainPal.Android.cs / ChainPal.Apple.cs: 各プラットフォーム実装を更新し、共通のポリシーバリデータに準拠
  • Oids.cs: 新しいOIDの追加
  • テストの大幅強化: 新規テストクラス「AppAndCertPoliciesChainTests.cs」(543行)と「CorruptPoliciesChainTests.cs」(485行)を追加。破損した拡張機能、ポリシーマッピング、Any-Policyなど包括的なテストカバレッジを実装

パフォーマンスへの影響

影響なし(ポリシー検証の正確性向上がメインで、パフォーマンス要件の変更は報告されていません)

関連Issue

#132348(元のPR)

その他

  • 互換性: 破壊的変更なし。Windows互換性を保ちつつ、他のプラットフォームの動作をWindows標準に統一
  • リスク評価: 低リスク(大量のテストカバレッジにより検証)
  • 対象: .NET 11.0リリースへのバックポート
  • 背景: 証明書ポリシーバリデータは2015年から本質的に変更されていなかったが、プラットフォーム間の不一致を修正。CertificateRequest APIの整備により、テストケース生成が容易になったため、この時点での大規模修正が可能に

#132903 [release/11.0] Gate Composite ML-DSA CNG tests on NCrypt support

概要

Windows BCrypt が Composite ML-DSA をサポートするようになったことで発生していた CI テスト失敗を修正するテスト専用の修正です。テスト環境に合わせて NCrypt サポートに基づいた条件付きテスト実行を導入し、適切なプラットフォーム環境でのみテストが実行されるようにゲートします。

変更内容

  • CompositeMLDsaCngTests.Windows.cs: テストロジックの調整と NCrypt サポート確認の追加 (+7/-8)
  • CompositeMLDsaFactoryTests.cs: テスト実装の簡略化と条件付き実行の改善 (+6/-22)
  • CompositeMLDsaTestHelpers.Cng.cs (新規): NCrypt サポート検出ロジックと Composite ML-DSA CNG 関連のテストヘルパー実装 (+43)
  • CompositeMLDsaTestHelpers.cs (新規): Composite ML-DSA テスト共通ユーティリティの追加 (+56)

パフォーマンスへの影響

影響なし

関連Issue

#132830、#132854

その他

本修正は release/11.0 ブランチへのバックポートです。テストのみの変更であり、ランタイム動作には影響しません。


#132896 Avoid unnecessary JIT data section constants

概要

JIT コンパイラのデータセクション管理を最適化し、重複する定数の参照やアライメント対応を改善。各データエントリに論理オフセット(dsOffset)を割り当て、重複する定数は同じアライメント済みロケーションを参照するようにすることで、不要なデータセクションエントリの生成を削減。SIMD整数除算コード生成では、符号付き除算でのみオーバーフロー検査に必要な全ビット1の定数を生成するよう最適化。

変更内容

  • emit.h: dataSection 構造体に dsOffset フィールドを追加し、各データエントリの論理オフセットを保持
  • emit.cpp: データ生成時(emitDataGenBeg、BBテーブル、非同期リジューム テーブル)にアライメント済みオフセットを割り当て。重複定数マッチングに dsOffset を使用。emitEndCodeGen および診断機能を dsOffset に依存するよう更新
  • emitarm.cpp: ARM逆アセンブリヘルパーを更新。BBテーブルセクションの検索で再構築した詰められたオフセットではなく dsOffset を使用
  • hwintrinsiccodegenxarch.cpp: SIMD整数除算の定数生成ロジック最適化

パフォーマンスへの影響

メモリ削減: 複数プラットフォーム・構成全体で測定コレクションサイズが削減

  • Linux x64: coreclr_tests で -5.14%、libraries_tests で -4.66%、realworld で -6.39%
  • Windows x64: aspnet2 で -4.79%、coreclr_tests で -3.79%、realworld で -4.67%
  • Linux/Windows Arm64: 同様に 0.03% ~ -4.23% の削減

全体的にメモリフットプリントと生成されるコード量が削減(破壊的な変更なし)。

関連Issue

なし

その他

なし


#132885 [release/11.0] Exclude Helix Job Monitor stages when toggled off

概要

Helix Job Monitor ステージが無効化された場合に、それを除外するようにパイプライン設定を修正するバックポート。 元のPR #132884 をrelease/11.0ブランチにバックポートしたもの。

変更内容

複数のCoreCLRおよびLibrariesテストパイプラインYAML設定ファイル(44ファイル以上)を修正:

  • eng/pipelines/coreclr/ 配下の各テストパイプライン(crossgen2、gcstress、interpreter等)
  • eng/pipelines/libraries/ 配下のアウトループテストパイプライン
  • eng/pipelines/runtime-*.yml のモバイルプラットフォーム関連パイプライン

各ファイルで6行追加・5行削除の小規模な変更。 Helix Job Monitor ステージの条件付き実行ロジックを調整し、ステージが無効化された際に確実に除外されるように改善。

パフォーマンスへの影響

影響なし

関連Issue

#132884

その他

  • バックポートのため、元PRの内容に完全に準拠しています
  • CI/CDパイプラインの設定変更で、ランタイムコード自体の変更はありません
  • インフラストラクチャ/ビルドシステムの改善であり、公開APIへの影響はありません

#132884 Exclude Helix Job Monitor stages when toggled off

  • 作成者: @premun
  • 作成日時: 2026年08月28日 12:03:55(UTC)
  • マージ日時: 2026年08月28日 12:10:57(UTC)
  • ラベル: area-Infrastructure

概要

Azure Pipelines YAMLの定義を更新し、enableHelixJobMonitor変数がオフの場合にHelix Job Monitor ステージを除外するようにしました。helix-job-monitor.ymlジョブテンプレートの挿入を${{ if eq(variables['enableHelixJobMonitor'], true) }}条件でガードすることで、パイプライン実行時の不要なステージ生成を防ぎます。

変更内容

  • CoreCLR垂直パイプライン(42ファイル):CrossGen2、GCストレステスト、ハードウェア内在関数テスト、ライブラリテストなど複数のテストパイプライン定義を更新
  • ランタイムプラットフォームパイプライン:WebAssembly(wasm)、Android、iOS相当、Mac Catalyst、LLVM、サニタイザー対応パイプラインを更新
  • ライブラリパイプライン:Outerloopテスト(標準およびMono)を更新
  • LabRuntimeパイプライン:runtimelab.ymlを更新

全ファイルで共通のパターンは、helix-job-monitor.ymlのジョブテンプレート挿入ステップを${{ if }}条件で囲む変更(各ファイルで+6/-5行)。

パフォーマンスへの影響

影響なし。この変更はパイプライン定義レベルの条件付き実行であり、実行時のパフォーマンスには影響しません。

関連Issue

なし

その他

  • 内部インフラストラクチャの変更であり、公開APIや言語機能への影響はありません
  • パイプライン実行の効率化を目的とした整備作業で、既存のパイプライン動作に破壊的変更はありません

#132883 [release/11.0] Correctly exclude the Helix Job Monitor stage in coreclr outerloop

概要

release/11.0ブランチへのバックポート。coreclrのouterloopビルドにおいて、Helix Job Monitor stageを正しく除外する修正です。

変更内容

  • eng/pipelines/coreclr/ci.yml: CI/CDパイプライン設定を修正。Helix Job Monitor stageの除外ロジックを調整(6行追加、5行削除)

パフォーマンスへの影響

影響なし

関連Issue

#132882

その他

  • このPRはアップストリーム変更(#132882)のバックポートです
  • 対象ブランチ: release/11.0
  • CI/CDパイプラインの修正のため、エンドユーザーの機能・動作への直接的な影響はありません

#132882 Correctly exclude the Helix Job Monitor stage in coreclr outerloop

概要

CoreCLR outerloop Azure Pipelines定義を更新し、Helix Job Monitorステージを条件付きで含める変更です。enableHelixJobMonitorパラメータが有効な場合のみJob Monitorテンプレートをインクルードするよう修正されました。デフォルトはenableHelixJobMonitor: falseのままなので、このパイプラインではモニタージョブは除外されます。

変更内容

  • eng/pipelines/coreclr/ci.yml: Helix Job Monitor(helix-job-monitor.yml)のテンプレート包含部分をコンパイル時条件(${{ if ... }})でラップし、enableHelixJobMonitorの値に基づいて条件付きインクルードするよう修正

パフォーマンスへの影響

影響なし(ビルドパイプライン定義の変更のため、ランタイム実行やコンパイルのパフォーマンスには影響しません)

関連Issue

なし

その他

この変更はAzure Pipelines YAMLの条件付き実行構文を活用した改善であり、不要なジョブの実行を防ぎパイプライン効率を向上させるものです。


#132880 [release/11.0] Temporarily disable Helix Job Monitor

概要

Helix Job Monitorを一時的に無効化するバックポート。 このPRは#132847のrelease/11.0ブランチへのバックポートで、複数のCI/CDパイプライン設定ファイルを修正しています。

変更内容

  • eng/pipelines/以下のYAMLファイル群: Helix Job Monitorの有効化フラグを1ファイルあたり1行の変更で無効化
    • CoreCLR関連パイプライン(ci.yml、crossgen2系、gc系、gcstress系、jitstress系など)
    • Libraries関連パイプライン(outerloop-mono.yml、outerloop.yml)
    • プラットフォーム固有パイプライン(runtime-android.ylm)
    • 全30ファイル以上が対象

パフォーマンスへの影響

影響なし(ビルドパイプライン設定の変更のため)

関連Issue

#132847

その他

  • このPRはgithub-actions[bot]により自動作成されたバックポート
  • release/11.0ブランチをターゲット
  • .NET 10以降のため、通常のrelease/X.0ブランチが対象(-stagingサフィックスなし)

#132878 Fix WebProxy treating hosts with non-ASCII dot separators as local

概要

WebProxyが非ASCII文字のドット区切り文字(U+3002、U+FF0E、U+FF61など)を含むホスト名を正しく処理していない問題を修正しました。従来はUri.HostのASCIIドットのみを検索していたため、intranet。corpのような名前がローカルホストと判定され、BypassProxyOnLocal設定時のプロキシ迂回動作が不正確でした。修正後はUri.IdnHostを使用することで、すべてのIDN区切り文字を.に正規化して処理します。

変更内容

  • WebProxy.NonWasm.cs: IsLocalメソッド内の2つの実装でUri.HostからUri.IdnHostに変更。ホスト名の比較時にIDN形式を使用することで、非ASCII区切り文字を正しく扱う
  • WebProxy.Wasm.cs: 同様にUri.HostからUri.IdnHostに変更
  • WebProxyTest.cs: 3つの新しいテストケース追加(U+3002、U+FF0E、U+FF61で区切られたホスト名がローカルホストと判定されないことを検証)

パフォーマンスへの影響

影響なし(Uri.IdnHostへのアクセスは既存の正規化パスと同等)

関連Issue

#132842

その他

  • テスト結果: System.Net.WebProxy.Testsで3つの既存失敗を修正(Total 60, Failed 0)。System.Net.Requests.Testsは1215テスト中失敗なし
  • IPv6スコープID処理: IdnHost使用により、IPv6アドレスのスコープIDがより正しく保持されるようになり、ローカルアドレスマッチングが改善されました
  • InvariantGlobalization対応: InvariantGlobalization=true環境でもIdnHostは正しく区切り文字をマッピングするため、プラットフォーム固有の保護ガード不要
  • 未対応: マシンのプライマリドメイン自体がIDN名である場合、IPGlobalProperties.GetIPGlobalProperties().DomainNameとの比較で不一致の可能性あり(現在は対象外とし、より広い改修を避けるため変更なし)

#132870 [wasm] Fail hard when the engine rejects a Webcil R2R image

  • 作成者: @lewing
  • 作成日時: 2026年08月28日 01:29:27(UTC)
  • マージ日時: 2026年08月28日 09:13:47(UTC)
  • ラベル: arch-wasm area-Host

概要

CoreCLR-on-wasmで、Webcil R2R画像(.wasmファイル)がWebAssemblyエンジンに拒否された場合の処理を改善しました。従来は例外を無視して通常のフォールバックと同じく無言で解釈実行に切り替わっていましたが、今後は明示的にエラーをスローするようにしました。これにより、R2R画像が存在しない場合と存在但し無効な場合を区別できるようになり、問題の可視化が向上します。

変更内容

  • src/coreclr/hosts/corerun/wasm/libCorerun.js: WebAssembly.Module()の構築に失敗した場合の例外ハンドリングを変更
    • 変更前:例外をキャッチしてfalseを返す(R2R画像が存在しない場合と同じ扱い)
    • 変更後:例外をスローして、エラー情報(wasmファイルパスとエラーメッセージ)とともに処理を中断

パフォーマンスへの影響

なし

関連Issue

#132865、#132855

その他

この変更により、例えばcrossgen2が出力したWebAssembly関数のパラメータ数が実装定義の上限(例:1000)を超える場合、従来はReady to Run header not foundという汎用ログのみで問題が隠蔽されていましたが、今後は具体的なWebAssemblyモジュール構築エラーが明示的に報告されます。これはデバッグとパフォーマンス回帰の検出に有益です。


#132868 [release/11.0-rc1] Update Helix Job Monitor to 11.0.0-beta.26427.10

概要

dotnet/arcadeの最新コミット(2cdfe99944d984749c8bdfc7d8d6a2589ed15d6d)に基づいて、Microsoft.DotNet.Helix.JobMonitorを11.0.0-beta.26427.10にアップデートします。このPRはrelease/11.0-rc1ブランチにおけるHelix Job Monitorの機能を再度有効化するものです。

変更内容

  • .config/dotnet-tools.json: ツール依存関係のバージョンを更新(1行変更)
  • eng/Version.Details.props: バージョン詳細情報を更新(1行変更)
  • eng/Version.Details.xml: dotnet/arcadeの依存関係バージョンを11.0.0-beta.26427.10に更新(3行変更)
  • eng/pipelines/runtime.yml: runtime.ymlのHelix Job Monitor監視変数を復元(1行変更)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他


#132869 [release/11.0] Update Helix Job Monitor to 11.0.0-beta.26427.10

概要

dotnet/arcade内のHelixJobMonitor依存関係を11.0.0-beta.26427.10に更新し、release/11.0ブランチでHelixJobMonitorを再度有効化するPull Requestです。このアップデートにより、ランタイムパイプラインのHelixJobMonitor機能が復旧されます。

変更内容

  • .config/dotnet-tools.json: HelixJobMonitor関連の依存関係バージョン更新
  • eng/Version.Details.props: ビルドメタデータの更新(1行変更)
  • eng/Version.Details.xml: dotnet/arcadeコミット参照の更新(3行変更)
  • eng/pipelines/runtime.yml: ランタイムパイプラインのHelixJobMonitor監視設定を復旧(1行変更)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このアップデートはdotnet/arcade内の同期された更新(コミット2cdfe99944d984749c8bdfc7d8d6a2589ed15d6d)に対応しています。2026-08-22以降の履歴監査により、このrelease/11.0ブランチに対する最近の無効化コミットが見つからなかったため、runtime.yml内の監視変数のみが復旧されました。


#132867 Update Helix Job Monitor to 11.0.0-beta.26427.10

  • 作成者: @mmitche
  • 作成日時: 2026年08月27日 23:48:28(UTC)
  • マージ日時: 2026年08月28日 17:36:56(UTC)
  • ラベル: area-Infrastructure

概要

Microsoft.DotNet.Helix.JobMonitorを11.0.0-beta.26427.10にアップデートし、依存関係メタデータを更新するPRです。 また、#132806と#132847で一時的に無効化されていたモニター設定を復元しています。

変更内容

  • .config/dotnet-tools.json: JobMonitorのバージョンを更新
  • eng/Version.Details.props, eng/Version.Details.xml: 依存関係メタデータを更新
  • 複数のCoreCLRパイプラインファイル(eng/pipelines/coreclr/*.yml): 各パイプライン設定でJobMonitorバージョンを統一

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このPRは主にビルドツールチェーンとCI/CDパイプラインの保守に関連しており、ランタイムやコンパイラの機能には直接的な影響を与えません。 以前のPR(#132806、#132847)で一時的に無効化されていたモニター設定が復元されます。


#132857 Fix crossgen2 rejecting input files with uppercase .DLL/.EXE extensions

  • 作成者: @Copilot
  • 作成日時: 2026年08月27日 20:56:27(UTC)
  • マージ日時: 2026年08月28日 16:57:50(UTC)
  • ラベル: area-ReadyToRun

概要

crossgen2が大文字の.DLL/.EXE拡張子を持つアセンブリを拒否する問題を修正しました。この問題はファイルシステムやネットワークシェア(WinFsp/virtiofs など)で大文字に正規化されるケースで発生し、PublishReadyToRunビルドを破損させていました。Microsoft.NETCore.App.Crossgen2 10.0.5 → 10.0.9でのリグレッションです。

変更内容

src/coreclr/tools/aot/crossgen2/Program.cs

  • RunSingleCompilationメソッド内の拡張子チェックをcase-sensitiveなswitch式からStringComparison.OrdinalIgnoreCaseを使用するif/else if文に変更
  • .dll、.DLL、.Dll、.exe、.EXEなど、あらゆるケースバリエーションを受け入れるように修正
  • 出力ファイル命名動作は既存のまま維持

パフォーマンスへの影響

影響なし

関連Issue

#132554

その他

この修正により、大文字拡張子を持つアセンブリファイルを正常に処理できるようになり、WinFspやvirtiofosなどのケース正規化ファイルシステム上でのPublishReadyToRunビルドが復旧します。


#132856 [release/11.0] Document async validation cancellation contract

概要

.NET 11で新規追加された非同期DataAnnotations検証機能のAsyncValidationAttributeに対して、キャンセルトークンの契約(CancellationTokenの遵守義務と、タイムアウトが必要な場合の対応方法)をドキュメント化するXML doc commentを追加します。これにより、実装者がキャンセルトークンを無視する場合のリスク(呼び出し側の状態を使用し続けるバックグラウンドタスクが残される問題)を明確にします。

変更内容

  • src/libraries/System.ComponentModel.Annotations/src/System/ComponentModel/DataAnnotations/AsyncValidationAttribute.cs: XML doc commentにremarks セクションを追加し、以下を記載
    • 実装者はCancellationTokenを遵守する義務
    • タイムアウトが必要な場合は呼び出し側がタイムアウトにリンクされたCancellationTokenを渡すべき
    • キャンセルトークンを無視したバリデーターの場合、クリーンアップはそのタスクの完了を待つため、タイムアウト設定がない場合は待機が続く可能性があることを明記

パフォーマンスへの影響

影響なし(ドキュメント変更のみ、実行時動作・IL・APIに変更なし)

関連Issue

#132794、#128656、#132685、#132705

その他

  • ドキュメント変更のみのため、新規テストは追加されていません
  • 既存のSystem.ComponentModel.Annotations.Testsへの影響なし
  • セキュリティレビューで識別された信頼性の問題に対する契約完成化です
  • release/11.0へのバックポートです

#132854 Gate Composite ML-DSA CNG tests on NCrypt support

概要

Composite ML-DSA CNG テストの Windows プラットフォーム対応判定を改善しています。Windows ビルド + UBR に基づいた Composite ML-DSA サポート検出と、NCrypt サポートに基づいた CNG テストのゲーティングを追加しました。BCrypt サポートがあっても対応する NCrypt サポートがない場合、CNG テストをスキップするようになります。

変更内容

  • PlatformDetection.Windows.cs: IsWindowsCompositeMLDsaSupported プロパティを追加。Windows ビルド + UBR の閾値に基づいて Composite ML-DSA の可用性を検出(キャッシュ機構付き)
  • CompositeMLDsaTestHelpers.Cng.cs: IsCngSupported メソッドを新規追加。NCrypt プロービングにより、CNG/NCrypt を通じた Composite ML-DSA サポートの有無を判定
  • CompositeMLDsaFactoryTests.cs: Windows サポート期待値の検証を新しい IsWindowsCompositeMLDsaSupported を使用するように更新
  • CompositeMLDsaCngTests.Windows.cs: CNG テストのゲーティングを NCrypt ベースのゲートに切り替え
  • Interop.NCryptOpenStorageProvider.cs: テストゲーティングで使用される NCryptIsAlgSupported interop インポートを追加

パフォーマンスへの影響

影響なし

関連Issue

#132830

その他

  • テスト用ユーティリティの内部実装の変更です(公開 API への影響なし)
  • Windows の段階的なサービス提供に対応するための一時的な対応として位置付けられています
  • GitHub Copilot がこのプルリクエストの作成を支援しました

#132853 [release/11.0] Add message template formatting to DataAnnotations validation attributes

概要

.NET 11の新しいメッセージテンプレート フォーマット機能をrelease/11.0にバックポートするプルリクエストです。ValidationAttribute.FormatMessageというAPI承認済みの公開仮想メソッドを追加し、DataAnnotations検証属性がローカライズされたメッセージテンプレートを提供しながら、各属性が独自のプレースホルダー引数を提供できるようにします。これにより、Microsoft.Extensions.Validationの新しいローカライズ機能と互換性を持たせ、Minimal APIsとBlazorで共通のメッセージフォーマッティング方法が利用できるようになります。

変更内容

  • System.ComponentModel.Annotations: ValidationAttributeに公開仮想メソッドFormatMessageを追加し、CompareAttribute、FileExtensionsAttribute、LengthAttribute、MaxLengthAttribute、MinLengthAttribute、RangeAttribute、RegularExpressionAttribute、StringLengthAttributeで明示的オーバーライドを実装
  • 参照アセンブリ: 新しいAPI署名を追加
  • Microsoft.Extensions.Options ソースジェネレータ: Emitter.csとSymbolLoader.csを更新し、生成されたコードでFormatMessageオーバーライドを生成
  • テスト: DataAnnotations検証属性とソースジェネレータの出力用ベースラインを更新し、新しいメソッドのテストケースを追加

パフォーマンスへの影響

影響なし。既存のFormatErrorMessageの動作とCurrentCultureフォーマッティングは変更されません。

関連Issue

  • #132764 (main向けの元のプルリクエスト)
  • #132605 (API提案)
  • dotnet/aspnetcore#4848、dotnet/aspnetcore#12158、dotnet/runtime#72469、dotnet/aspnetcore#66392 (顧客からの要望)

その他

  • リスク評価: 低から中程度。APIは承認済みで追加的な変更であり、既存の機能は削除されていません
  • テスト状況: System.ComponentModel.Annotations で1,008テスト合格、Microsoft.Extensions.Options で計437テスト合格(net11/net481)、ソースジェネレータテストで完全カバレッジを実施
  • 後方互換性: .NET Framework生成出力は変更なし。ダウンレベル環境では新しいAPIが公開されない場合のみ対応

#132838 Fix wrong element types (bytes vs chars) in Base64/Base64Url XML docs

  • 作成者: @Copilot
  • 作成日時: 2026年08月27日 14:59:02(UTC)
  • マージ日時: 2026年08月28日 18:21:30(UTC)
  • ラベル: area-System.Buffers

概要

Base64/Base64Url APIのXML doc コメントにおける誤った要素型の記述を修正します。主な問題として、Base64Url.EncodeToCharsが返す値をバイト数ではなく文字数として正しく記載すること、UTF-8エンコーディング向けと文字向けのメソッドで異なる戻り値型の記述を統一すること、およびデコード操作での説明誤りを修正しています。動作変更なし。

var dest = new char[10];
int written = Base64Url.EncodeToChars("fff"u8, dest); // 4 chars, not bytes

変更内容

  • Base64Encoder.cs: GetEncodedLength ドキュメントを修正(UTF-8の場合はバイト、文字の場合は文字数と明記)
  • Base64Decoder.cs: ArgumentExceptionの説明を「出力先がエンコード済み出力に対して小さすぎる」から「デコード済み出力に対して小さすぎる」に修正、isFinalBlockパラメータの説明を修正
  • Base64UrlEncoder.cs: EncodeToCharsの戻り値を「バイト数」から「文字数」に修正、TryEncodeToUtf8のbytesWritten説明を修正、GetEncodedLengthの説明を統一
  • Base64UrlDecoder.cs: デコード操作の説明誤りを複数箇所で修正、isFinalBlockの説明を修正
  • Base64UrlValidator.cs: 「base 64」から「Base64Url」への表記統一
  • 全体: XML docタグのレンダリング時に漏れ出していた>文字を削除

パフォーマンスへの影響

影響なし

関連Issue

#132834

その他

なし


#132833 Clarify documentation for BackgroundServiceExceptionBehavior.StopHost

  • 作成者: @svick
  • 作成日時: 2026年08月27日 13:11:41(UTC)
  • マージ日時: 2026年08月28日 12:08:14(UTC)
  • ラベル: area-Extensions-Hosting

概要

BackgroundServiceExceptionBehavior enum の XML ドキュメントを改善し、IHost が BackgroundService の障害時にどのように動作するかをより明確に説明します。<remarks> タグは Learn.Microsoft.com の API ドキュメント生成時に表示されないため、重要な詳細情報を <summary> タグの複数段落に移動することで、生成されたドキュメントに確実に表示されるようにしました。

変更内容

  • src/libraries/Microsoft.Extensions.Hosting/src/BackgroundServiceExceptionBehavior.cs
    • enum メンバーの振る舞いに関する詳細を <remarks> から複数段落の <summary> ブロックに移動
    • StopHost および Ignore のドキュメント表現を更新し、現在のホスト例外伝播とログ動作を反映

パフォーマンスへの影響

影響なし

関連Issue

#124863 のフォローアップ

その他

  • このドキュメント更新は公開 API のドキュメンテーション改善であり、実装コードの変更を含みません
  • 復号化されたコメント中の注釈では、StopHost と Ignore の動作が BackgroundService の ExecuteTask(監視対象の背景操作)で例外が発生した場合に適用され、StartAsync/StopAsync オーバーライドからの例外には適用されないことが明記されています

#132832 Detect ephemeral client cert key via SEC_E_UNKNOWN_CREDENTIALS in QUIC

  • 作成者: @rzikm
  • 作成日時: 2026年08月27日 12:50:08(UTC)
  • マージ日時: 2026年08月28日 17:17:38(UTC)
  • ラベル: area-System.Net.Quic

概要

Windows上のQUICで、エフェメラル秘密鍵を持つクライアント証明書の検出ロジックを修正しました。Schannel が SEC_E_UNKNOWN_CREDENTIALS (0x8009030D) を返すようになった環境でも、適切に AuthenticationException で報告するよう対応しています。

変更内容

  • src/libraries/System.Net.Quic/src/System/Net/Quic/Internal/MsQuicConfiguration.cs
    • エフェメラル秘密鍵の検出ガード条件を拡張し、既存の QUIC_STATUS_CERT_NO_CERT (SEC_E_NO_CREDENTIALS) に加えて SEC_E_UNKNOWN_CREDENTIALS も検出対象に追加
    • サーバー証明書とクライアント証明書でSchannel が異なるステータスを返す動作差を説明するコメントを追加

パフォーマンスへの影響

影響なし

関連Issue

#132831

その他

  • 破壊的変更なし — 公開APIの変更はありません
  • スコープ限定 — QUIC固有の変更で、SslStream など他のコンポーネントへの影響はありません
  • CI検証 — Windows/Schannel のバージョンに依存する動作差のため、CIで検証されます
  • 既存テスト — 回帰テスト Client_CertificateWithEphemeralKey_Throws で検証済み

#132826 Allow async variants of ComImport methods

概要

CLR→COM スタブが transient IL として生成される(#131494)ようになったことに伴い、COM インターフェイスメソッドの async バリアント対応に関する特殊ケース処理が不要になったため、その処理を削除します。これにより async 変種の COM メソッドが通常の marshalling IL から直接コンパイルされるようになります。

変更内容

  • src/coreclr/tools/Common/JitInterface/CorInfoImpl.cs: async エントリポイント不在に対応するための特殊ケース処理を削除(7行削除)
  • src/coreclr/vm/jitinterface.cpp: 関連する特殊ケース処理を削除(4行削除、2行追加)

パフォーマンスへの影響

影響なし

関連Issue

#131494

その他

この変更は COM 相互運用性機能の内部実装の簡略化であり、公開 API には影響しません。


#132766 Throw JsonException for duplicate JsonObject properties

概要

JsonSerializerOptions.AllowDuplicatePropertiesがfalseの場合、JsonObjectコンバーターが重複プロパティに対してArgumentExceptionを発生させていた問題を修正。ドキュメントに従ってJsonExceptionを発生させるように改善しました。JsonObject.Addの代わりにTryAddと既存の重複プロパティ処理ヘルパーを使用し、他のSystem.Text.Jsonコンバーターの動作と統一します。

変更内容

  • JsonObjectConverter.cs: JsonObject.AddからTryAddに変更し、重複プロパティ検出時に既存のヘルパーメソッドを使用してJsonExceptionを発生させる(+4/-2)
  • JsonObjectTests.cs: 直接指定、ネストされた、エスケープされた、大文字小文字区別なしの重複プロパティに対するテストを更新(+10/-10)

パフォーマンスへの影響

影響なし

関連Issue

#123882

その他

  • 破壊的変更: 例外型がArgumentExceptionからJsonExceptionに変更されます。既存コードがArgumentExceptionをキャッチしている場合は対応が必要です。
  • テスト結果: System.Text.Json.Tests: 53,870 passed, 0 failed

#132765 Increase spinning/polling aggressiveness in the thread pool in low-saturation scenarios

  • 作成者: @VSadov
  • 作成日時: 2026年08月25日 22:40:44(UTC)
  • マージ日時: 2026年08月28日 21:09:02(UTC)
  • ラベル: area-System.Threading

概要

スレッドプール内の低飽和度シナリオにおいてレイテンシを改善するため、ワーカースレッドの駐車(parking)戦略を調整するPRです。以前の変更でスピニング削減により高飽和度シナリオでの効率を向上させましたが、低飽和度では不要な遅延が発生していました。本変更では、ワーカー数が少ない場合には過度な駐車を避け、適度なスピニングを許容することでバースト型ワークロードのレイテンシを改善します。

変更内容

  • PortableThreadPool.WorkerThread.cs: 設定可能な閾値(SpuriousDispatchNoSpinThreshold)を追加し、他のワーカーがある程度存在する場合(プロセッサ数の2/3以上)のみ、無駄なスキャン後の駐車を実行するようゲート処理を実装
  • LowLevelLifoSemaphore.cs: デフォルトスピン予算を増加させ、残存シグナルがある場合に追加のウェイター起動ロジックを追加
  • Backoff.cs: 指数バックオフの反復ごとの遅延上限を削減し、スピニング時の最悪ケース遅延を抑制

パフォーマンスへの影響

  • 低飽和度シナリオ: レイテンシ改善。バースト型・ping-pong型ワークロードでの応答性向上
  • 高飽和度シナリオ: 前回変更の効果(無駄なスキャン削減によるスループット向上)を維持
  • ワーカー駐車の選別的なゲート処理により、不要な起床コストを回避しながら必要な応答性を確保

関連Issue

なし

その他

.NET 11での実装を想定した変更です。より洗練されたシグナル活用方法については今後の探索を検討予定とのことです。


#132751 Reset bFallingBack and iRecursionCount on 0 return

概要

EncoderReplacementFallbackBuffer_InternalGetNextChar 関数でnull文字 \0 を返す際に、bFallingBack 状態フラグと iRecursionCount カウンタがリセットされていない問題を修正しました。この問題により、エンコーダーが置換完了後も fallback 状態に留まり、アサーション失敗を引き起こしていました。

変更内容

  • src/native/minipal/utf8.c: 置換文字列完全処理時に InternalGetNextChar が \0 を返す場合、bFallingBack フラグと iRecursionCount カウンタを適切にリセット(6行追加)
  • src/coreclr/pal/tests/palsuite/locale_info/WideCharToMultiByte/test5/test5.cpp: 関連テストケース追加(50行追加)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

エンコーディング処理における状態管理の修正です。fallback 処理完了時のフラグクリーンアップ漏れが原因で、エンコーダーが不正な状態に留まるバグが解決されました。


#132739 [browser] Generate the Wasm.Build.Tests Helix class list at build time

概要

Wasm.Build.TestsのHelix実行クラスリストを、手動メンテナンスの代わりにビルド時に自動生成するようにしました。新しいGenerateXunitTestClassListタスクがテストアセンブリから[Fact]/[Theory]/[ConditionalFact]/[ConditionalTheory]属性を持つパブリック非抽象クラスを自動検出し、カテゴリフィルタ(no-workload、IgnoreForCI、failingなど)を適用してリストを生成します。これにより、手動リストの漏れやドリフト(CoreCLR向けで7クラスが実行されていなかった問題など)を防ぎます。

変更内容

  • GenerateXunitTestClassList.cs (新規): System.Reflection.Metadataを使用してテストアセンブリをメタデータ読み込みし、テストクラスのリストを生成するタスク
  • Wasm.Build.Tests.csproj: ビルド後にリスト生成タスクを実行(AfterTargets="Build" BeforeTargets="ZipTestArchive")
  • sendtohelix-browser.targets / sendtohelix-wasm.targets: 手動メンテナンスされていたBuildWasmAppsJobsList.txtとBuildWasmAppsJobsListCoreCLR.txtの読み込みを削除し、自動生成されたリストから読み込むように変更
  • Directory.Build.props: WasmBuildTestsJobsListFileプロパティを追加(フレーバー大文字小文字の正規化対応)
  • テスト対象ファイル削除: 手動メンテナンス用のリストファイル(BuildWasmAppsJobsList.txt、BuildWasmAppsJobsListCoreCLR.txt)を削除

パフォーマンスへの影響

影響なし。ただし、自動生成によるHelix実行アイテムの数に変化あり:

  • CoreCLR向け: 27アイテム → 33アイテム(従来実行されていなかった7クラスが追加)
  • Mono向け: 54アイテム → 52アイテム(存在しないConfigSrcTestsと全メソッド除外のBlazor.WorkloadRequiredTestsを削除)

関連Issue

なし

その他

  • 属性マッチング: ConditionalFactAttribute/ConditionalTheoryAttributeは型名による単純マッチング(MetadataLoadContextなしで単一ファイルメタデータ読み込み)で検出されるため、将来それらから派生する新属性は認識されない可能性がある
  • 大文字小文字対応: MSBuildでは大文字小文字を区別しないが、ファイル名では区別されるため、フレーバー値を小文字に正規化
  • エラー報告の改善: 従来は欠落したリストが空のワークアイテムセットを生成していましたが、現在は明示的なエラーで失敗します
  • タスク配置: タスクはWasmBuildTasks内に配置され、WebAssembly SDKパッケージに含まれます
  • 検証済み: CI成功、生成されたリストの出力が期待値と一致、14ケースのカバレッジテスト実施

#132738 Include issue authors in CI scan dedup searches

概要

CI障害スキャンの重複検出プロセスにおいて、KBE(Known Build Error)issue検索にuserフィールドを含めることを要求する変更です。これにより、整合性ゲートウェイがActions作成のKBEを信頼済みボットとして認識でき、重複検出中に誤って非表示にされることを防ぎます。

変更内容

  • .github/workflows/shared/create-kbe.instructions.md: search_issues呼び出しにおいて、すべての検索リクエストでuserフィールドをfieldsに含めることを要求。
  • コメント追記:整合性ゲートウェイがuser.loginを使用して信頼済みボットの著者を認識する必要がある理由を文書化。

パフォーマンスへの影響

影響なし

関連Issue

#132668、#132729

その他

本変更は内部的なCI処理フローの改善であり、公開APIや開発者向けの機能に影響はありません。検証はgh aw compile ci-failure-scan --no-emit --validateで実施済みです。


#132665 Remove the uniprocessor (non-TLS) allocation helpers

  • 作成者: @EgorBo
  • 作成日時: 2026年08月23日 00:22:55(UTC)
  • マージ日時: 2026年08月28日 11:49:40(UTC)
  • ラベル: area-GC-coreclr

概要

シングルプロセッサ構成用のWindows x86/x64 uniprocessor allocation helpers (RhpNewFast_UP等)を削除し、すべてのメモリ割り当てをスレッドローカル割り当てコンテキスト経由に統一する変更です。ほぼ到達不可能(GetSystemInfo()が正確に1プロセッサを報告する必要)で、既知のバグ(GCStress時のヒープ破損)があり、テストされていない最適化のため削除されます。

変更内容

ランタイムコア

  • x86/x64アセンブリヘルパー削除: AllocSlow.asmから約370行のシングルプロセッサ用コード削除
  • 割り当てパス統一: gchelpers.cpp, jitinterfacegen.cppでシングルプロセッサ用分岐を削除し、TLSアクセス付きの標準パスに統一
  • グローバル割り当てコンテキスト削除: gcheaputilities.*から関連宣言/初期化を削除、GCUseGlobalAllocationContext設定削除

GCStress/検査パス修正

  • gcstress.h, gccover.cpp, threadsuspend.cppのシングルプロセッサ用特殊ケースと無効化assertを削除
  • runtimehandles.cppのグローバルコンテキストフォールバックパス削除

診断API(内部実装変更)

  • GetGlobalAllocationContext() (DAC/cDAC/SOS): null/nullを返すように修正
  • cDACはTryReadGlobalPointer経由で旧ターゲット互換性維持
  • GC c1データコントラクト: GlobalAllocContextを条件付きとして文書化
  • ヒープウォーキングからグローバルコンテキスト枠を削除

設定削除

  • clrconfigvalues.hからGCUseGlobalAllocationContext設定削除

パフォーマンスへの影響

懸念事項: シングルプロセッサWindows x86/x64構成では、削除された最適化により割り当てホットパスに5命令(x64)または4命令(x86)のTLSアクセスが追加されます。PR説明は命令数の理論値のみで、実測ベンチマークが提供されていません。

現在のシングルプロセッサ構成はほぼ到達不可能(コンテナCPU制限やジョブオブジェクトでは発動せず、1vCPUマシンのみ)のため、実務的な影響は限定的と考えられます。

関連Issue

#115102 - フォローアップ対象
#7670 - GCStress安全性の既知バグ(2017年報告、未修正)
#124805 - GlobalAllocContext追加

その他

重要な互換性懸念(Copilotが指摘)

  1. データコントラクト互換性: GlobalAllocContextをdatadescriptor.incから削除するか、ゼロ値として保持するかが不明確です。GC c1コントラクトを新版c2にバンプするか、元の`c

#132659 Add managed Composite ML-KEM implementation

概要

OpenSSLバックエンドのマネージド実装として、ハイブリッドML-KEM(ML-KEM + 従来型KEM)のComposite ML-KEM実装を追加します。X25519/X448、ECDH、RSA-OAEPの3つの従来型KEM方式に対応し、System.Security.Cryptographyに統合されます。Windows向けのネイティブ実装は別PRで追加予定です。

変更内容

  • CompositeMLKemManaged.cs: マネージド実装の中核ロジック(アルゴリズムサポート検査、鍵生成/インポート、カプセル化/デカプセル化、秘密結合器)を実装
  • CompositeMLKemManaged.XDiffieHellman.cs: X25519ベースの従来型KEM部分の実装
  • CompositeMLKemManaged.RSA.cs: RSA-OAEP従来型KEM部分およびデカプセル化失敗メッセージを実装
  • CompositeMLKemManaged.ECDiffieHellman.cs: ECDH従来型KEM部分およびDER専用の鍵インポート/エクスポート機能を実装
  • CompositeMLKem.cs: 例外時の秘密バッファクリア処理を強化
  • MLKemImplementation.OpenSsl.cs: OpenSSL向けアルゴリズムサポート検査を追加
  • CompositeMLKemImplementation.Managed.cs: OpenSSL実装エントリーポイントをマネージド実装に振り向け
  • RSAKeyFormatHelper.Pkcs1.cs: PKCS#1デコードヘルパーにAsnEncodingRulesパラメータを追加(デフォルトBER)
  • テスト: IETF検証ベクトル、実装テスト、ベース動作テスト、カバレッジ拡張を追加

パフォーマンスへの影響

影響なし

関連Issue

#129633

その他

注記: Copilotが2つの潜在的な問題を指摘しています:

  1. CompositeMLKemManaged.cs:488 のX25519アルゴリズムメタデータで、6バイトのラベル値がASCIIスタイル(例:"MLKEM768-RSAOAEP2048")と異なり、秘密結合器の入力が変更される可能性があります。
  2. CompositeMLKemManaged.cs:443 のTraditionalKemクラスでclosedキーワードが使用されていますが、コンパイルできません。abstractキーワードに変更が必要です。

これらは実装の完成前に解決される見込みです。


#132527 Add a SuperPMI collection over the Aspire CLI (NativeAOT)

  • 作成者: @EgorBo
  • 作成日時: 2026年08月19日 16:36:01(UTC)
  • マージ日時: 2026年08月28日 11:48:00(UTC)
  • ラベル: area-CodeGen-coreclr

概要

Aspire CLIのNativeAOT実装を対象とした新しいSuperPMI collection を追加します。ローカルに構築されたILCコンパイラを使用して、実環境で実際にAOT コンパイルされているサードパーティ製アプリケーション上での包括的なテストカバレッジを実現します。新しいコレクションは54,051のコンテキストを生成し、898MBのサイズとなり、既存のsmoke_tests.nativeaot(34,532コンテキスト、453MB)より多くのカバレッジを提供します。

変更内容

  • 新規スクリプト:src/coreclr/scripts/superpmi_nativeaot_app.py - リポジトリのクローン、Core_Rootのみでローカル実行可能な自己完結型のNativeAOT collection スクリプト
  • superpmi-collect.proj:Aspire collection の処理とHelix work itemの定義を追加
  • superpmi_collect_setup.py:Aspire collection をaspnet2と同様に自己完結型として扱う設定を追加
  • パイプラインテンプレート:SuperPMI collection パイプラインおよび実行ジョブにAspire collection の統合を追加

パフォーマンスへの影響

影響なし(テスト/計測インフラストラクチャの追加のため、ランタイムパフォーマンスへの直接的な影響はありません)

関連Issue

なし

その他

  • スクリプトはリポジトリURL、コミット、プロジェクトパスをパラメータで指定可能で、Aspireに限定されず他のNativeAOT アプリケーションにも適用可能です。検証時にSourceGit(Avaloniaアプリ)でも動作確認済み(54,610コンテキスト、878MB)
  • SDKのPublishAot=trueに加え、ローカルビルドフレームワーク(IlcFrameworkPath、IlcSdkPath)を指定することで、SDK生成の*.ilc.rspレスポンスファイルを再生成し、ローカルビルトILC下のSuperPMI collectorで再生
  • IlcToolsPathを空ディレクトリに指定することで、ネイティブリンク前の段階で停止(CI環境ではC++ツールチェーンが不在のため)
  • Copilotレビューより、GitHub APIのレート制限対策(明示的タイムアウト、再試行ロジック、User-Agentヘッダ)やPE ファイルヘッダ読み込み時のバッファサイズに関する懸念事項が指摘されています

#132473 Handle Unicode scalars in UTF-8 parsing and formatting

概要

UTF-8解析とフォーマッティングにおけるUnicodeスカラ処理の改善。U+0020(空白)、U+00A0(NBSP)、U+202F(NNBSP)を同等のセパレータとして扱い、UTF-16とUTF-8間でのパリティを向上。さらに、サロゲートペアを正しくUTF-8の4バイトスカラとして出力し、ペアのないサロゲートはU+FFDに置換される。これにより、数値、日時、TimeSpan、BigIntegerの解析・フォーマッティングで一貫性が得られる。

変更内容

  • Number.Parsing.Common.cs: UTF-8での空白系文字マッチング機能を追加。異なるバイト長での分離符号の柔軟な対応(U+0020/U+00A0/U+202F)を実装しながら完全一致の高速パスを保持。不正なUTF-8シーケンスは拒否。
  • Number.Formatting.Common.cs: カスタムフォーマットリテラルをUnicodeスカラとして処理。サロゲートペアは4バイトの単一スカラとして出力、ペアのないサロゲートはU+FFDで置換。
  • DateTimeFormat.cs: 引用符/エスケープ/リテラル出力をUTF-8対応に更新。サロゲートペアの正確な処理と、ペアのないサロゲートのU+FFD置換を実装。
  • TimeSpanFormat.cs: エスケープリテラル処理を更新。従来は補助文字リテラルでエラーを発生させていたが、今後はスカラを正しくフォーマット出力。
  • DateTimeParse.cs: AM/PM解析を拡張。補助文字の最初の「文字」(サロゲートペア)をサポート。
  • Char.cs: UTF-8フォーマッティング時、ペアのないサロゲートをU+FFDに置換。
  • Number.Parsing.cs: 特殊値解析(符号付きNaN)で、文化がU+2212(マイナス記号)の場合にハイフンマイナスフォールバックが到達可能に。
  • テストファイル群: 各プリミティブ型、BigInteger、DateTime、TimeSpanについて、サロゲートペア、ペアのないサロゲート、UTF-8セパレータ等価性の回帰テストを追加(Int32Tests.cs +81行、DateTimeTests.cs +67行など)。

パフォーマンスへの影響

ローカルBenchmarkDotNetテストによれば、パフォーマンス影響は誤差範囲内:

  • ASCII グループ解析: 1.00x
  • 非不変記号解析: 1.01x
  • 16進浮動小数点解析: 1.02x
  • カスタム数値フォーマッティング: 1.00x
  • 日時フォーマッティング: 誤差範囲内

関連Issue

#124016(#132417および#123783も関連)

その他

  • 破壊的変更: TimeSpanフォーマッティングで、エスケープされた補助文字リテラルは従来のエラーから、正しくスカラをフォーマットする動作に変更(動作修正)。
  • 補助文字の

#132348 Normalize X509Chain App/Cert policies across OSes

  • 作成者: @bartonjs
  • 作成日時: 2026年08月14日 23:30:49(UTC)
  • マージ日時: 2026年08月28日 19:01:52(UTC)
  • ラベル: area-System.Security

概要

X509Chain のポリシー処理を Windows/OpenSSL/Apple/Android 間で正規化し、ApplicationPolicy/CertificatePolicy の処理と無効/デコード不可能なポリシー関連拡張の評価・報告をプラットフォーム間で一貫させます。コンテキストトラストの導入後に書き直された従来のポリシー処理コードを、より充実したテストに基づいて統一化します。

変更内容

  • CertificatePolicy.cs(内部実装): CertificatePolicyChain をリファクタリングし、チェーン要素ごとの"エンコーディング"エラーと"使用"エラーを分離して計算。Build() メソッドと CheckEncodingOnly() で共通ロジックを提供し、プラットフォーム間での再利用を実現。
  • OpenSslX509ChainProcessor.cs(内部実装): ポリシー評価を"エラーのマージ"と"ポリシー処理"に分割。明示的なポリシーフィルタリングなしでもエンコーディングエラーを検出。
  • ChainPal.Apple.cs / ChainPal.Android.cs(内部実装): 共有ポリシーチェーンロジックに切り替え、チェーン要素ごとのエラー帰属を統一化。
  • Oids.cs(内部実装): AnyEnhancedKeyUsage 定数を追加。
  • テスト関連:
    • 新規ファイル AppAndCertPoliciesChainTests.cs: 証明書ポリシー制約/マッピングと Application Policies vs EKU の相互作用をカバー。
    • 新規ファイル CorruptPoliciesChainTests.cs: 破損/デコード不可能なポリシー/EKU 関連拡張と期待チェーン要素ステータスをテスト。
    • 既存テスト正規化: NotValidForUsage の OS 条件付き期待値を削除・統一。

パフォーマンスへの影響

影響なし

関連Issue

#31246 および他の関連 Issue

その他

Copilot による指摘(注視が必要):

  1. ErrorVector クラス内のビットテスト(1 << index)は、インデックス ≥ 31 でオーバーフロー/符号拡張が発生し、長いチェーンでエラーが誤った要素に帰属する可能性。
  2. ApplicationCertPolicies が破損している場合の EKU 検証コメントが実装と不一致:コメントでは"構造有効性のためだけに EKU をチェック"と述べるが、実際には ApplicationCertPolicies が存在する場合 EKU をスキップ。
  3. テストコードでリソースリーク(RSA キーと X509Certificate2 インスタンスが未破棄)。
  4. 未使用 using ステートメントの存在(CS8019 警告の可能性)。

#132275 Add configurable SSE parser buffer limit

  • 作成者: @Copilot
  • 作成日時: 2026年08月13日 13:12:02(UTC)
  • マージ日時: 2026年08月28日 11:21:24(UTC)
  • ラベル: area-System.Net

概要

SSE(Server-Sent Events)パーサーにバッファサイズの設定機能を追加しました。新しい SseParserOptions<T> クラスを導入し、呼び出し元が MaxBufferSize プロパティでパーサーのバッファ上限を構成できるようにします。デフォルトは -1(内部デフォルト値を使用)です。

var parser = SseParser.Create(stream, new SseParserOptions<string>(
    static (_, bytes) => Encoding.UTF8.GetString(bytes))
{
    MaxBufferSize = 1024 * 1024
});

変更内容

  • SseParserOptions.cs(新規): 汎用の SseParserOptions<T> クラスを追加。ItemParser(必須)と MaxBufferSize(デフォルト-1)プロパティを含む
  • SseParser.cs: 既存の Create(Stream) オーバーロードを維持しつつ、新しい Create<T>(Stream, SseParserOptions<T>) オーバーロードを追加。既存の Create<T>(Stream, SseItemParser<T>) は新しいオプションベースのパスにリダイレクト
  • SseParser_1.cs: バッファ制限の適用ロジックを実装。GrowBuffer メソッドで MaxBufferSize を検証
  • ThrowHelper.cs: バッファ超過エラーメッセージ用のヘルパーを追加
  • テスト更新: リフレクションベースのセットアップをパブリックAPIに置き換え、新しいオプションベースの構築パスをカバー
  • ref/api定義: 公開APIサーフェスを更新

パフォーマンスへの影響

影響あり:既存の Create<T>(Stream, SseItemParser<T>) オーバーロードを使用する場合、SseParserOptions<T> インスタンスが毎回割り当てられるようになり、わずかなメモリオーバーヘッドが発生します。テストコード内で bytes.ToArray() の不要な割り当てが存在します。

関連Issue

#129168

その他

Copilotレビューコメントで以下の指摘がされています:

  • MaxBufferSize < -1 の無効な値に対する入力検証が不足している(現在は流れ通る)
  • バッファ制限の実装では、実際にバッファされたバイト数(初期Rentやプール実装による実バッファサイズ)ではなく、要求された成長サイズのみを検証している可能性
  • ストリームがEOFに達した場合と制限超過の区別に関する境界値ケースがテストされていない
  • API承認形状が非汎用の SseParserOptions だったが、実装は汎用の SseParserOptions<T> となっており、承認との齟齬がある

#132190 Report CoreCLR Write Barriers And Code-Heap Stubs In Traces

概要

ETW/EventPipeおよびPerfMapトレースにおいて、通常のJITメソッド外で生成された実行可能コード(コピーされたwrite barrier、スタブ、コード断片ブロック)のシンボル解決範囲を改善します。これにより、トレース内の未解決シンボルが大幅に減少します。

CodeHeapIteratorがヒープ終了をスナップショットし、スタブ範囲を識別して報告する機能が追加されました。コピーされたwrite barrierの報告はJITヘルパーテーブル設定から導出されます。

変更内容

  • codeman.cpp/codeman.h: CodeHeapIteratorを拡張して、スタブコードブロックの識別、境界付きサイズ/種別の提供、ETW/PerfMapでの報告に対応
  • threads.cpp/threads.h: コピーされたwrite barrier範囲のETW列挙とPerfMap報告用の列挙/報告機能を実装
  • eventtrace.cpp: ヘルパーイベント発行を拡張し、列挙中にスタブブロックとコピーされたwrite barrierを報告
  • perfmap.cpp/perfmap.h: オンデマンドPerfMap生成時にコピーされたwrite barrierとスタブブロック範囲を出力
  • dynamicmethod.cpp: ホストコードヒープのローダーアロケーターポインター確保
  • eventtracebase.h: SendHelperEvent宣言を更新して列挙オプション渡しに対応
  • ceemain.cpp: スタートアップ中に新しいトレーシングデータ初期化プログラムを呼び出し
  • rundownvalidation.cs: VSD活動を生成し、ライブ/ランダウンストリームにヘルパーイベントが表示されることを検証

パフォーマンスへの影響

影響なし。変更はシンボル報告の改善のみで、スタブレイアウト、割り当てサイズ、アライメント、ジャンプ到達可能性に変化はありません。

関連Issue

#132190

その他

  • 互換性: 公開APIは変更されず、内部実装の改善です
  • 制限事項: オンデマンドPerfMap生成では個別割り当てが再構成できないため、ブロック単位で報告されます
  • テスト上の指摘: 審査コメントでwrite barrier copy設定(CLRConfig::UNSUPPORTED_UseGCWriteBarrierCopy)がデフォルト無効である点が指摘され、テストでの条件付き検証の必要性が示唆されています
  • すべてのETW/EventPipeエントリはJitHelperMethodメタデータを使用

#132093 Fix contract violation in AsyncThunkStubManager::TraceManager

  • 作成者: @rcj1
  • 作成日時: 2026年08月10日 18:57:53(UTC)
  • マージ日時: 2026年08月28日 21:22:53(UTC)
  • ラベル: area-Diagnostics-coreclr

概要

AsyncThunkStubManager::TraceManagerでのGC/contract違反を修正するため、非割り当て版の非同期バリアント検索(GetAsyncVariantNoCreate/GetOrdinaryVariantNoCreate)に切り替えました。デバッガ/トレースステップ中に不要なメモリ割り当てを回避します。

変更内容

  • src/coreclr/vm/stubmgr.cpp: 非同期サンク「他バリアント」検索ロジックを非割り当て版に変更。デバッガ/トレースステップ中のメモリ割り当てを防止し、非サンク対象選択ロジックを簡略化。

パフォーマンスへの影響

デバッガトレース時の不要なメモリ割り当てを回避することで、GCプレッシャーを軽減します。

関連Issue

#132093

その他

注記: Copilot Code Reviewにより、Get*VariantNoCreate()がNULLを返す可能性がある点が指摘されています。本修正では、バリアント返却後に即座にデリファレンス(pOtherMD->IsAsyncThunkMethod()呼び出し)が行われるため、NULL チェックが必要であることが指摘されました。ビルド版でNULLアクセス違反となるリスクがあるため、防御的なNULLチェック追加が推奨されています。


#131655 Build vararg support only where it is reachable

  • 作成者: @jkoritzinsky
  • 作成日時: 2026年07月31日 16:54:06(UTC)
  • マージ日時: 2026年08月28日 18:27:02(UTC)
  • ラベル: area-VM-coreclr

概要

vararg呼び出し規約はWindows上でのみサポートされているため、このPRはFEATURE_VARARGSフィーチャーフラグを導入し、vararg関連のインフラストラクチャをサポート対象プラットフォーム(主にWindows)上でのみビルドするように変更しました。これにより、Unix/ARM/loongarch64/riscv64/wasmなどの非対応プラットフォーム上で到達不可能なスタブ、cookie管理、マーシャリングヘルパーなどをコンパイルから除外できます。

Windows上のビヘイビアは変わりません。ConvToJitSigはプラットフォーム固有のチェックを単一のFEATURE_VARARGS定義で統一し、プラットフォーム間での齟齬を防ぎます。

変更内容

  • ネイティブ側(CMake/アセンブリ): clrdefinitions.cmakeとclr.featuredefines.propsでFEATURE_VARARGSを定義(Windowsのみ)。Windows向けアセンブリファイル(amd64/arm/arm64など)のvarargスタブをゲート。Unix向けvarargスタブ実装(amd64/pinvokestubs.S、arm/pinvokestubs.S等)を削除
  • VM内部(C++): VASigCookie、InteropDispatchStubManager、VarargPInvokeStub、マーシャラー、GC報告ロジックなどを#ifdef FEATURE_VARARGSで保護
  • CoreLib(C#): 新しい共有ファイルArgIterator.PlatformNotSupported.csを作成し、varargs非対応時に使用。CoreCLRのArgIterator.csは条件付きコンパイル、NativeAOTは従来通り共有ファイルを使用
  • cDAC: VASigCookie型記述子をゲート。ターゲットがvarargを割り当てられない場合は広告を中止
  • レジスタ名変更: amd64のPINVOKE_CALLI_SIGTOKEN_REGNUM→PINVOKE_VARARG_SIGTOKEN_REGNUM(呼び出し元が変わったため)

パフォーマンスへの影響

影響なし(非対応プラットフォーム上で到達不可能なコード削減による利益、Windows上のビヘイビア無変更)

関連Issue

#131654(親PR、同一スタック)

その他

  • ビルドシステムの注意: FEATURE_VARARGSはネイティブ定義(CMake)と管理定義(MSBuild)の両方で宣言される必要があります。理由はvm/corelib.hがILLink root descriptorジェネレータでも使用されるため、native-only #ifdefだと管理側のメソッドが無言で削除されることがあるため
  • 验证: Windows(x64/x86/arm64)、NativeAOT、linuxはビルド成功確認。Unix向けアーキテクチャはインスペクション検証(contract descriptorからVASigCookieが削除されることを確認)
  • 既知の懸念点: jitinterface.cppとframes.cppの一部の非サポート時パスでPORTABILITY_ASSERTを使用しているが、これは完成したポ

#130870 Fix LargestVectorSize and buffer size in ARM HW intrinsic tests

概要

ARM Hardware IntrinsicsテストでLargestVectorSizeがARM上のVector<T>サイズ(128ビット=16バイト)と一致していないことと、バッファサイズ計算式が不十分であることに起因するバッファオーバーフロー問題を修正しています。armel環境ではGC構造体の破損とGCアサーション例外につながる問題です。

変更内容

  • Vectors.cs: ARM向けVector<T>テストのLargestVectorSizeを8から16に修正
  • SveTests.cs: テンプレート内のLargestVectorSize定義を更新(57行が変更)
  • テンプレートファイル群 (_SveBinaryOpTestTemplate.template、_SveMinimalUnaryOpTestTemplate.template、_SveTernOpTestTemplate.template):
    • DataTableコンストラクタ内のサイズ検証ロジックを修正
    • バッファサイズ計算式をalignment * 2からalignment + sizeArrayに変更し、アラインメントパディング最悪ケースに対応
    • サイズ検証をコンストラクタから分離

パフォーマンスへの影響

影響なし(テストインフラの修正であり、実装コードではない)

関連Issue

なし

その他

修正の核は以下の3点です:

  1. LargestVectorSize修正: arm64/armel両方で正確なバッファ割り当てが必要。arm64では8バイトアラインメントが偶然成立していたため問題が顕在化していませんでしたが、armelでは実際のバッファオーバーフロー問題につながっていました。
  2. バッファサイズ計算: alignment - 1 + sizeof(Vector<T>) が最小必要サイズであり、alignment=8、sizeof(Vector<T>)=16の場合、従来は16バイトしか割り当てられず23バイト必要でした。
  3. 検証ロジック分離: アラインメントとサイズ検証を独立させることで、実装の意図をより明確にしています。

目次