Pull Request on 2026年08月14日

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

注意点

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


目次

  1. #132337 [R2R] Handle missing virtual method signatures
  2. #132326 JIT: Do not skip reference prolog zero inits in async methods
  3. #132314 Fix lock inversion in HttpListener's Windows WebSocket impl
  4. #132313 JIT: Fix VN map select cache inconsistency on budget exhaustion
  5. #132310 Fix for array's dimensions LowerBound verbose check in ILlink tool
  6. #132307 Accept canonical NaN in BFloat16 explicit conversions on WASM
  7. #132300 [mono][wasm] Handle versioned OS platform P/Invoke attributes
  8. #132295 Update NuGet restore sources for HttpStress project
  9. #132292 Extend ERROR_NO_ASSOCIATION with descriptive error messages
  10. #132290 Remove redundant fAcquireLock from binder SetupBindingPaths
  11. #132287 [QUIC] Fix receive race.
  12. #132284 Fold installer build and test into CoreCLR jobs
  13. #132281 JIT: don't use a jump-threaded block's sharpened predicate for dominator-based inference
  14. #132278 Reset charsConsumed when BigInteger partial parsing fails
  15. #132277 Compile UpdateOptions_ServerCertificateContextProvided test on desktop only
  16. #132273 Sync shared code from aspnetcore
  17. #132272 [main] Source code updates from dotnet/dotnet
  18. #132269 JIT: Strip GC/reloc flags from the size in arm64 instGen_Set_Reg_To_Imm
  19. #132234 Package reusable cDAC usage graph analyzer
  20. #132216 Enable DnsResolver tests on all Unix platforms
  21. #132208 Remove obsolete WASM TypeScript definition cleanup logic
  22. #132205 [wasm] Rename confusing fromMonoPackage variable in AssetsComputingHelper.cs
  23. #132197 Use minipal timers directly in GC
  24. #132184 Improve HTTP/2 extended CONNECT error message
  25. #132163 Limit header name in HtppListenerRequest
  26. #132153 [mono][wasm] Box gsharedvt Nullable<T> via a wrapper-free runtime helper
  27. #131911 Suppress interface generic dataflow warnings under RUC
  28. #131908 Fix XmlSerializer UnknownAttribute perf regression
  29. #131594 [Test] Mark DynamicOptimization profiler test as GCStressIncompatible
  30. #131538 JIT: Support general inlining in runtime async
  31. #131356 Fix edge likelihoods out of optimize bools
  32. #131225 Populate RetryAfter on SlidingWindowRateLimiter
  33. #130910 Mirror Windows behavior for managed HttpListener Content-Length
  34. #130263 [OptionsValidator] source generator: emit ValidateAsync() for IAsyncValidateOptions<T>
  35. #128980 Prevent corrupted SMTP headers when MailAddress.DisplayName contains CR/LF
  36. #128675 Enable sccache for macOS CoreCLR legs
  37. #128504 [XmlSerializer] Avoid IList/Array.GetValue path for array item serialization in reflection writer
  38. #123920 Add format attribute to printf-style wrappers and fix format string errors

#132337 [R2R] Handle missing virtual method signatures

  • 作成者: @agocke
  • 作成日時: 2026年08月14日 19:08:11(UTC)
  • マージ日時: 2026年08月14日 22:16:35(UTC)
  • ラベル: area-ReadyToRun

概要

crossgen2/R2R のコンパイル時に、インターフェース仮想メソッドの署名解決に失敗する場合(例:参照アセンブリが見つからない場合)の耐性を向上させます。InheritedVirtualMethodsNode で TypeSystemException をキャッチし、解決失敗前に発見された依存関係を保持することで、影響を受けるコードがランタイム JIT へフォールバックできるようにします。

変更内容

  • InheritedVirtualMethodsNode.cs: インターフェース仮想スロット走査中の型解決失敗をキャッチして、既に収集された依存関係を保持。コンパイルがランタイム JIT へフォールバック可能に(内部実装の強化)
  • R2RTestRunner.cs: Roslyn コンパイル済みアセンブリ(依存関係を含む)が確実に出力ディレクトリを受け取るよう修正
  • R2RTestSuites.cs: 欠落したインターフェース署名依存関係をカバーするリグレッション テスト ケースを追加
  • MissingVirtualSignature/Input.cs、Dependency.cs: テスト用入力・依存関係アセンブリ(欠落型参照を含むインターフェース署名を定義)

パフォーマンスへの影響

影響なし

関連Issue

#132338

その他

Copilot レビューで指摘された点:

  1. TypeSystemException ハンドラの범위が大きすぎる可能性があり、1つの解決失敗が残りのインターフェース走査全体をスキップする可能性あり。今後の改善では try/catch をループ内部(インターフェース/メソッド単位)に移動を検討
  2. 本修正は --resilient フラグによるゲート機構と警告報告は別途対応予定(#132338 関連)

#132326 JIT: Do not skip reference prolog zero inits in async methods

概要

JIT最適化 optRemoveRedundantZeroInits がランタイム非同期メソッドでGC報告可能なローカル変数のプロローグゼロ初期化をスキップしていた正確性バグを修正します。非同期メソッドの再開パスが初期化前のストアをスキップするため、GCが無効なスタック参照をスキャンしてランタイムクラッシュが発生していました。非同期メソッドでこの最適化を無効化し、回帰テストを追加します。

変更内容

  • src/coreclr/jit/optimizer.cpp: optRemoveRedundantZeroInits関数で、ランタイム非同期メソッド(compIsAsync())に対して「explicit init」マーキング最適化を適用しないよう条件を追加
  • src/tests/async/regression/126750.cs: GC応力下でランタイムクラッシュを再現する回帰テスト(Runtime_126750)を追加。非同期再開時の未初期化スタックスロットのGCスキャンを誘発
  • src/tests/async/regression/126750.csproj: 回帰テストのビルド・実行用プロジェクトファイルを追加

パフォーマンスへの影響

非同期メソッドではプロローグでゼロ初期化が実行されるため、わずかなパフォーマンスオーバーヘッドが発生します。ただし、正確性バグ修正のための必要な変更です。

関連Issue

#126750

その他

GCStress=0xC環境下での検証が必要です。修正対象は内部実装(JIT最適化ロジック)であり、公開APIへの影響はありません。


#132314 Fix lock inversion in HttpListener's Windows WebSocket impl

  • 作成者: @MihaZupan
  • 作成日時: 2026年08月14日 11:56:32(UTC)
  • マージ日時: 2026年08月14日 14:51:22(UTC)
  • ラベル: area-System.Net.Http

概要

Windows HttpListener の WebSocket 実装におけるロック逆転(lock inversion)による潜在的なデッドロックを修正しました。CloseAsyncCore メソッドで lock 取得順序を統一し、_thisLock を保持したまま SessionHandle lock が必要な操作を実行することを避けることで、他の処理との deadlock を防止します。

変更内容

  • WebSocketBase.CloseAsyncCore: _thisLock を保持したまま CloseOutput、受信処理、Abort などの SessionHandle lock を取得する操作を実行しないよう修正。lock の解放タイミングを調整し、一貫したロック取得順序を強制します。
  • HttpListenerWebSocketTests.cs: クライアント close フレームとサーバーの CloseAsync を同時に実行して deadlock を検出する Windows 専用の回帰テストを追加。ClientWebSocket を用いて HttpListenerWebSocketContext を作成するヘルパーメソッドを追加。

パフォーマンスへの影響

影響なし(deadlock 回避のための lock 解放タイミング調整)

関連Issue

#115559

その他

この修正は Windows 環境の HttpListener WebSocket 実装に限定された変更です。lock 取得順序の一貫性を保つことで、TakeLocks ヘルパーと他の呼び出し元の間での競合状態を排除しています。


#132313 JIT: Fix VN map select cache inconsistency on budget exhaustion

概要

JIT のバリューナンバリング(VN)機能で、MapSelect操作のキャッシュ一貫性を損なわせるバグを修正しました。予算枯渇時に再帰的評価の確認を適切な順序で行わず、異なるVNが同じキーに対してキャッシュされていました。修正により、再帰的な再入時にはRecursiveVNを返すようになります。

変更内容

src/coreclr/jit/valuenum.cpp

  • VNForMapSelectWork関数で、予算チェック前に再帰的評価の確認を先に実施するよう処理順序を変更(+10/-7)
  • これにより、外側の呼び出しがまだ解決中のMapSelectへの再入は、新しいVNを生成する代わりにRecursiveVNを返すようになります

パフォーマンスへの影響

影響なし(バグ修正による正確性の改善)

関連Issue

#128314

その他

  • アサーション失敗エラー:'!cache->Lookup(fstruct) || ((*cache)[fstruct].Result == sameSelResult)'が発生していました
  • テストは追加されていません(再現が難しく、テストの脆弱性が懸念されるため)

#132310 Fix for array's dimensions LowerBound verbose check in ILlink tool

概要

ILlink ツールの配列次元の下限境界(LowerBound)の冗長性チェックに関するコピー&ペースト由来のバグを修正しました。Linux Verification Center の SVACE により検出されました。

変更内容

  • src/tools/illink/src/linker/Linker/DocumentationSignatureGenerator.PartVisitor.cs: 配列の LowerBound 冗長性チェック処理を修正(1行変更)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

本修正は ILlink 内部実装(DocumentationSignatureGenerator)の軽微なバグ修正であり、公開 API への影響はありません。


#132307 Accept canonical NaN in BFloat16 explicit conversions on WASM

概要

WebAssembly環境(特にV8エンジン)でNaN値を正規化する動作に対応するため、BFloat16の明示的変換テストを修正しました。以前はWASM+Monoでテストをスキップしていましたが、CoreCLR+WASM環境での実行開始に伴い失敗するようになったため、WASM環境では正規化されたNaN値(sign | 0x7FC0)の受け入れを許容する方式に変更しました。これにより、全てのWASM実行環境でNaN検証を実施しつつ、他のプラットフォームではビット厳密な検証を維持します。

変更内容

  • System.Runtime.Tests/System/Numerics/BFloat16Tests.cs
    • ExplicitConversion_FromSingleおよびExplicitConversion_FromDoubleテストのNaN処理を修正
    • PlatformDetection.IsMonoRuntime && PlatformDetection.IsWasmの条件分岐による全NaNスキップを廃止
    • WASM環境でのみ、期待値のNaNペイロードまたは正規化されたNaN値(sign | 0x7FC0)のいずれかを受け入れるロジックを追加

パフォーマンスへの影響

影響なし

関連Issue

#130706(HalfTests.ExplicitConversion_FromSingleの同様の修正) #103347(追跡用) #129634(browser CoreCLR work)

その他

  • WebAssembly仕様ではホストエンジンにNaNペイロード正規化を許容(但し必須ではない)しており、CI Helix キューで使用されるV8エンジンが正規化を実施するため、ビット厳密なNaN検証が失敗していました
  • アーキテクチャネイティブターゲットおよびペイロード保持型のWASMエンジンには影響なし
  • 修正後、符号ビットの検証は全WASM環境で継続される(整数ALUを経由して保持される)

#132300 [mono][wasm] Handle versioned OS platform P/Invoke attributes

概要

Mono WebAssembly P/Invoke収集機能において、バージョン付きOSプラットフォーム属性(例:browser1.0)をバージョンなしのTargetOS(例:browser)と一致するものとして扱うように修正しました。これにより、net11.0-browserライブラリのSupportedOSPlatform("browser1.0")属性を持つ有効なP/Invokeが誤ってフィルタリングされる回帰を解決します。

変更内容

  • src/tasks/WasmAppBuilder/mono/PInvokeCollector.cs
    • TargetOSとの完全一致比較を、バージョン接尾辞をサポートするヘルパー関数に置き換え
    • SupportedOSPlatformAttributeとUnsupportedOSPlatformAttributeの両方でバージョン付きプラットフォーム文字列をマッチング対象に追加
    • 既存の「プラットフォームのみ」の動作を維持しながら、バージョン値の検証を行う

パフォーマンスへの影響

影響なし

関連Issue

#132297

その他

  • 変更はMonoコレクターに限定され、回帰が導入された箇所のみに対応
  • net11.0とnet472の両方でWasmAppBuilder.csprojのRelease構成での動作確認済み
  • 自動回帰テストは含まれず、完全なワークロード検証はCIと保守者に委ねられている

#132295 Update NuGet restore sources for HttpStress project

概要

HttpStressストレステストプロジェクトのNuGet復元ソース設定を更新し、nuget.orgから直接復元する代わりに、内部のdotnet-publicフィード(nuget.orgミラー)を使用するよう変更します。公開ギャラリーで利用できないパッケージ(System.CommandLineなど)についてはdotnet-librariesフィードを併用します。

変更内容

  • src/libraries/System.Net.Http/tests/StressTests/HttpStress/HttpStress.csproj
    • RestoreSourcesのhttps://api.nuget.org/v3/index.jsonをhttps://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public/nuget/v3/index.jsonに置き換え
    • dotnet-librariesフィードを追加復元ソースとして保持

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この変更はHttpStressプロジェクトのテストインフラストラクチャに関するもので、ランタイム動作やパブリックAPIに影響を与えません。内部ビルド構成の最適化です。


#132292 Extend ERROR_NO_ASSOCIATION with descriptive error messages

概要

Unix環境でのProcess.Start(UseShellExecute=true)のエラーメッセージを改善しました。従来はERROR_NO_ASSOCIATIONという不透明なWin32エラーコードをUnixで出力していたため、ローカライズされた説明的なリソース文字列に置き換えました。

変更内容

  • Strings.resx: 2つの新しいローカライズ済みリソース文字列を追加
    • UseShellExecuteVerbNotSupported: サポートされていない動詞の場合(動詞名を含む)
    • UseShellExecuteNoOpenProgram: ファイルを開くプログラムが見つからない場合
  • SafeProcessHandle.Unix.cs: 既存の2つのエラー送出箇所を新しいリソース文字列を使用したWin32Exceptionに置き換え

パフォーマンスへの影響

影響なし

関連Issue

#132219のレビューフィードバック対応

その他

注記: Copilotのレビュー指摘により、既存のテストがERROR_NO_ASSOCIATIONエラーコードの検証を行っているため、メッセージ改善のみでエラーコード自体は保持する必要があります。ただし本PRでは、Win32Exceptionをメッセージ文字列のみで初期化するとNativeErrorCodeが0になるという潜在的な互換性問題があるとの指摘を受けています。


#132290 Remove redundant fAcquireLock from binder SetupBindingPaths

  • 作成者: @Copilot
  • 作成日時: 2026年08月13日 19:58:54(UTC)
  • マージ日時: 2026年08月14日 15:37:24(UTC)
  • ラベル: area-AssemblyLoader

概要

CoreCLR binder の ApplicationContext::SetupBindingPaths メソッドから、常に TRUE で渡されていた冗長な fAcquireLock パラメータを削除しました。メソッドは無条件にアプリケーションコンテキストのクリティカルセクションを取得するように変更されました。

変更内容

  • src/coreclr/binder/inc/applicationcontext.hpp: ApplicationContext::SetupBindingPaths の宣言から fAcquireLock パラメータを削除
  • src/coreclr/binder/applicationcontext.cpp: 条件付きロック処理を削除し、CRITSEC_Holder contextLock(GetCriticalSectionCookie()) で常にコンテキストロックを取得するように変更
  • src/coreclr/binder/defaultassemblybinder.cpp: 唯一の呼び出し元を新しいシグネチャに対応

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

内部実装の簡潔化(パラメータの削除とロック処理の無条件化)により、コード保守性が向上しました。公開APIへの影響はありません。


#132287 [QUIC] Fix receive race.

  • 作成者: @ManickaP
  • 作成日時: 2026年08月13日 18:12:14(UTC)
  • マージ日時: 2026年08月14日 08:31:06(UTC)
  • ラベル: area-System.Net

概要

QUIC ストリームの受信ループにおけるレースコンディションを修正します。HandleEventReceive と ReadAsync 間で _receiveTcs が二重にアンブロックされる問題を解決し、FINを受信していないのに ReadAsync が0バイト読み取りを返してしまい、不正なストリーム破棄につながるケースを防ぎます。

変更内容

  • src/libraries/System.Net.Quic/src/System/Net/Quic/QuicStream.cs: ReadAsync ループの条件を調整し、バッファからデータをコピーできず受信バッファが空の場合は待機を継続するように変更。これにより古い _receiveTcs 完了を無視します。ReceiveBuffers.CopyTo() から受信バッファの空状態情報をスレッド化し、新しい待機動作を駆動します。

パフォーマンスへの影響

影響なし

関連Issue

#121567、#109121

その他

  • 本修正は、HandleEventReceive に遅延を挿入することでローカルテストにおいて問題を100%再現・確認済み
  • 内部実装の修正で、パブリックAPIへの影響なし

#132284 Fold installer build and test into CoreCLR jobs

概要

.NET Runtimeのビルド・テスト パイプラインを再構成し、スタンドアロンの "Installer Build and Test" ジョブを廃止してCoreCLR/Librariesプロデューサージョブに統合。これにより、ジョブ間のアーティファクト受け渡しを削除し、重複する作業を排除します。

変更内容

  • eng/pipelines/runtime.yml: CoreCLR/LibrariesプロデューサージョブをCoreCLR_AllSubsetsに名称変更。ビルドサブセットにhost+packsを追加。スタンドアロンのInstallerジョブを削除し、Installerの Helix サブミッション機能を postBuildSteps として既存ジョブに移行。macOS Arm64 CoreCLR トリガーを含むパス条件を保持。ジョブタイムアウトを増加。
  • eng/pipelines/installer/helix-queues-setup.yml: ジョブテンプレートからステップテンプレートへリファクタリング。Installer Helix サブミッション機能を呼び出し。
  • eng/pipelines/installer/helix.yml: ランタイム条件でHelix サブミッションをゲートするテンプレートパラメータを追加。

パフォーマンスへの影響

ジョブ間のアーティファクト受け渡しが削除されるため、ビルド・テストのワークフロー効率が改善。詳細なベンチマーク値は提供されていません。

関連Issue

#131615

その他

変更されたYAMLファイルは検証済みで、6つすべてのプラットフォーム/構成/サフィックス キーの組み合わせがユニークであることが確認されています。


#132281 JIT: don't use a jump-threaded block's sharpened predicate for dominator-based inference

  • 作成者: @EgorBo
  • 作成日時: 2026年08月13日 16:04:22(UTC)
  • マージ日時: 2026年08月14日 18:37:38(UTC)
  • ラベル: area-CodeGen-coreclr

概要

Jump-Thread-Based Optimization (RBO) によってブロックがリスレッドされた際、シャープン化された述語(predicate)が正しく機能しないバグを修正します。リスレッドされたエッジを通じて到達可能なブロックでも述語が有効であると誤認識され、不正な分岐削除が発生していました。特に isinst 結果の null チェック削除に伴う NullReferenceException を引き起こしていました。

変更内容

  • block.h/block.cpp: BBF_STALE_PREDICATE フラグを追加し、述語が古くなったブロックを標識する仕組みを実装
  • redundantbranchopts.cpp: RBO でジャンプスレッドが実行された際、シャープン化されたブロックに BBF_STALE_PREDICATE フラグを設定。また、optRedundantBranch 内の 2 つのドミネーター基盤推論ウォークで、このフラグが設定されたブロックをスキップするように修正
  • テストケース: Runtime_130700 リグレッションテストを追加し、null チェック削除による例外発生を防ぐことを確認

パフォーマンスへの影響

影響なし(SPMI asm diffs なし)

関連Issue

#130700

その他

この修正は公開 API ではなく JIT コンパイラの内部実装(最適化フェーズ)に対するものです。破壊的変更はありませんが、過度な分岐削除による不正な null チェック削除を防ぐ重要なバグ修正です。


#132278 Reset charsConsumed when BigInteger partial parsing fails

概要

BigInteger.TryParsePartialでスキャンは成功するがNumberToBigIntegerでの変換に失敗する場合、charsConsumedがゼロ以外のまま残される不具合を修正しました。変換失敗時に消費文字数をリセットし、呼び出し元が失敗した部分解析後に入力を進めないようになります。

変更内容

  • src/libraries/System.Runtime.Numerics/src/System/Number.BigInteger.cs: TryParseBigIntegerNumber内でNumberToBigIntegerが失敗時(非OK状態)にelementsConsumedを0にリセット
  • src/libraries/System.Runtime.Numerics/tests/BigInteger/parse.cs: TryParsePartial_Invalid_TestDataに小数入力とオーバーフロー指数(末尾の無効文字を含む)のテストケースを追加

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

内部実装(System.Runtime.Numericsライブラリの数値解析ロジック)の修正です。TryParsePartialの呼び出し元が正確な消費文字数を取得できるようになり、入力ストリームの位置管理が正しく機能します。


#132277 Compile UpdateOptions_ServerCertificateContextProvided test on desktop only

概要

Apple-mobile CoreCLR(tvOS等)におけるSystem.Net.Security.Unit.Testsの起動時クラッシュを解決するPR。UpdateOptions_ServerCertificateContextProvided_DoesNotDisposeCallerContextテストがSslStreamCertificateContext.Createで汎用Dictionaryをインスタンス化し、ReadyToRun合成イメージからILが削除されるため、テスト検出前にアプリが落ちる問題に対応。全テストプロジェクトを無効化せず、問題のあるテストのみをモバイルビルドから除外する戦略を採用。

変更内容

  • SslAuthenticationOptionsTestsをpartialクラスに変更
  • UpdateOptions_ServerCertificateContextProvided_DoesNotDisposeCallerContextテストをSslAuthenticationOptionsTests.Desktop.csに抽出(デスクトッププラットフォーム限定)
  • プロジェクトファイルにMSBuild Compile 条件を追加(windows/unix/osxに限定)
  • C#の#ifではなくMSBuild条件を使用(テストプロジェクトではTARGET_*定義が確実でないため)

パフォーマンスへの影響

影響なし

関連Issue

#131922、#131929、#132125

その他

  • テストのみの変更で、製品コードは未修正
  • 本番環境での検証はなし(テストプロジェクトは完全なライブラリベースライン構築が必要)
  • 変更は機械的な移動とビルド条件の追加のみで、デスクトップおよびモバイルレグで検証予定
  • Android向け別途対応(#131929)とは異なり、tvOS R2R起動クラッシュのような根本原因に対応するアプローチ
  • MSBuild条件により、TargetFrameworksと既存のIgnoreForCI行は保持され、モバイル上での他のユニットテスト実行は継続

#132273 Sync shared code from aspnetcore

概要

AspNetCoreから共有コードを同期するPRです。HTTP/3のQPack(QPACK)デコーダーに関連するバグ修正をportしています。aspnetcore#18943の修正に対応しています。

変更内容

  • QPackDecoder.cs: QPackデコーダーに12行の修正を追加
  • SR.resx: 3行のリソース文字列を追加(エラーメッセージと思われる)
  • QPackDecoderTest.cs: 14行のテストケースを追加(修正内容を検証)
  • Strings.resx: 3行のローカライズ用リソース文字列を追加

パフォーマンスへの影響

影響なし

関連Issue

aspnetcore#18943 (aspnetcore#68321のportに基づく修正)

その他

  • 自動生成されたPRであり、aspnetcoreの共有コード変更をruntimeに同期するものです
  • HTTP/3(QPACK)関連の修正のため、System.Net.Http ライブラリに関連します
  • テストケースが追加されているため、修正内容に対する検証が含まれています

#132272 [main] Source code updates from dotnet/dotnet

概要

このPRは、dotnet/dotnetリポジトリからのコードフロー更新です。ビルド日時2026年8月12日のコミット(7cdb217)からの依存関係と関連ソースの同期を行います。Microsoft.CodeAnalysis、NuGet、Arcade SDKなど複数のコンポーネントをアップデートし、Emscriptenサポートの新規依存を追加しています。

変更内容

  • 依存関係の更新

    • Microsoft.CodeAnalysis系(5.10.0 → 5.11.0)
    • NuGet.Frameworks/Packaging/ProjectModel/Versioning(7.10.0-rc → 7.11.0-rc)
    • Microsoft.DotNet.Arcade.Sdk(11.0.0-beta)
    • JIT Tools、Mono LLVM Tools、Wasm Node Transport(ランタイムプラットフォーム別)
    • System.Text.Json、System.Reflection.Metadata(11.0.0-rc.1)
  • 新規依存関係の追加

    • Microsoft.NET.Runtime.Emscripten.Internal(11.0.0-rc.1.26411.119)
  • ビルド・配置スクリプトの更新

    • GitHub Appトークン取得機能の追加(Get-GitHubAppToken.ps1、関連YAML)
    • NuGetソース設定スクリプトの改善
    • Helix Job Monitor統合の拡張
  • 関連リポジトリの同期

    • arcade、aspnetcore、diagnostics、efcore、emsdk、fsharp、msbuild、nuget.client、roslyn、runtime、sdk、winformsなど15個のリポジトリからの変更を取り込み

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • このPRはコードフロー更新(Codeflow PR)で、VMR(Virtual Monolithic Repository)からの自動同期です
  • 複数の関連リポジトリの最新コミットを統合しており、.config/dotnet-tools.jsonやeng/Version.Details.xmlなど構成ファイルの大幅な更新を含みます
  • Emscripten SDK関連の新しいターゲットファイル(AcquireEmscriptenSdk.targets)が追加されています

#132269 JIT: Strip GC/reloc flags from the size in arm64 instGen_Set_Reg_To_Imm

概要

ARM64 JITコードジェネレータで、即値エンコーディング時にGC/relocフラグを削除していない問題を修正します。instGen_Set_Reg_To_Imm関数が、リロケーション有効時にbyref定数をEA_BYREFのままヘルパー関数に渡し、アサーション失敗やmovz/movk命令生成時の不正な処理につながっていました。CrossGen2/NativeAOT等のAOTコンパイル時にのみ再現します。

変更内容

  • src/coreclr/jit/codegenarm64.cpp: instGen_Set_Reg_To_Imm関数でサイズからGC/relocフラグをストリップするロジックを追加。リロケーション有効/無効の両ケースで一貫してフラグ除去を実施、およびmovz/movk処理での32ビット幅計算を修正
  • src/tests/JIT/Regression/JitBlue/Runtime_132268/Runtime_132268.cs: リグレッションテストケース追加(AoT環境でbyref定数を含むコード)
  • src/tests/JIT/Regression/Regression_ro_2.csproj: テストプロジェクト設定更新

パフォーマンスへの影響

影響なし

関連Issue

#132268

その他

  • 修正対象: ランタイムのJITコンパイラ(内部実装)
  • 影響範囲: ARM64アーキテクチャのAOTコンパイル環境(CrossGen2、NativeAOT)
  • 破壊的変更なし

#132234 Package reusable cDAC usage graph analyzer

概要

cDAC(Contract Data Access Components)使用グラフアナライザーを再利用可能なコンポーネントとしてパッケージ化し、CoreCLR固有の分析エントリーポイントを設定可能なUsageGraphAnalysisOptionsに置き換えます。プロジェクトパスと登録型の名前を外部から指定でき、デフォルト値を返す構造体登録にも対応させています。

変更内容

  • UsageGraphAnalyzer.cs: UsageGraphAnalysisOptions(プロジェクトパス、登録型名、ソースルート、オプションの出力ディレクトリ)を導入し、公開アナライザーのエントリーポイントをオプションベースに更新
  • AnalysisPipeline.cs: パイプラインをUsageGraphAnalysisOptionsを使用するよう リファクタリング、出力ディレクトリの処理を改善
  • Commands.cs: CLI配線を更新してUsageGraphAnalysisOptionsを構築・渡すように修正
  • ContractRegistrationParser.cs: 登録発見を設定可能にし、default(T)を返すファクトリーの検出に対応
  • CdacCompilationLoader.cs: ルートベースのローディングから明示的なLoadProject(projectPath)に変更
  • CdacUsageGraph.csproj: アセンブリ名の変更、$(CDacTfm)への切り替え、パッキング有効化、Roslyneパッケージバージョンプロパティの更新
  • テスト更新: 統合テストとユニットテストを設定可能なオプションで実行するように修正、デフォルト値構造体登録の発見テストを追加

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • テスト結果:CdacUsageGraph.Tests 85件合格、Microsoft.Diagnostics.DataContractReader.Usage.Tests 4件合格
  • 再生成されたcDACコントラクト仕様に変更なし
  • この変更は内部実装(cDACツールセット)であり、公開APIには直接影響しません

#132216 Enable DnsResolver tests on all Unix platforms

  • 作成者: @rzikm
  • 作成日時: 2026年08月12日 16:13:16(UTC)
  • マージ日時: 2026年08月14日 08:59:58(UTC)
  • ラベル: area-System.Net

概要

#129846で追加されたDnsResolverの管理スタブリゾルバー実装を、Unix系プラットフォーム全体でテスト可能にするフォローアップです。System.Net.NameResolutionは共有の-unixターゲットフレームワークを使用しており、macOS、BSD、illumos、Haiku、iOS、tvOS、MacCatalyst、Androidは既にLinuxと同じ管理リゾルバーをコンパイルしています。本PR では、プラットフォーム固有のPAL実装不要なプラットフォーム上でテストを実行可能にし、[UnsupportedOSPlatform]属性を追加してサポート外プラットフォーム(Android、Browser、WASI)を適切にマークしました。

変更内容

  • ref/System.Net.NameResolution.cs: DnsResolver型とDns.Resolve*静的メソッドに[UnsupportedOSPlatform]属性を追加(Android/WASI対象)
  • Dns.Resolve.cs: 18個のDns.Resolve*静的メソッドに[UnsupportedOSPlatform]属性を付与
  • DnsResolverPal.Managed.cs: ValidateServersメソッドにAndroid上でのPlatformNotSupportedException検証ロジックを追加
  • DnsResolverPal.Unsupported.cs: WASI向けのマークを追加
  • DnsResolverTest.cs: テストガード条件をIsWindowsから「リゾルバー実装箇所」(Android/Browser/WASI除外)に変更。Windows固有のDnsQueryEx動作テスト3件は維持、Unix対応の検証テスト2件を新規追加
  • DnsResolverLoopbackTest.cs: IsNotMobile制約を削除。明示的なServers指定と、システムリゾルバー設定に触れないため、AndroidとApple mobileプラットフォームでも実行可能に変更
  • Strings.resx: エラーメッセージ文字列を3件追加
  • キャンセルトークンテスト: TaskCanceledExceptionから汎用的なOperationCanceledExceptionへの例外型対応に変更

パフォーマンスへの影響

影響なし

関連Issue

#129846、#132212、#132215

その他

  • Android: システムリゾルバー設定にアクセス不可のため、DnsResolverPal.Managed.ValidateServersで事前にPlatformNotSupportedExceptionを発生させて無限タイムアウトを防止。パラメータレスコンストラクタとDns.Resolve*18個を対象にマーク。ただし明示的なServers指定があるDnsResolver(DnsResolverOptions)は機能可能
  • Browser: アセンブリレベルのUnsupportedOSPlatforms=browser属性で既に対応
  • WASI: TCPおよびUDPソケットは可用だが、スレッド不在とリゾルバー設定欠如のため、同期クエリパス(IAsyncResult.AsyncWaitHandle.WaitOne)がデッドロックする可能性あり
  • ローカルテスト: Linux x64で`System

#132208 Remove obsolete WASM TypeScript definition cleanup logic

概要

WebAssembly TypeScript定義ファイルの廃止されたクリーンアップロジックを削除するメンテナンス変更です。.NET 11プレビュー時代の遺産コードを除去し、WASM ビルドターゲットの設定をアライメントします。

変更内容

  • Microsoft.NET.Sdk.WebAssembly.Browser.targets: wwwroot\dotnet.d.tsのレガシーコンテンツクリーンアップロジック(1行)を削除
  • _EnsureDotnetTypeScriptDefinitions タスクを、公開API $(WasmEmitTypeScriptDefinitions) ではなく内部フラグ $(_WasmEmitTypeScriptDefinitions) に依存するよう更新
  • _ResolveWasmConfiguration への依存を追加

パフォーマンスへの影響

影響なし

関連Issue

#132122 の関連クリーンアップ

その他

本変更は、WebAssemblyビルドシステムの古いアップグレードロジックを削除し、内部実装の一貫性を高めるメンテナンス変更です。TypeScript定義ファイルの出力機能自体に破壊的変更はありません。


#132205 [wasm] Rename confusing fromMonoPackage variable in AssetsComputingHelper.cs

概要

WebAssembly pack tasksのAssetsComputingHelper.cs内で、ローカル変数fromMonoPackageをfromRuntimePackに名前変更しました。これはIsFromRuntimePackがMonoとCoreClrの両方のランタイムパックをチェックするようになったため、変数名をより正確に反映させるための改善です。

変更内容

  • src/tasks/Microsoft.NET.Sdk.WebAssembly.Pack.Tasks/AssetsComputingHelper.cs
    • ローカル変数名をfromMonoPackageからfromRuntimePackに変更
    • すべての条件分岐(switch guard)でリネーム後の変数を使用するように更新

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 内部実装の改善であり、公開APIへの影響なし
  • コード可読性向上を目的とした変更です
  • PR作成者が指摘した文法改善のサジェスチョン(".rsp is not supported"という重複表現)も残されていますが、この PR では対応されていません

#132197 Use minipal timers directly in GC

  • 作成者: @Copilot
  • 作成日時: 2026年08月12日 03:19:02(UTC)
  • マージ日時: 2026年08月14日 14:24:28(UTC)
  • ラベル: area-GC-coreclr

概要

GCランタイムのタイマー実装をminipalライブラリに統一することで、プラットフォーム固有のタイマー処理を一元化する変更です。GCToOSInterfaceのタイマーラッパーを削除し、GCの呼び出し側をminipal_lowres_ticks()、minipal_hires_ticks()、minipal_hires_tick_frequency()に置き換えます。

変更内容

  • src/coreclr/gc/env/gcenv.os.h: GC低解像度・高解像度タイマーラッパー削除、minipalタイマーヘッダ追加
  • src/coreclr/gc/*.cpp: GC各モジュール(allocation.cpp、collect.cpp、dynamic_tuning.cpp、gc.cpp、gccommon.cpp、gcee.cpp、interface.cpp、mark_phase.cpp)でタイマー呼び出しをminipalスタイルに統一
  • src/coreclr/gc/gcinternal.h、gcpriv.h: タイマー宣言を整理
  • プラットフォーム固有実装削除: unix/gcenv.unix.cpp、wasm/gcenv.cpp、windows/gcenv.windows.cppから重複するタイマー実装を削除(計94行削除)

パフォーマンスへの影響

影響なし(タイマー呼び出しの機能は変わらず、実装の一元化のみ)

関連Issue

#126551

その他

重要な懸念事項: PR説明では#126551を「修正」と記載していますが、該当IssueはWindows特定パーティション環境でのQueryUnbiasedInterruptTimeAPI利用可能性の問題です。本PRは呼び出し側をminipalルーティングに変更するのみで、minipal自体に可用性チェックやフォールバック実装は追加していません。Windows版minipal_lowres_ticks()は依然としてQueryUnbiasedInterruptTimeを無条件に呼び出すため、元の問題は未解決です。本修正を完全にするにはminipal層でのAPI利用可能性チェックと代替実装が必要です。


#132184 Improve HTTP/2 extended CONNECT error message

概要

HTTP/2 extended CONNECT機能でサーバーがサポートしていない場合のエラーメッセージを改善しました。エラーメッセージをより明確にして、サーバー側の問題であることを強調し、HTTP/1.1へのダウングレード手段についての既存のガイダンスは保持しています。

変更内容

  • src/libraries/System.Net.Http/src/Resources/Strings.resx: HTTP/2 extended CONNECT失敗時のエラーメッセージ文言を1行修正

パフォーマンスへの影響

影響なし

関連Issue

#111470

その他

  • 既存テスト Connect_ServerDoesNotSupportExtendedConnect_ClientIncludesExceptionData の対象テストで合格確認
  • HTTP/2通信路(平文およびTLS)両方のリグレッション検証を実施
  • System.Net.Http関連の全テストスイート(計7,461件)で合格確認

#132163 Limit header name in HtppListenerRequest

  • 作成者: @iremyux
  • 作成日時: 2026年08月11日 19:42:11(UTC)
  • マージ日時: 2026年08月14日 12:07:09(UTC)
  • ラベル: area-System.Net.Http

概要

HttpListenerRequestでHTTPヘッダー名の長さに制限を設定し、過度に長いヘッダー名を持つリクエストを拒否するセキュリティ改善。Issue #132128を修正します。

変更内容

  • HttpListenerRequest.Managed.cs: ヘッダー名の長さ制限ロジックを追加・修正(3行追加、3行削除)
  • InvalidClientRequestTests.cs: ヘッダー名長制限に関するテストケースを追加(7行追加)

パフォーマンスへの影響

影響なし

関連Issue

#132128

その他

なし


#132153 [mono][wasm] Box gsharedvt Nullable<T> via a wrapper-free runtime helper

概要

Mono WASM のミニマル gsharedvt (llvmonly/WASM) 環境で、Nullable<T> をボックス化する際に発生していた "function signature mismatch" エラーを修正します。corelib が AOT コンパイルされ、消費側アセンブリがインタプリタ実行される場合に、per-T ボックスラッパーが不在となり、非ジェネリック IEnumerator.Current を通じた Nullable<T> のボックス化がトラップしていました。

新しい mono_helper_box_nullable icall を導入し、既存の mono_nullable_box ヘルパーをラップして、値をアドレス経由で渡し rgctx から具体的な Nullable<T> クラスを取得します。これにより per-T ボックスラッパーが不要になり、トラップを回避しつつメソッドの AOT コンパイル状態を保持できます。

変更内容

  • jit-icalls.c / jit-icalls.h / jit-icall-reg.h / mini-runtime.c: 新しい mono_helper_box_nullable(vbuf, klass) JIT icall を追加・登録(内部実装の変更)
  • method-to-ir.c: mini_emit_nullable_box_helper 関数を新規追加。llvm_only パスの NULLABLE_CLASS_BOX 両箇所をこのヘルパー経由にルーティング(ランタイム動作の変更)
  • 回帰テスト: src/tests/Loader/classloader/generics/regressions/131537/ に新規テストプロジェクト。Queue(ICollection) 経由で Nullable<T> をボックス化する構成をテスト。_AOT_InternalForceInterpretAssemblies により wasm-AOT 環境で AOT corelib + インタプリタ実行アセンブリの構成を再現

パフォーマンスへの影響

ランタイムバイナリ: 無視できるレベル(小さい icall + テーブルエントリ一つ) AOT イメージ: ほぼ中立 — per-T object(Nullable<T>) ボックスアウトシグラッパーが不要になり、小さい per-call-site 変更で相殺。前の固定リスト rooting アプローチよりもはるかに軽量。

関連Issue

#131537

その他

この修正は同 Issue で検討された 2 つの先行アプローチを超える設計:

  1. 固定リスト rooting (#131946) — corelib 値型の限定セットのみ対応
  2. gsharedvt を box で失敗させる案 — トラップは回避したが AOT 対象メソッド全体が未出力化され、CI で null function 回帰を引発

本修正はラッパー不要の icall 経由でルーティングするため、すべての値型対応かつ AOT コンパイル状態を保持。Release ビルドの Mono WASM AOT で検証済み(corelib AOT + app インタプリタ)。


#131911 Suppress interface generic dataflow warnings under RUC

概要

型がRequiresUnreferencedCodeで直接アノテートされている場合、インターフェース実装時のジェネリック型引数に関するIL2026/IL2091警告を抑制します。一方、リンカーとNativeAOTのデータフロー解析は実行継続して、インターフェース実装に必要なメンバーは保持されます。これにより基本型の既存動作に合わせながら、警告抑制をインターフェース解析に限定します。

変更内容

  • MarkStep.cs: インターフェース実装のジェネリック型引数データフロー周辺に局所的な抑制状態を追加し、警告を無音化しつつ必要なメンバーを保持
  • GenericArgumentDataFlow.cs (linker & NativeAOT): ジェネリック型引数処理時に診断出力を制御する抑制パラメータを追加
  • DynamicallyAccessedMembersAnalyzer.cs: RequiresUnreferencedCodeを持つ型に対してインターフェースリストのジェネリック解析をスキップ(DAM型階層解析は実施)
  • DataflowAnalyzedTypeDefinitionNode.cs: 型レベルRUC下でインターフェースリストトリミング診断を抑制しつつデータフロー実行継続
  • ReflectionMarker.cs: トリミング警告のみ抑制しながら他の機能警告(AOT/単一ファイル)は報告可能にするオプションを導入
  • テストケース: インターフェースリストジェネリック警告がRUC下で抑制されること、および他の機能警告がNativeAOTで保持される動作を検証

パフォーマンスへの影響

影響なし

関連Issue

#108507 #108523

その他

  • linker、Roslyn Analyzer、NativeAOT間での診断動作の一貫性を確保
  • 属性とDynamicallyAccessedMembers型階層解析からの警告は影響を受けない(これらは型のRequiresUnreferencedCodeスコープ外からリフレクションで到達可能)
  • ILLink.RoslynAnalyzer.Tests、ILCompiler.Trimming.Tests、Mono.Linker.Testsで検証

#131908 Fix XmlSerializer UnknownAttribute perf regression

概要

XmlSerializerの属性処理パフォーマンスの回帰を修正しました。要素に属性がない場合の属性列挙を回避し、UnknownNode/UnknownAttributeイベントハンドラが登録されていない場合の不要な列挙を削減します。リフレクションベース、生成C#、RefEmitの各シリアライザー実装全体で一貫性を確保しました。

変更内容

  • ReflectionXmlSerializationReader.cs: HandleUnknownAttributesメソッドをリファクタリング。属性列挙を、イベントサブスクライバーが存在しかつ要素が属性を持つ場合に限定しました。xsi:nilマーク済み要素での属性サーフェシング動作を修正。
  • XmlSerializationReader.cs: サブスクライバー判定用の内部ヘルパーを追加。生成コードでReader.HasAttributesをチェックしてから属性列挙を行うように更新。
  • XmlSerializationReaderILGen.cs: 生成IL内でReader.HasAttributesによる属性列挙ゲーティングを追加。ReadNull呼び出し前後の処理順序を調整。
  • Expected.SerializableAssembly.XmlSerializers.cs: 生成コード更新に伴う期待値ファイルの更新。

パフォーマンスへの影響

改善:属性のない要素でのMoveToNextAttribute呼び出しが削減され、UnknownNode/UnknownAttributeハンドラが登録されていないシナリオでの反射ベース処理が高速化。生成リーダーでも属性列挙が不要な場合のオーバーヘッド削減。

関連Issue

#131813、#131908

その他

  • リフレクションベースシリアライザーは、未登録のイベントハンドラと属性なし要素の両条件を満たす場合に列挙をスキップ。
  • 生成C#およびRefEmitリーダーは、サブスクライバーの内部状態を検査するため保護APIの追加を避け、属性が存在する場合は属性列挙を保持する意図的な設計。
  • xsi:nilマーク済み要素は、属性をunknown attributeとしてサーフェシングしない動作で一貫性を確保(構造体逆シリアル化との整合)。
  • 追跡機能付きXmlReaderラッパーを用いた属性列挙動作の検証テストを追加。

#131594 [Test] Mark DynamicOptimization profiler test as GCStressIncompatible

概要

DynamicOptimizationプロファイラーテストをGCStressIncompatibleとしてマークし、GCストレステスト実行時にスキップされるようにします。EventPipeセッションがGCストレス下で著しく遅延するため、このテストはGCストレス環境での実行に適さないことを明示します。

変更内容

  • src/tests/profiler/dynamicoptimization/DynamicOptimization.csproj: <GCStressIncompatible>true</GCStressIncompatible>プロパティを追加し、テストインフラストラクチャがDOTNET_GCStress環境変数設定時にこのテストをスキップするよう指示。

パフォーマンスへの影響

影響なし(テスト実行スキップにより、GCストレステスト実行時の無駄な遅延が軽減される)

関連Issue

#118839

その他

なし


#131538 JIT: Support general inlining in runtime async

概要

JITコンパイラの非同期メソッドインライン機能を拡張し、await文を含むメソッドの一般的なインラインに対応します。新しいランタイムヘルパーメソッド、JIT↔EE API (getAwaitAwaiterInContinuationCall)、および包括的なテストとドキュメントが追加されました。この機能は現在検証段階で、.NET 11への統合を目指しており、デフォルトで無効化される可能性があります。

変更内容

JIT インフラストラクチャ

  • 新しいIRノード (GT_CONTINUATION_MEMBER_OFFSET) と well-known 疑似引数 (AsyncAwaiter, AsyncResumed) を追加
  • 非同期インライン化の構成ゲート (JitAsyncInlining) を実装
  • インライン後の ExecutionContext / SynchronizationContext 復元サポートを追加

ランタイム API

  • getAwaitAwaiterInContinuationCall メソッドを ICorJitInfo に追加(非同期フレーム・アウェイタハンドリング用)
  • AsyncHelpers の新しいランタイムヘルパーメソッドを実装(継続ストレージ経由のアウェイタ読み込み、コンテキスト復元・切替)

非同期フレーム処理

  • インラインされた非同期フレームメタデータをトラッキング
  • 継続レイアウトを複数の「継続メンバー」種類およびインラインフレームテーリングに対応へ拡張
  • OSR(On-Stack Replacement)中のコンテキスト正確性を検証

テスト関連

  • 31個の非同期テストプロジェクトを Microsoft.NET.Sdk に移行
  • インラインフレームコンテキストセマンティクス検証用テストを新規追加 (inlined-frame-contexts, osr-inlined-contexts, custom-struct-awaiters, asyncversion-inline など)

ドキュメント

  • ランタイム非同期インライン化設計ドキュメント (runtime-async-inlining.md) を新規追加

パフォーマンスへの影響

提供されている情報では、具体的なパフォーマンス測定結果やベンチマーク数値は記載されていません。ただし、await を含むメソッドのインライン化により、関数呼び出しオーバーヘッドが削減される可能性があります。

関連Issue

#127865 #128152 #131342

その他

  • SuperPMI ツール、AOT JIT インターフェース、および R2R コンパイルチェーンに対応する変更も含まれています
  • JIT-EE バージョン GUID が更新されました
  • 本機能は検証段階にあり、.NET 11 への統合時にデフォルトで無効化される可能性があります

#131356 Fix edge likelihoods out of optimize bools

概要

optOptimizeCompareChainCondBlockが連続する2つの条件付きブロックをマージする際、エッジ尤度(edge likelihood)の計算が誤りを生じていた問題を修正しました。マージ後のブロックの出力エッジ尤度が元の制御フロー確率を正しく保持するようになります。

変更内容

  • src/coreclr/jit/optimizebools.cpp: optOptimizeCompareChainCondBlock関数を修正
    • マージ前のエッジ尤度を捕捉し、マージ後に正しく再計算
    • ブロック圧縮前にプロファイル重みを調整し、不正な重み減少を防止
    • fgRepairProfileCondToUncondの呼び出しを削除し、より適切な修復処理に置き換え

パフォーマンスへの影響

  • パフォーマンススコアのデグレード/改善は、ループ内のブロック重みが正しく計算されるようになった結果による
  • ブロック重み(0.00→0.01など)の変更に伴い、ブロック並び替えが発生し、コードサイズが変動する場合がある

関連Issue

#130150

その他

なし


#131225 Populate RetryAfter on SlidingWindowRateLimiter

概要

SlidingWindowRateLimiterの失敗したリースがRetryAfterメタデータを常に返していなかった問題を修正します。これまで静的シングルトンのFailedLeaseがretryAfter: nullで構成されていたため、TryGetMetadata(RetryAfter)は常にfalseを返していました。本修正はFixedWindowRateLimiterで既に実装されている修正と同様のアプローチです。スライディングウィンドウでは、固定ウィンドウと異なり全体をリセットせず1セグメント単位で許可を解放するため、推定リトライ遅延は_requestsPerSegmentを次のセグメント以降走査して十分な許可が得られるまで計算します。

変更内容

  • SlidingWindowRateLimiter.cs:

    • 静的シングルトンFailedLeaseを廃止し、失敗時に推定RetryAfterを含む個別のSlidingWindowLeaseインスタンスを生成
    • CreateFailedSlidingWindowLeaseメソッド(ロック必須)を追加。_requestsPerSegmentを複数セグメントにわたって走査してリトライ遅延を推定
    • 従来の高速パス(permitCount == 0)では保護されていないロック外でのメタデータ読み取りをリスク回避のため、ロック取得後に失敗リース計算を行うように修正
  • SlidingWindowRateLimiterTests.cs:

    • 失敗したリースのRetryAfterメタデータ検証テストを追加
    • キューイング時、部分的なセグメント経過、ウィンドウ期限切れなどのエッジケースシナリオをカバーする広範なテストを実装

パフォーマンスへの影響

ロック取得がクリティカルパス上で行われるため、高頻度な拒否リクエストが多い場合にわずかなスループット低下の可能性があります。ただし詳細なベンチマーク結果は提供されていません。

関連Issue

#131175

その他

  • 内部実装の変更であり、公開API自体は影響を受けません
  • 互換性への破壊的変更なし(既存の動作を正常化)
  • スレッド安全性確保のため、_requestsPerSegmentと_currentSegmentIndexの読み取りをロック下で実行

#130910 Mirror Windows behavior for managed HttpListener Content-Length

  • 作成者: @iremyux
  • 作成日時: 2026年07月16日 19:16:26(UTC)
  • マージ日時: 2026年08月14日 13:15:52(UTC)
  • ラベル: area-System.Net.Http

概要

マネージド HttpListener の Content-Length パース動作を Windows の動作に合わせるため、数値範囲外の値をゼロとして処理するのではなく、拒否するように変更しました。この修正により、オーバーフロー値の処理が Windows の実装と一致するようになります。

変更内容

  • HttpListenerRequest.Managed.cs: Content-Length パースロジックを修正し、範囲外の数値値を正しく拒否するように変更(3行追加、9行削除)
  • HttpListenerRequestTests.cs: 関連するテストケースを削除(2行削除)
  • InvalidClientRequestTests.cs: Content-Length の無効値処理に関するテストを追加(2行追加)

パフォーマンスへの影響

影響なし

関連Issue

#130910

その他

この変更は System.Net.HttpListener ライブラリの内部実装に対する修正であり、Windows との動作一貫性向上を目的としています。既存の無効な Content-Length 値の処理が変更されるため、不正なリクエストの処理がより厳密になります。


#130263 [OptionsValidator] source generator: emit ValidateAsync() for IAsyncValidateOptions<T>

概要

[OptionsValidator] ソースジェネレータに非同期オプション検証のサポートを追加します。IAsyncValidateOptions<T> を実装するバリデータに対して ValidateAsync(string?, TOptions, CancellationToken) メソッドを生成します。同期的な Validate メソッドは常に保持され、両方の検証パスがサポートされます。新しい公開API は追加されず、ジェネレータの動作とラッパイアティクスのみが変更されます。

変更内容

  • SymbolLoader.cs / SymbolHolder.cs: IAsyncValidateOptions<T> と IAsyncValidatableObject のシンボルを任意の入力としてロードし、ダウンレベルターゲットに対応
  • Parser.cs: メンバーと合成バリデータ解析を通じて非同期生成要件を伝播;手書きの Validate / ValidateAsync メソッド検出ロジックを追加
  • ValidatedModel.cs / ValidatedMember.cs: モデルごとの非同期自己検証フラグと、ネストされた/合成バリデータが非同期メソッドを生成するかどうかを追跡
  • Emitter.cs: ValidateAsync メソッドを生成;Validator.TryValidateValueAsync() を使用してメンバー検証を実行;IAsyncValidatableObject.ValidateAsync() で非同期自己検証に対応;複数メンバーの検証を Task.WhenAll で並行実行(実際に中断可能な場合のみ);宣言順に結果をマージして決定論的な失敗を実現
  • DiagDescriptors.cs / Strings.resx: 新しい診断 SYSLIB1219(手書きの ValidateAsync 検出時)を追加
  • テスト: 非同期メンバー検証、非同期自己検証、キャンセレーション転送、並行検証、暗黙的/明示的インターフェース実装の検証カバレッジを拡張

パフォーマンスへの影響

複数メンバーの検証が Task.WhenAll で並行実行され、await foreach による非同期列挙アイテム検証のサポートにより、I/O バウンドな検証属性(カスタム非同期バリデータなど)では応答性が向上します。ただし、ダウンレベルターゲット(TryValidateValueAsync が利用不可)では同期検証にフォールバックされます。

関連Issue

#128882 #130719 #131048 #128100

その他

重要な互換性変更: 本PRは SYSLIB1205 を明示的な IValidateOptions<T>.Validate 実装に拡大します。以前はジェネレータがこの形式を認識できず、並列の公開 Validate メソッドを生成して、インターフェース ディスパッチが手書きメソッドをバイパスしていました。現在はそのようなコードはエラー診断を受けるため、リリースノートに含める必要があります。

テスト結果: 両ターゲットフレームワ


#128980 Prevent corrupted SMTP headers when MailAddress.DisplayName contains CR/LF

  • 作成者: @Copilot
  • 作成日時: 2026年06月04日 11:51:26(UTC)
  • マージ日時: 2026年08月14日 10:22:34(UTC)
  • ラベル: area-System.Net

概要

MailAddressのDisplayNameにCR/LFが含まれていた場合、SMTPのFrom:/To:ヘッダーが破損する脆弱性を修正しました。呼び出し側が指定したDisplayNameに含まれるCR/LFはFormatExceptionを投げて拒否し、アドレス文字列から解析されたDisplayNameのCR/LFはRFC 5322に従いアンフォールド(削除)します。

// 修正前:破損したSMTPヘッダーを生成していた
// new MailAddress("user@example.com", "Display Name\r\n");

// 修正後:FormatExceptionをスロー
new MailAddress("user@example.com", "Display Name\r\n"); // FormatException

変更内容

  • MailAddress.cs: TryParseメソッドの実装変更
    • 呼び出し側が指定したDisplayNameに対してCR/LFの検出と拒否処理を追加(FormatExceptionをスロー、TryCreateはfalseを返却)
    • アドレス文字列から解析されたDisplayNameに対してCR/LFを削除するStripCRLFヘルパーメソッドを追加(アンフォールド処理)
  • MailAddressDisplayNameTest.cs: CR/LF検出時の動作確認テストを追加
  • MailAddressParserTest.cs: 解析時のCR/LF削除処理のテストを追加
  • MailAddressParsingTest.cs: 既存テストの調整

パフォーマンスへの影響

影響なし。CR/LFの事前検出(HasCROrLF)により、実際のメモリ割り当ては必要な場合のみ発生するため、通常系ではオーバーヘッドはありません。

関連Issue

#128980

その他

  • この修正は、MailMessage.Subjectの既存のCR/LF検出ロジック(MailBnfHelper.HasCROrLF)と同じ規約に準拠しています。
  • 破壊的変更:呼び出し側が意図的にDisplayNameにCR/LFを指定していた場合は例外が発生するようになります。

#128675 Enable sccache for macOS CoreCLR legs

概要

macOS CoreCLR CI レグに sccache コンパイル キャッシング を導入し、Linux/FreeBSD での実装パターン (#128065) をミラーリングするもの。8つの macOS CI ジョブ(CoreCLR_Libraries、Libraries_CheckedCoreCLR、NativeAOT など、arm64/x64)で native コード構築時にキャッシュを有効化。macOS 固有の -Xarch_* フラグと -include 引数の書き換えを処理する新しいラッパースクリプトを追加し、CMake コンパイラランチャー注入を共有化する。

変更内容

  • eng/native/build-commons.sh — USE_SCCACHE=true 環境変数に基づき centralized に -DCMAKE_C_COMPILER_LAUNCHER と -DCMAKE_CXX_COMPILER_LAUNCHER を注入。macOS/maccatalyst では新しいラッパーを launcher として使用。
  • eng/native/sccache-xarch-wrapper.sh (新規) — macOS 特有の -Xarch_<arch> フラグと -include<path> 引数をリライトしてから sccache を呼び出すラッパースクリプト。sccache が認識できない Apple 固有フラグを削除し、プリコンパイルヘッダ(PCH)パスを正しくハッシュできるよう形式を変換。
  • src/coreclr/build-runtime.sh — 共有 native ビルドロジックに移行したため、重複するランチャー注入を削除。
  • eng/pipelines/coreclr/templates/setup-sccache.yml — macOS NuGet パッケージダウンロード対応(sccache.osx-arm64/sccache.osx-x64)、キャッシュサイズを 3584M → 5120M に拡大。キャッシュキーは ${osGroup}${osSubgroup}|${archType}|${nameSuffix}|$(Build.BuildId) で platform/arch ごとに分離。
  • eng/pipelines/coreclr/templates/sccache-stats.yml — macOS レグで sccache --show-stats を実行するよう gate 拡張。
  • eng/pipelines/runtime.yml — sccache setup/stats テンプレートを対象 macOS ジョブに有効化。

パフォーマンスへの影響

キャッシュサイズの増加(3584M → 5120M)により、より多くのコンパイル結果が保持可能。sccache によるインクリメンタルビルド時の再コンパイル削減が期待され、CI ジョブの実行時間短縮につながる可能性がある。具体的なベンチマーク値は提供されていない。

関連Issue

#128065 (Linux/FreeBSD の sccache 導入)

その他

留意点: 複数の Copilot レビューコメントから、実装と PR 説明に不一致がある可能性が指摘されている。PR 説明では「GitHub release tarball + SHA-256 pinning」と記載されているが、実装では NuGet パッケージ(チェックサムなし)を使用。また -Xarch_* フラグと -include 引数の書き換えロジックが実装と説明で異なる可能性がある。cmakeArgs に対する引用符の扱いに関する shell interpolation の安全性についても指


#128504 [XmlSerializer] Avoid IList/Array.GetValue path for array item serialization in reflection writer

  • 作成者: @Copilot
  • 作成日時: 2026年05月22日 22:39:42(UTC)
  • マージ日時: 2026年08月14日 16:07:16(UTC)
  • ラベル: area-Serialization

概要

XmlSerializerのリフレクションパスでの配列要素シリアライゼーションを最適化しました。従来は配列をIListとして扱うことでArray.GetValueを呼び出していましたが、明示的な配列パスを追加して直接列挙することで、ループ内のオーバーヘッドを削減します。シリアライゼーション出力の動作は変わりません。

Array? choiceArray = choiceSources as Array;

if (o is Array array)
{
    IEnumerator e = array.GetEnumerator();
    int c = 0;
    while (e.MoveNext())
    {
        object ai = e.Current;
        object? choiceSource = choiceArray?.GetValue(c++);
        WriteElements(ai, choiceSource, elements, text, choice, true, true);
    }
    return;
}

変更内容

  • ReflectionXmlSerializationWriter.cs: WriteArrayItemsメソッドにArray型の明示的なチェック分岐を追加。配列の場合はArray.GetEnumerator()で直接反復し、IList経由でのインデックスアクセスを避ける。choiceSourcesキャストを一度だけ実行してchoiceArrayに保存し、配列/リスト/列挙可能パス全体で再利用
  • XmlSerializerTests.cs: 配列シリアライゼーションの動作を検証するテストケース(82行)を追加
  • SerializationTypes.RuntimeOnly.cs: テスト用の型定義(46行)を追加

パフォーマンスへの影響

改善あり。配列要素へのアクセス時にIListインターフェース経由でのインデックスアクセスを回避し、直接配列列挙を使用することで、特にプリミティブ型配列におけるArray.GetValue呼び出しのオーバーヘッドを削減します。ベンチマーク結果の記載はありませんが、ループ内での1要素あたりの処理がより効率的になります。

関連Issue

#67221

その他

  • 変更は内部実装(リフレクションベースのシリアライザーの反復処理戦略)に限定され、公開APIへの影響なし
  • 互換性への影響なし(シリアライゼーション出力の意味論は不変)
  • テスト実行時にファイアウォールによるDNSブロックが発生していますが、テスト実装そのものの問題ではありません

#123920 Add format attribute to printf-style wrappers and fix format string errors

  • 作成者: @Copilot
  • 作成日時: 2026年02月02日 23:40:32(UTC)
  • マージ日時: 2026年08月14日 19:15:07(UTC)
  • ラベル: area-CodeGen-coreclr

概要

CoreCLR、Mono、Corehost全体のprintf形式関数に__attribute__ ((format (printf, ...)))属性を追加し、コンパイラによるフォーマット文字列の検証を有効化しました。この変更により85以上のフォーマット文字列エラーを修正し、セキュリティと互換性を向上させています。

変更内容

フォーマット属性マクロの追加(内部実装)

  • src/native/minipal/types.hにMINIPAL_ATTR_FORMAT_PRINTFマクロを中央集約
  • 60以上のwrapper関数(13ヘッダに分散)に属性を適用

フォーマット文字列エラーの修正(内部実装)

  • プラットフォーム固有コード:%I64d/%Id → %zd/%zu、%I64x → PRIX64等に統一(16件)
  • uint64_t形式化:標準inttypes.hマクロ(PRIX64/PRIx64/PRIu64等)を使用(19件)
  • 無効な%pフラグ削除:%#p/%0p → %p(4件)
  • ポインタキャスト追加:(void*)キャストを追加(7件)
  • フォーマットセキュリティ修正:printf(str) → printf("%s", str)(24件)
  • 型不一致修正:その他各種型のミスマッチ対応(14件以上)

修正対象ファイル(24ファイル) JIT関連(emit系、codegen系、gentree等)、VM関連(perfmap、stubgen、crst等)、GC、Corehost、Mono、ツール(ildasm、mdinfo)、デバッグ関連を修正

ヘッダ追加

  • C++ファイルで__STDC_FORMAT_MACROSガード付きで<inttypes.h>を追加(emitwasm.cpp、jitinterface.cpp等)
  • 古いglibcの互換性確保

パフォーマンスへの影響

影響なし

関連Issue

#123920

その他

セキュリティ: 非リテラル文字列をフォーマット引数として使用していた24個の脆弱性を排除

互換性: 破壊的変更なし。マクロはWindows MSVC、Android NDK等の標準ライブラリと競合しない。x64、ARM64、32-bit ARM全プラットフォームで検証済み

品質向上: 重複した#ifdef __GNUC__ブロック170+行を排除し、中央管理マクロに統一。gcheaputilities.cppの診断メッセージ改善(ポインタ表示からUTF-8文字列表示へ)、inlinepolicy.cppのラベル/値不一致修正等を実施


目次