注意点
このページは、dotnet/runtimeリポジトリにマージされたPull Requestを自動的に収集し、その内容をAIが要約した内容を表示しています。そのため、必ずしも正確な要約ではない場合があります。
目次
- #130414 Add Complex<T> generic struct mirroring Complex API surface
- #130404 [release/10.0] Fix cgroup v2 memory max extraction
- #130392 [release/9.0-staging] Update dependencies from dotnet/icu
- #130391 [wasm] Bail R2R for all SIMD parameter sizes, not just SIMD16
- #130386 Ensure code is ready for calls from R2R Wasm logic
- #130378 Remove some branches in OptimizedInboxTextEncoder.GetIndexOfFirstCharToEncode
- #130377 Fix cgroup v2 memory max extraction
- #130363 Adjust InterpreterFP handling to represent the logical FP (where funclets share the FP with the establishing method)
- #130360 [clr-ios] Disable R2R IL-body stripping for library tests that need IL at run time
- #130341 Fix Apple NativeAOT test harness crash from string P/Invoke marshalling
- #130325 Deduplicate IObjectNodeWithAlignment into shared Common dependency analysis
- #130279 Pin blittable layout classes in NativeAOT marshalling
- #130273 [release/10.0] Source code updates from dotnet/dotnet
- #130239 Fix NativeAOT reverse delegate stub signature with runtime marshalling disabled
- #130195 [release/9.0-staging] Update dependencies from dotnet/cecil
- #130170 Optimize
await Task.Yield()in runtime async - #130158 [cDAC] Fix
#130143- search correct loader module for generic instantiations - #130151 Optimize MethodDataObject::FillEntryDataForAncestor for MethodImpl hierarchies
- #130140 Add ToUpperOrdinal and ToLowerOrdinal casing APIs
- #130104 Add special casing for string constructors for WebAssembly
- #130093 Handle if_nametoindex failure in EnumerateInterfaceAddresses.
- #130026 [clr-interp] Ensure initialization of MethodDesc->m_interpreterCode
- #129887 [LoongArch64] Apply fixes for coreclr-interp on linux-loongarch64.
- #129491 Remove unreachable NotImplementedException array-with-choice
- #129489 Implement support for XmlAttribute in WriteAttribute method
- #128950 Arm64: [PAC-RET] NativeAOT changes
- #128777 [Android] Add missing JNI exception checks in crypto PAL
- #128506 Fix DataContractSerializer nullable struct initialization cache lookup
- #122093 Add Zip Archives password support
#130414 Add Complex<T> generic struct mirroring Complex API surface
- 作成者: @tannergooding
- 作成日時: 2026年07月09日 15:37:22(UTC)
- マージ日時: 2026年07月09日 19:44:33(UTC)
- ラベル: area-System.Numerics
概要
Complex<T> ジェネリック構造体を新規実装し、既存の非ジェネリック Complex の完全な公開API表面をミラーリングしています。Complex<T> は IFloatingPointIeee754<T> と IMinMaxValue<T> の制約を持ち、float、double、Half、BFloat16、NFloat などの浮動小数点型に対応します。既存の Complex は複数のメソッドを Complex<double> に委譲し、コード重複を排除しています。
Complex<float> z = Complex<float>.FromPolarCoordinates(2.0f, MathF.PI / 4);
float mag = z.GetMagnitude();
Complex<float> w = z * 3.0f + new Complex<float>(1.0f, -1.0f);
// 双方向の相互変換に対応
Complex c = Complex.CreateChecked(new Complex<double>(3, 4));
Complex<float> cf = Complex<float>.CreateChecked(new Complex(3, 4));
変更内容
新規ファイル:
Complex.Generic.cs—Complex<T>の完全実装(1696行)- 算術演算子:
+,-,*,/, 単項演算子、インクリメント/デクリメント - 静的プロパティ:
Zero,One,ImaginaryOne,NaN,Infinity - インスタンスメソッド:
GetMagnitude(),GetPhase() - 数学関数:
Abs,Sqrt,Pow,Exp,Log, 三角関数、双曲線関数、逆三角関数、FromPolarCoordinates - ジェネリック数学インターフェース実装:
INumberBase<Complex<T>>,ISignedNumber<Complex<T>>,IAdditiveIdentity,IMultiplicativeIdentity - パース・フォーマット:
IParsable,ISpanParsable,IUtf8SpanParsable,ISpanFormattable,IUtf8SpanFormattable - 変換:
CreateChecked/CreateSaturating/CreateTruncatingで複数の型間変換に対応
- 算術演算子:
Complex.csの更新(-1535行、メソッド委譲により削減)DefaultNumberStyleとInvalidNumberStylesをinternalに昇格- 4行以上の実装を持つメソッドを
Complex<double>に委譲(混合型演算子、三角関数、数学関数、変換ヘルパー) - 未使用の private フィールド (
s_sqrtRescaleThreshold,s_asinOverflowThreshold,s_log2) と内部ヘルパーを削除
ref/System.Runtime.Numerics.cs— 公開APIサーフェスにComplex<T>を追加(+127行)tests/ComplexTests.cs— 37個のテストを含むComplexTests_Genericスイートを追加(+334行)- 基本構築、算術演算、パース、述語、相互変換をカバー
プロジェクト設定 — 新規ファイルをビルドに組み込み
パフォーマンスへの影響
既存の Complex は複数メソッドを Complex<double> に委譲するため、若干のインダイレクション増加の可能性があります。ただし、JITコンパイラによ
#130404 [release/10.0] Fix cgroup v2 memory max extraction
- 作成者: @github-actions[bot]
- 作成日時: 2026年07月09日 11:54:37(UTC)
- マージ日時: 2026年07月09日 22:54:51(UTC)
- ラベル: Servicing-approved area-GC-coreclr
概要
cgroup v2を使用するLinux環境で、プロセスがcgroup階層のルートに割り当てられている場合に発生するメモリ最大値抽出のバグを修正します。この問題は.NET 9.0で導入され、Google Colabのようなcgroup v2環境でNativeAOT実行時の起動時クラッシュを引き起こしていました。修正により、cgroup階層スキャンループがマウントルートに到達時に正しく終了し、そのフォルダのmemory.maxファイルを処理するようになります。
変更内容
- src/coreclr/gc/unix/cgroup.cpp: cgroup v2メモリ最大値抽出処理の修正(+8/-2行)
- cgroup階層スキャンループがマウントルートで正しく終了するロジックを追加
- ルートディレクトリのmemory.maxファイル処理を正しく実装
パフォーマンスへの影響
影響なし
関連Issue
#130092(顧客報告) #130377(元のPR) #93611(回帰を引き起こしたPR)
その他
- リグレッション: .NET 9.0で#93611にて階層的メモリ制限対応時に導入
- テスト環境: Google Colabの jupyter notebook環境でNativeAOTアプリケーション実行時に検証
- 修正のリスク: 低い。cgroup情報抽出コードの安全性向上のみ
- 関連技術: cgroup v2、NativeAOT、Linux GC メモリ管理
#130392 [release/9.0-staging] Update dependencies from dotnet/icu
- 作成者: @dotnet-maestro[bot]
- 作成日時: 2026年07月09日 02:03:15(UTC)
- マージ日時: 2026年07月09日 11:19:09(UTC)
- ラベル: Servicing-approved area-codeflow
概要
dotnet/icu リポジトリの依存パッケージを更新します。Microsoft.NETCore.Runtime.ICU.Transport を 9.0.0-rtm.26356.1 から 9.0.0-rtm.26358.1 へアップグレードします。
変更内容
eng/Version.Details.xml: 依存パッケージの詳細情報を更新(2行追加、2行削除)eng/Versions.props: バージョン番号を更新(1行追加、1行削除)
パフォーマンスへの影響
提供情報に記載なし
関連Issue
なし
その他
- Maestro による自動依存更新
- ビルド日時: 2026年7月8日 15:42:49 UTC
- dotnet/icu の dotnet/release/9.0 ブランチからの更新
#130391 [wasm] Bail R2R for all SIMD parameter sizes, not just SIMD16
- 作成者: @lewing
- 作成日時: 2026年07月09日 01:28:29(UTC)
- マージ日時: 2026年07月09日 13:05:47(UTC)
- ラベル: area-CodeGen-coreclr
概要
WebAssembly(WASM)の Ready-to-Run(R2R)コンパイルにおいて、SIMD パラメータの処理に関するバグを修正しました。Vector2(TYP_SIMD8)および Vector3(TYP_SIMD12)パラメータが不正なWASMモジュールを生成していた問題を、すべてのSIMDサイズに対応させることで解決します。
修正前はTYP_SIMD16のみをインタプリタにベイルアウトしていましたが、修正後はvarTypeIsSIMD(...)を使用してすべてのSIMDパラメータ(8/12/16バイト)をインタプリタにベイルアウトします。
// 修正例:System.Numerics.Matrix3x2.CreateRotation(float, Vector2)
// 修正前:不正なf64.storeを生成(i32パラメータを使用)
// 修正後:インタプリタを使用して正常にコンパイル
変更内容
- src/coreclr/jit/codegenwasm.cpp:
genBeginFnProlog内のR2Rベイルアウト処理を更新- パラメータ型チェックを
TypeGet() == TYP_SIMD16からvarTypeIsSIMD(TypeGet())に拡張 - コメントおよびNYIメッセージを一般化
- パラメータ型チェックを
パフォーマンスへの影響
影響なし。この修正はコンパイル時の正確性確保に関するもので、実行時パフォーマンスには影響しません。
関連Issue
#130101(SIMD16パラメータベイル追加の元のPR)
その他
System.Private.CoreLibがWASM向けの有効なR2Rイメージ(シングルファイル/コンポジット両対応)を生成できるようになります- crossgen2での
--targetos wasi --targetarch wasm使用時に、wasm-toolsの検証を通過するモジュールが生成されることを確認済み - macOS/arm64での動作検証済み
#130386 Ensure code is ready for calls from R2R Wasm logic
- 作成者: @davidwrighton
- 作成日時: 2026年07月08日 23:46:19(UTC)
- マージ日時: 2026年07月09日 16:56:12(UTC)
- ラベル: area-VM-coreclr
概要
R2R(Ready2Run)Wasm環境でネイティブコードから呼び出されるクラス/デフォルトコンストラクタが、Ryujitが生成したコードからの呼び出しに対応できるよう準備が必要になったため、メソッド準備ロジックを改善する変更です。System.Private.CoreLibが事前にコンパイル(R2R化)されている場合、これらのメソッドが確実にネイティブコードから呼び出せる状態になるようにします。
変更内容
- src/coreclr/vm/callhelpers.cpp: コンストラクタ呼び出しヘルパーのメソッド準備ロジックを強化(+9行)
- src/coreclr/vm/methodtable.cpp: メソッドテーブル処理においてメソッド準備関連の処理を追加(+10行)
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
この変更はR2R Wasm環境での動作を対象としています。ランタイム内部実装(CLRランタイムのVM層)の修正で、公開APIの変更ではありません。
#130378 Remove some branches in OptimizedInboxTextEncoder.GetIndexOfFirstCharToEncode
- 作成者: @MihaZupan
- 作成日時: 2026年07月08日 21:30:40(UTC)
- マージ日時: 2026年07月09日 12:25:36(UTC)
- ラベル: area-System.Text.Encoding
概要
OptimizedInboxTextEncoder.GetIndexOfFirstCharToEncode メソッドの冗長な範囲チェックと中間スパンを削除し、コード生成を最適化するリファクタリング。idx は既に範囲内であることが保証されているため、不要な guard と remaining span を排除し、data をその場でスライスして直接ループ処理を行うようにしました。動作の変更はなく、コード生成サイズが改善されます。
変更内容
- src/libraries/System.Text.Encodings.Web/src/System/Text/Encodings/Web/OptimizedInboxTextEncoder.cs
(uint)idx < (uint)data.Lengthguard 条件の削除- 中間的な
remainingspan の廃止 data.Slice(idx)をループ内で直接実行し、スライスされたスパンに対して8倍アンロール走査とフォールバック foreach ループを適用- 戻り値フロー調整(全消費時に
-1返却、禁止文字発見時にidx返却)
パフォーマンスへの影響
コード生成が改善:
- コードサイズ: 516 bytes → 485 bytes(31 bytes 削減)
- 命令数: 156 → 146(10 命令削減)
- 呼び出し元保存レジスタ:
r14のスピル削除
冗長な範囲チェックが除去され、追加の長さレジスタが不要になります。ホットループの境界チェック消去は維持され、data.Slice(idx) は ThrowArgumentOutOfRange なしの純粋なポインタ演算としてコンパイルされます。
関連Issue
#129625 のレビューフィードバックに基づく後続対応
その他
- System.Text.Encodings.Web.Tests(610 テスト)により検証済み
- GitHub Copilot の支援を受けて実装
#130377 Fix cgroup v2 memory max extraction
- 作成者: @janvorli
- 作成日時: 2026年07月08日 21:24:42(UTC)
- マージ日時: 2026年07月09日 11:51:34(UTC)
- ラベル: area-GC-coreclr
概要
cgroup v2環境において、プロセスがルートcgroupに割り当てられている場合、メモリ上限の抽出処理がcgroup階層マウントパスを超えて走査し、プロセスがクラッシュする問題を修正しました。Google Colabの環境でJupyterノートブック内のNativeAOTアプリケーション実行時に発見されました。
変更内容
- src/coreclr/gc/unix/cgroup.cpp: 親cgroup走査時に
cgroupPathLengthがメモリcgroup階層マウントの長さに達した時点で明示的にループを終了する条件を追加しました。これにより、マウントパス以上の階層を走査する際のパス解決エラーを防止します。
パフォーマンスへの影響
影響なし
関連Issue
その他
この修正は、ルートcgroup内でのメモリ制限発見時の境界条件バグ(エッジケース)の対応です。変更は内部実装(ガベージコレクタのcgroup処理)に限定され、公開APIへの影響はありません。
#130363 Adjust InterpreterFP handling to represent the logical FP (where funclets share the FP with the establishing method)
- 作成者: @davidwrighton
- 作成日時: 2026年07月08日 16:34:12(UTC)
- マージ日時: 2026年07月09日 16:49:18(UTC)
- ラベル: area-VM-coreclr
概要
WASM インタプリタにおけるInterpreterFP(フレームポインタ)の処理を調整し、funclet(例外処理コード)がこれを確立メソッドのFPとして共有する論理的なFPとして扱うようにしました。これにより、FPをSPから再構築するのではなく、コンテキスト構築時に設定してフロー経由で利用することで、funclet内でのGC報告を正確に行えます。この変更はRyuJit生成コードに限定されます。
変更内容
- wasm/helpers.cpp: funcletに対応した論理FP回復処理を追加し、controlPCベースのアンワインドロジックを実装
- wasm/cgencpu.h:
InterpreterFPをWASMの callee-saved "レジスタ" 列挙に追加 - stackwalk.cpp:
SkipToメソッドのレジスタコピーパスを調整 - gcinfodecoder.cpp: WASMフレーム相対のGCスロット計算で
InterpreterFPを直接使用 - excep.cpp: WASM
SoftwareExceptionFrameを更新し、controlPCベースのヘルパーでInterpreterFPを設定 - eetwain.cpp: WASMのfunclet呼び出しで現在のコンテキストFPを使用(カスタムアンワインドループを削除)
- codeman.h/cpp:
ExecutionManager::IsFuncletFuntionIndexメソッドを追加
パフォーマンスへの影響
funclet内でのGC報告が正確になることにより、GC追跡の精度向上が期待されます。FP再構築処理の削減により若干の性能改善が見込まれます。
関連Issue
なし
その他
- 内部実装の変更であり、公開APIへの影響なし
- codeman.hのメソッド名に「Funttion」というタイプ誤字が存在します
#130360 [clr-ios] Disable R2R IL-body stripping for library tests that need IL at run time
- 作成者: @kotlarmilos
- 作成日時: 2026年07月08日 13:55:35(UTC)
- マージ日時: 2026年07月09日 09:27:27(UTC)
- ラベル: area-Infrastructure os-ios
概要
Apple mobile CoreCLR向けのReadyToRun(R2R)ビルドでILボディが削除されることにより、実行時にILが必要な4つのライブラリテストが失敗する問題を修正します。System.Runtime.Loader.Tests、System.Reflection.DispatchProxy.Tests、System.Xml.XmlSerializer.ReflectionOnly.Tests、System.Reflection.Metadata.Testsに対してPublishReadyToRunStripILBodies=falseを設定し、Helix AOTビルドがこの設定を認識するようtests.ioslike.targetsのプロパティ許可リストに追加しました。
変更内容
- eng/testing/tests.ioslike.targets:
PublishReadyToRunStripILBodiesプロパティを_ApplePropertyNames許可リストに追加し、Helix proxy projectが設定を引き継ぐようにしました。 - System.Runtime.Loader.Tests.csproj: collectible
AssemblyLoadContextにロードされるため、R2Rネイティブコードを使用できず、IL再コンパイルが必要なため、IL削除を無効化。 - System.Reflection.DispatchProxy.Tests.csproj: collectible
AssemblyLoadContextへの対応で同様にIL削除を無効化。 - System.Xml.XmlSerializer.ReflectionOnly.Tests.csproj: collectible
AssemblyLoadContextへの対応で同様にIL削除を無効化。 - System.Reflection.Metadata.Tests.csproj: 削除されたメソッドボディを直接読み取るため、IL削除を無効化。
パフォーマンスへの影響
影響なし。テスト特定の例外(InvalidProgramException、BadImageFormatException)を回避するための修正であり、パフォーマンスに関する変更ではありません。
関連Issue
なし
その他
この変更はApple mobile(ioslike)向けのテストビルドのみに影響し、他のプラットフォームやプロダクション用のビルドには影響しません。collectible AssemblyLoadContextにロードされるアセンブリはR2Rネイティブコードを活用できない制限により、実行時にILボディが必須です。
#130341 Fix Apple NativeAOT test harness crash from string P/Invoke marshalling
- 作成者: @kotlarmilos
- 作成日時: 2026年07月08日 08:59:36(UTC)
- マージ日時: 2026年07月09日 08:21:56(UTC)
- ラベル: area-NativeAOT-coreclr
概要
Apple NativeAOT環境でテストハーネス起動時にクラッシュしていた問題を修正します。mono_ios_set_summaryとmono_ios_append_outputのP/Invokeがstring型を使用していたため、[DisableRuntimeMarshalling]属性下でのマーシャリングが禁止され、MarshalDirectiveExceptionが発生していました。これらをIntPtrに変更し、マネージドコード側でMarshal.StringToCoTaskMemUTF8を用いて明示的にUTF-8バッファに変換することで、ブリット可能なP/Invokeに統一し、Mono/NativeAOT両方で正しく動作するようにしました。
変更内容
- AppleTestRunner.cs:
mono_ios_set_summaryとmono_ios_append_outputのP/Invoke署名をIntPtr型に変更。文字列引数を受け取るマネージドラッパーメソッドを追加し、内部でMarshal.StringToCoTaskMemUTF8でUTF-8バッファに変換、呼び出し後にMarshal.FreeCoTaskMemで解放する実装に変更。 - AppleTestRunner.csproj: ビルド設定を調整。
- tests.ioslike.targets: テスト実行構成を更新。
パフォーマンスへの影響
影響なし
関連Issue
その他
この修正はNativeAOT環境下での[DisableRuntimeMarshalling]属性との互換性を確保するもので、ネイティブ側のconst char*シグネチャとマネージド側のP/Invoke定義の齟齬を解消します。ブリット可能なP/Invokeは実行時マーシャリングを必要としないため、NativeAOTコンパイル時の検証エラーを回避できます。
#130325 Deduplicate IObjectNodeWithAlignment into shared Common dependency analysis
- 作成者: @Copilot
- 作成日時: 2026年07月08日 00:31:46(UTC)
- マージ日時: 2026年07月09日 07:12:47(UTC)
- ラベル: area-Infrastructure
概要
PR #129966で導入された重複するIObjectNodeWithAlignmentインターフェース定義を削除し、AOTコンパイラプロジェクト間で単一の共有契約を復元します。共有のCommon依存性分析層に移動し、両方のプロジェクト(ILCompiler.CompilerとILCompiler.ReadyToRun)で参照するようにしました。
namespace ILCompiler.DependencyAnalysis
{
public interface IObjectNodeWithAlignment
{
int GetAlignment(NodeFactory factory);
}
}
変更内容
- 共有インターフェース移動:
IObjectNodeWithAlignmentをsrc/coreclr/tools/Common/Compiler/DependencyAnalysis/IObjectNodeWithAlignment.csに配置し、ILCompiler.DependencyAnalysis名前空間を使用 - プロジェクトファイル更新:
ILCompiler.Compiler.csprojおよびILCompiler.ReadyToRun.csprojを修正して共有ファイルをコンパイル対象に追加 - 重複定義削除: ReadyToRunのプロジェクトローカルなインターフェース定義(17行)を削除
- XML doc保持:
GetAlignmentがGetData/GetDehydratableDataと一貫性を保つ必要があるという契約をドキュメント化
パフォーマンスへの影響
影響なし
関連Issue
その他
- 公開APIの変更はなし(内部インターフェースの整理)
- 既存実装は動作変更なく単一定義に対してコンパイルされます
- 共有依存性分析層への統合で、コード重複排除と保守性向上を実現
#130279 Pin blittable layout classes in NativeAOT marshalling
- 作成者: @MichalStrehovsky
- 作成日時: 2026年07月07日 02:39:52(UTC)
- マージ日時: 2026年07月09日 06:51:21(UTC)
- ラベル: area-Interop-coreclr
概要
NativeAOTのマーシャリングにおいて、値で渡されるblittable layout クラスのピニング機能を実装しました。これまでは常に一時的なネイティブ構体にコピーされていましたが、今回の変更によりマネージドオブジェクトをピニングしてインテリア ポインタを直接ネイティブコードに渡すようになります。これにより、ポインタの同一性、暗黙的な[In,Out]ライトバック、および[Out]セマンティクスが正しく機能するようになります。
変更内容
- src/coreclr/tools/Common/TypeSystem/Interop/IL/Marshaller.Aot.cs:
LayoutClassPtrMarshallerにピニングベースのCLR→ネイティブマーシャリングパスを追加。非byref、非return、blittableなレイアウトクラス引数に対して、マネージドオブジェクトをピニングしてインテリアポインタを直接ネイティブに渡すようにしました。byref、フィールド、リバース、return、非blittableシナリオは引き続き構体マーシャリング経由でコピーします。 - src/tests/Interop/LayoutClass/LayoutClassTest.cs: NativeAOT固有の
ActiveIssue(#81673)スキップを削除し、LayoutClassインタオペラビリティテストを再度有効化しました。
パフォーマンスへの影響
ピニングによるポインタ直接参照のため、不要なメモリコピーが削減されます。特にblittableなレイアウトクラスを値で渡す場合、CoreCLRのILBlittablePtrMarshallerと同等の効率化が期待できます。
関連Issue
その他
この変更はNativeAOT特有の制限を解決し、CoreCLRの既存動作に合わせることで、プラットフォーム間でのマーシャリングセマンティクスの一貫性を向上させます。
#130273 [release/10.0] Source code updates from dotnet/dotnet
- 作成者: @dotnet-maestro[bot]
- 作成日時: 2026年07月07日 00:37:11(UTC)
- マージ日時: 2026年07月09日 11:25:44(UTC)
- ラベル: Servicing-approved area-codeflow
概要
dotnet/dotnetリポジトリからのコードフロー更新PR。release/10.0.1xxブランチからの依存関係更新が含まれています。Microsoft.CodeAnalysisやビルドツール、NuGetツール、WebAssembly関連パッケージなど複数の主要な依存関係がアップデートされます。
変更内容
- NuGet.config: NuGetソース設定の更新(+1/-1行)
- eng/Version.Details.props: 詳細バージョン情報の更新(+37/-37行)
- eng/Version.Details.xml: XMLバージョン定義の更新(+85/-85行)
- eng/Versions.props: バージョン定義の更新(+6/-6行)
- global.json: グローバル設定の更新(+3/-3行)
主要な依存関係更新:
- Microsoft.CodeAnalysis系(5.0.0-2.26329.112 → 5.0.0-2.26358.108)
- Microsoft.DotNet.Arcade.Sdk含むビルドタスク群(10.0.0-beta.26329.112 → 10.0.0-beta.26358.108)
- NuGet.Frameworks/Packaging/ProjectModel/Versioning(7.0.3-rc.33012 → 7.0.3-rc.35908)
- WebAssembly Node Transport関連パッケージ(10.0.0-alpha.1.26310.1 → 10.0.0-alpha.1.26353.2)
- System.Text.Json、System.Reflection.Metadata等(10.0.10維持)
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
本PRはVMR(Virtual Monolithic Repository)からのコードフロー更新です。以下のリポジトリに関連する変更が含まれています:
- dotnet/aspnetcore
- dotnet/runtime
- dotnet/scenario-tests
- dotnet/sdk
- dotnet/source-build-assets
- dotnet/templating
- dotnet/windowsdesktop
- dotnet/wpf
#130239 Fix NativeAOT reverse delegate stub signature with runtime marshalling disabled
- 作成者: @MichalStrehovsky
- 作成日時: 2026年07月06日 07:47:17(UTC)
- マージ日時: 2026年07月09日 15:21:01(UTC)
- ラベル: area-NativeAOT-coreclr
概要
NativeAOT のリバースデリゲートスタブにおいて、ランタイムマーシャリングが無効な場合に、ネイティブシグネチャの計算がマネージドシグネチャと一致していなかった問題を修正します。GetNativeMethodParameterType で合成された __NativeType__ 構造体を使用していましたが、ランタイムマーシャリングの無効化チェックを追加し、無効な場合はマネージドシグネチャをそのまま使用するようにしました。また、varargs 関連の例外型を BadImageFormatException から InvalidProgramException に修正し、DisabledRuntimeMarshalling テストの NativeAOT 対応を再度有効化します。
変更内容
- DelegateMarshallingMethodThunk.cs: ランタイムマーシャリング有効性を確認してネイティブシグネチャ計算をゲート化。無効な場合はマネージドシグネチャを使用
- EcmaSignatureParser.cs: varargs の
SignatureTypeCode.SentinelをBadImageFormatExceptionではなくInvalidProgramExceptionとして処理 - CorInfoImpl.cs: サポートされない varargs シグネチャの例外型を修正
- ILImporter.Scanner.cs: varargs コール import 拒否時の例外型を修正
- LibraryRootProvider.cs: varargs メソッド拒否時の例外型を修正
- DisabledRuntimeMarshalling テスト csproj: 4 つのテストプロジェクトから
NativeAotIncompatibleを削除し、NativeAOT テストを再度有効化
パフォーマンスへの影響
影響なし
関連Issue
その他
なし
#130195 [release/9.0-staging] Update dependencies from dotnet/cecil
- 作成者: @dotnet-maestro[bot]
- 作成日時: 2026年07月04日 02:03:20(UTC)
- マージ日時: 2026年07月09日 11:22:27(UTC)
- ラベル: Servicing-approved area-codeflow
概要
dotnet/cecilの依存関係を更新するPull Requestです。Cecil 0.11.5-alpha.26314.1 から 0.11.5-alpha.26353.2 へのバージョンアップに伴い、Microsoft.SourceBuild.Intermediate.cecilとMicrosoft.DotNet.Cecilが更新されます。
変更内容
- eng/Version.Details.xml: Cecil依存関係のバージョン記述を更新(+4/-4行)
- eng/Versions.props: Cecilのバージョン番号を更新(+1/-1行)
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
- 自動依存関係更新PR(dotnet-maestroによる)
- release/9.0-stagingブランチへのマージ
- dotnet/cecilのrelease/9.0ブランチからの更新(2026年7月3日ビルド)
#130170 Optimize await Task.Yield() in runtime async
- 作成者: @jakobbotsch
- 作成日時: 2026年07月03日 10:52:06(UTC)
- マージ日時: 2026年07月09日 17:10:16(UTC)
- ラベル: area-System.Threading.Tasks runtime-async
概要
await Task.Yield()のランタイムasync実装を最適化し、async1と同等のパフォーマンスを実現します。YieldAwaiterに対してIStateMachineBoxAwareAwaiterインターフェースの最適化を適用し、await毎のスレッドプール内部オブジェクト割り当てを回避します。また、未使用のAsyncHelpers.TaskContinuation.csを削除します。
変更内容
- AsyncHelpers.cs:
UnsafeAwaitAwaiter<TAwaiter>でYieldAwaiterを特殊ケース処理し、シングルトン実装のRuntimeAsyncYielder.Instanceを使用 - AsyncHelpers.RuntimeAsyncYielder.cs(新規): ランタイムasync用の単一インスタンス
ICriticalNotifyCompletion実装。SynchronizationContext/TaskScheduler/スレッドプール経由でcontinuationをスケジュール - AsyncHelpers.TaskContinuation.cs(削除): 未使用のレガシー実装を削除
- Delegate.cs: 新しいyielder実装用に内部ヘルパーメソッド追加(CoreCLR/NativeAOT両対応)
- プロジェクトファイル: CoreCLR/NativeAOT CoreLibビルドに
AsyncHelpers.RuntimeAsyncYielder.csを追加
パフォーマンスへの影響
大幅な改善:
- 変更前:726.1 ms平均
- 変更後:533.5 ms平均
- 改善率:約26%削減(実測値では720ms → 535ms程度)
- async1と同等のパフォーマンスを実現
Task.Yield()の大量使用時に割り当て削減によるGC圧力軽減
ベンチマーク結果から、async1(約535ms)との性能差を解消
関連Issue
その他
- この最適化は主にマイクロベンチマークの公平性向上に寄与。実装は
IStateMachineBoxAwareAwaiterシングルトンパターンを活用し、async1との一貫性を確保 - NativeAOT環境にも対応するため、複数のプロジェクト/ソースファイルを統一的に変更
- 破壊的変更なし、公開APIへの影響なし
#130158 [cDAC] Fix #130143 - search correct loader module for generic instantiations
- 作成者: @rcj1
- 作成日時: 2026年07月03日 04:47:04(UTC)
- マージ日時: 2026年07月09日 02:10:06(UTC)
- ラベル: area-Diagnostics-cdac
概要
cDAC(CoreCLR Diagnostic Access Component)の GetConstructedType メソッドにおいて、ジェネリック型インスタンスのローダーモジュール検索アルゴリズムを修正しました。collectible AssemblyLoadContext からの型引数を含むジェネリック型の解決に失敗していた問題(#130143)に対応しています。CoreCLR の ClassLoader::ComputeLoaderModuleWorker を鏡像するアルゴリズムを実装することで、型引数駆動型のローダーモジュール選択を実現しました。
変更内容
- RuntimeTypeSystem_1.cs:
ELEMENT_TYPE_GENERICINSTに対して、定義モジュール + 型引数に基づくローダーモジュール計算を実装。collectible 対応のTryGetCollectibleLoaderAllocatorヘルパーメソッドを追加し、ローダーモジュール計算ロジックを統合。 - RuntimeTypeSystem.md: 設計ドキュメントを更新し、FnPtr固有のヘルパーを削除して新しいアルゴリズムを参照(レビューコメントにて構文修正が必要な指摘あり)。
- テスト追加: collectible アセンブリ内のジェネリック型インスタンスに対するダンプテスト (
CollectibleGenericInstDumpTests.cs) と対応するデバッグシンボル、テストプログラムを追加。
パフォーマンスへの影響
影響なし
関連Issue
その他
この変更は内部診断インフラ(cDAC)に限定されるもので、公開APIへの影響はありません。レビュアーのコメントにて設計ドキュメントの構文修正が言及されており、マージ前に対応が必要と考えられます。
#130151 Optimize MethodDataObject::FillEntryDataForAncestor for MethodImpl hierarchies
- 作成者: @davidwrighton
- 作成日時: 2026年07月02日 23:51:49(UTC)
- マージ日時: 2026年07月09日 17:44:47(UTC)
- ラベル: area-VM-coreclr
概要
MethodTable::MethodDataObject::FillEntryDataForAncestor をMethodImpl階層向けに最適化します。
従来はMethodImplが存在する場合に全ての仮想スロットの埋め込みをスキップしていたため、O(V*N)の二次計算量が発生していました(V:仮想スロット数、N:型階層内のメソッド数)。
本変更では、正規MethodTableのvtableでNULLエントリのスロットを検出し、これらのスロットについては親チェーンをたどって直接埋め込むことで、WPF等の深い階層を持つ型の起動時パフォーマンスを改善します。
変更内容
- src/coreclr/vm/methodtable.h:
GetSlotForVirtualVolatileLoadWithoutBarrierヘルパー追加(正規vtableスロットをメモリバリアなしで読み取り) - src/coreclr/vm/methodtable.cpp:
FillEntryDataForAncestor実装を変更- MethodImpl存在時に正規vtable内の
NULLスロットを検出 NULLスロット(上書きされていない仮想メソッド)の場合、親チェーンをたどって導入型までDecl/Impl MethodDescを埋め込み- 一般的なMethodImplケースの保守的な早期リターンは維持
- MethodImpl存在時に正規vtable内の
パフォーマンスへの影響
改善あり(WPF起動時性能):
- App1(空ウィンドウ): 919.6 ms → 858.1 ms(−6.7%、−61.5 ms)
- App2(メニュー+ツールバー+50行DataGrid): 1455.9 ms → 1377.9 ms(−5.4%、−78.0 ms)
測定は正規MethodTable読み込み処理の型ロード時間削減に特化しており、MethodImplが実際に存在する階層でのみ追加処理が実行されるため、一般的なケースへの影響はありません。
関連Issue
その他
- 正確性検証は既存の型ロードテストスイートでカバー(誤った解決は広く表面化)
- 本変更はFramework-dependent app上でJIT処理が含まれる開発ランタイムでの測定であり、実際の運用環境ではReadyToRun化により絶対値は改善しますが、削減幅は同等です
- GitHub Copilotの支援下で実装されました
#130140 Add ToUpperOrdinal and ToLowerOrdinal casing APIs
- 作成者: @tarekgh
- 作成日時: 2026年07月02日 20:52:07(UTC)
- マージ日時: 2026年07月09日 18:24:03(UTC)
- ラベル: area-System.Globalization
概要
StringComparison.OrdinalIgnoreCase と同じ one-to-one マッピング方式を使用した序数(ordinal)ベースの大文字小文字変換API を実装します。char、Rune、string、および MemoryExtensions に ToUpperOrdinal() / ToLowerOrdinal() メソッドを追加し、ICU ベースの序数小文字変換テーブルを新たに実装します。ASCII文字列がすでに要求されたケースにある場合、同じインスタンスを返すことでアロケーションを回避します。
変更内容
公開API追加 (
System.Runtime、System.Memoryref):char.ToUpperOrdinal(char)/char.ToLowerOrdinal(char)Rune.ToUpperOrdinal(Rune)/Rune.ToLowerOrdinal(Rune)string.ToUpperOrdinal()/string.ToLowerOrdinal()MemoryExtensions.ToUpperOrdinal(ReadOnlySpan<char>, Span<char>)/ToLowerOrdinal(ReadOnlySpan<char>, Span<char>)
ランタイム/ライブラリ実装:
OrdinalCasing.Icu.cs: ICU ベースの序数小文字変換テーブル初期化(ページ単位遅延初期化)を追加String.Manipulation.cs、TextInfo.cs、Ordinal.cs:各型での実装ルーティング- ネイティブレイヤー(
pal_common.c):GlobalizationNative_InitOrdinalLowerCasingPageによる ICU 小文字変換 + 特殊ケース処理(U+0130、U+03F4、U+1E9E、U+2126、U+212A、U+212B は変更なし)
テスト: BMP 全体の逆順マッピング検証と
OrdinalIgnoreCase比較との整合性確認を含むOrdinalCasingTests.csを追加
パフォーマンスへの影響
メモリ効率改善:ASCII 文字列が既に要求されたケースにある場合、string.ToUpperOrdinal() / string.ToLowerOrdinal() は同じインスタンスを返却するため、不要なアロケーションが回避されます。
関連Issue
その他
- 序数小文字変換は
OrdinalIgnoreCase比較と整合性を保ちます。二つの文字列がOrdinalIgnoreCaseで等しい ⟺ そのToUpperOrdinal()結果が序数比較で等しい - グローバリゼーション モード(Invariant/NLS/ICU)に基づいて実装をルーティング
- WASM(browser/WASI)対応として callhelpers-pinvoke に新しいネイティブ エクスポート を登録
#130104 Add special casing for string constructors for WebAssembly
- 作成者: @davidwrighton
- 作成日時: 2026年07月01日 23:54:21(UTC)
- マージ日時: 2026年07月09日 16:47:46(UTC)
- ラベル: area-crossgen2-coreclr
概要
WebAssembly向けに、文字列コンストラクタの特殊な呼び出し規約に対応するためのJIT/EEおよびcrossgen2の処理を追加します。文字列コンストラクタは静的ヘルパー関数として実装されており、通常のコンストラクタとは異なる呼び出し規約を持つため、シグネチャの再解釈とサンク生成ロジックの調整が必要です。
変更内容
- WasmLowering.cs: 文字列コンストラクタのシグネチャを静的メソッド(文字列戻り値)として再解釈するヘルパー
GetStringCtorActualSignatureを追加 - codegenwasm.cpp: crossgen2に対して文字列コンストラクタ呼び出し用の調整されたシグネチャを報告するロジックを追加
- CorInfoImpl.ReadyToRun.cs: マネージドコール署名を記録する際に文字列コンストラクタの特殊ケース検出・書き換えを追加
- WasmImportThunkPortableEntrypoint.cs: 文字列コンストラクタの内部呼び出しに対してサンクシグネチャ計算に書き換えられたシグネチャを使用
- vm/wasm/helpers.cpp: 文字列コンストラクタに対して専用のポータブルエントリポイントサンクキー選択ロジックを追加
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
この変更はWebAssembly(Wasm)ランタイムのコンパイラ側の内部実装に限定される変更であり、公開APIへの影響はありません。文字列コンストラクタの呼び出し規約処理がJIT・AOT・インタプリタ間で正しく一致するようにするための調整です。
#130093 Handle if_nametoindex failure in EnumerateInterfaceAddresses.
- 作成者: @tmds
- 作成日時: 2026年07月01日 18:35:20(UTC)
- マージ日時: 2026年07月09日 12:15:00(UTC)
- ラベル: area-System.Net os-linux community-contribution
概要
EnumerateInterfaceAddresses関数におけるif_nametoindexの失敗ケースを適切に処理するよう改善しました。ネットワークインターフェース列挙時のエラーハンドリングを強化し、予期しない失敗に対する堅牢性を向上させます。
変更内容
- pal_interfaceaddresses.c:
if_nametoindexの失敗ハンドリングロジックを追加(35行追加)- インターフェース名からインデックスへの変換失敗時に適切なエラー処理を実装
パフォーマンスへの影響
影響なし
関連Issue
その他
- ネイティブコード(C言語)レベルでのネットワークインターフェース列挙の信頼性向上
- System.Netのネットワーク関連API(
System.Net.NetworkInformationなど)の安定性改善に関連
#130026 [clr-interp] Ensure initialization of MethodDesc->m_interpreterCode
- 作成者: @BrzVlad
- 作成日時: 2026年06月30日 10:13:36(UTC)
- マージ日時: 2026年07月09日 13:07:10(UTC)
- ラベル: area-CodeGen-Interpreter-coreclr
概要
CLR インタプリタにおいて、複数スレッドがメソッド compilation で競合する際の MethodDesc->m_interpreterCode の初期化問題を修正します。競合に負けたスレッドが early return する前に必ずインタプリタコードを publish するよう、コード公開フローを再構成しました。これにより、sporadic assertionsの発生を防止します。
変更内容
- src/coreclr/vm/prestub.cpp:
JitCompileCodeLockedにおける native code と interpreter code の publish 順序を変更。従来はSetNativeCodeで CAS に勝ったスレッドのみが interpreter code を publish していましたが、修正後は全スレッドがSetInterpreterCodeを実行してからSetNativeCodeの early return 処理に入るよう変更しました(+12/-12)。
パフォーマンスへの影響
影響なし。変更は初期化順序のみで、compilation ロジックや実行パスには影響しません。
関連Issue
その他
この修正は CLR インタプリタ(clr-interp)における内部実装の変更で、公開 API への影響はありません。マルチスレッド環境での競合状態を解決し、interpreter bytecode の初期化が確実に行われるようにしたものです。
#129887 [LoongArch64] Apply fixes for coreclr-interp on linux-loongarch64.
- 作成者: @LuckyXu-HF
- 作成日時: 2026年06月26日 09:37:26(UTC)
- マージ日時: 2026年07月09日 11:51:10(UTC)
- ラベル: community-contribution arch-loongarch64 arch-riscv area-CodeGen-Interpreter-coreclr
概要
LoongArch64プラットフォームのcoreclr-interpに対するバグ修正をPR#127919に合わせて適用します。InterpreterTester.shの失敗問題(Issue #127860)をLA64で修正することが目的です。
変更内容
- src/coreclr/gcinfo/gcinfoencoder.cpp: 20行の削除(不要なコード除去)
- src/coreclr/vm/exceptionhandling.cpp: 1行の変更(例外処理ロジック調整)
- src/coreclr/vm/loongarch64/asmhelpers.S: 40行追加、42行削除(LoongArch64アセンブリ実装の修正・調整)
パフォーマンスへの影響
影響なし
関連Issue
その他
本変更はPR#127919の修正内容をLoongArch64プラットフォームに適用するもので、プラットフォーム固有の対応です。
#129491 Remove unreachable NotImplementedException array-with-choice
- 作成者: @StephenMolloy
- 作成日時: 2026年06月16日 23:45:36(UTC)
- マージ日時: 2026年07月09日 01:38:56(UTC)
- ラベル: area-Serialization
概要
XmlSerializer の WriteArray メソッドにおいて、到達不可能な NotImplementedException を削除しました。ローカルで新規構築された memberMapping の ChoiceIdentifier は常に null であるため、この例外スローは実行されないデッドコードでした。配列型の choice 要素の値は、WriteArray 戻り時に呼び出し元の WriteElement で親メンバーに対して記録されるため、リフレクションベースのシリアライザーは既にこれらの型を正しくラウンドトリップしています。
変更内容
- ReflectionXmlSerializationReader.cs:
WriteArrayメソッドから到達不可能なNotImplementedExceptionの throw 文を削除(-7行) - XmlSerializerTests.RuntimeOnly.cs:
[XmlChoiceIdentifier]メンバーを含むリグレッションテストを追加。選択肢の要素型の一つが配列型(その要素マッピングがArrayMapping)である場合をカバー(+53行)。テストは codegen および ReflectionOnly XmlSerializer テストプロジェクト両方で実行
パフォーマンスへの影響
影響なし
関連Issue
その他
本 PR は例外が実際には発生不可能であることを確認した上で、回帰テストを追加することで今後の保証を強化する内容です。リフレクションベースのシリアライザーの動作に変化はありません。
#129489 Implement support for XmlAttribute in WriteAttribute method
- 作成者: @StephenMolloy
- 作成日時: 2026年06月16日 23:41:15(UTC)
- マージ日時: 2026年07月09日 01:40:59(UTC)
- ラベル: area-Serialization
概要
XML属性のシリアライゼーション処理を改善するPRです。WriteAttributeメソッドでTypeDesc.CanBeAttributeValueが真の場合にXmlAttributeノードの処理に対応しました。これまでNotImplementedExceptionがスローされていた未実装シナリオを解決し、テストを内部テストスイートからメインテストスイートに昇格させました。
変更内容
- ReflectionXmlSerializationReader.cs:
WriteAttributeメソッドを更新。CanBeAttributeValueが真のSpecialMapping型に対して、XmlAttributeインスタンスを受け入れるように実装。NotImplementedExceptionのスローから、属性でない場合の早期リターンに変更。 - XmlSerializerTests.Internal.cs:
Xml_CustomDocumentWithXmlAttributesAsNodesテストを削除(メインテストスイートへ移行)。 - XmlSerializerTests.cs: 上記テストを追加し、メインテストスイートに昇格。
パフォーマンスへの影響
影響なし
関連Issue
その他
この変更はリフレクションベースのXmlSerializerリーダーの公開APIとは直接関係なく、内部実装の拡張です。
#128950 Arm64: [PAC-RET] NativeAOT changes
- 作成者: @SwapnilGaikwad
- 作成日時: 2026年06月03日 14:57:20(UTC)
- マージ日時: 2026年07月09日 01:07:38(UTC)
- ラベル: community-contribution area-NativeAOT-coreclr
概要
ARM64アーキテクチャにおけるPointer Authentication Code (PAC-RET)機能をNativeAOTに組み込む変更です。これにより、NativeAOTコンパイルされたアプリケーションでも戻りアドレスの認証を通じたセキュリティ強化が可能になります。この変更は#125436、#127949、#127838、#128147に続く一連の作業の最終段階です。
変更内容
- NativeAOT Runtime: StackFrameIterator、thread管理、ExceptionHandlingで戻りアドレス認証に対応
- ARM64アセンブリ: GcProbe、MiscStubsなどで認証命令対応コードを追加
- ネイティブコード管理: UnixNativeCodeManager、CoffNativeCodeManagerで認証関連情報の解析処理を実装
- DWARF・EABI・Mach-O: オブジェクトライターで認証情報(CFI)を生成・出力
- JIT・Unwinder: 認証スタック情報の処理をコンパイル時・実行時に対応
パフォーマンスへの影響
影響なし(セキュリティ機能の導入による実行時オーバーヘッドについては提供情報に記載なし)
関連Issue
#125436、#127949、#127838、#128147
その他
PAC(Pointer Authentication Code)はARM64プロセッサのセキュリティ機能で、戻りアドレスを暗号的に認証することでReturn-Oriented Programming (ROP)攻撃を防止します。詳細はllsoftsec.github.ioを参照してください。
#128777 [Android] Add missing JNI exception checks in crypto PAL
- 作成者: @simonrozsival
- 作成日時: 2026年05月29日 16:43:41(UTC)
- マージ日時: 2026年07月09日 07:54:06(UTC)
- ラベル: area-System.Security os-android
概要
Android暗号化PAL(Platform Abstraction Layer)における包括的なJNI例外チェック追加を実施。JNI呼び出し後の潜在的な例外をキャッチし、管理コードへの無言の例外漏洩を防止します。ON_EXCEPTION_PRINT_AND_GOTOマクロによる統一的な例外処理、INIT_LOCALS/RELEASE_LOCALSパターンによるローカル参照の厳密な管理、および成功パスでのみ呼び出し側が見える状態を書き込むパターンを導入。
変更内容
11ファイルに対する共通パターン導入:
pal_cipher.c、pal_dsa.c、pal_ecc_import_export.c、pal_ecdh.c、pal_eckey.c、pal_hmac.c、pal_ssl.c、pal_sslstream.c、pal_x509.c、pal_x509store.cにON_EXCEPTION_PRINT_AND_GOTOマクロを追加INIT_LOCALS/RELEASE_LOCALSによる統一的なクリーンアップパターンを導入し、アドホックな参照削除を廃止
主要な仕様変更:
GetEnumAsInt(pal_jni.c):呼び出し側が参照を所有・解放する責任に変更。5つの呼び出し元で重複削除のリスクを排除AndroidCryptoNative_GetDsaParameters/AndroidCryptoNative_GetECKeyParameters:出力長パラメータを関数開始時にゼロクリア(成功時のみ設定)ContainsEntryForAlias/ContainsMatchingCertificateForAlias:戻り値をboolからint32_t(SUCCESS/FAIL)に変更、別の出力パラメータで結果を返却。JNI例外と「検出されない」を区別可能にSSLStreamInitialize:マネージドコンテキストハンドル/コールバックを成功パスでのみ割り当てFreeSSLStream:managedContextCleanupのNULLチェック追加。初期化されない状態に対応SSLStreamWrite:EnsureRemainingの戻りバッファをローカルに保存し、NULL時に失敗(SSLStreamStatus_Errorを返す)。グローバル参照漏洩とNULLオブジェクトJNI呼び出しを防止
パフォーマンスへの影響
影響なし。本変更は例外安全性とリソースリーク防止に重点。テスト実績:System.Security.Cryptography.Tests 11,715回実行(10,738合格、0失敗)、System.Net.Security.Tests 4,890回実行(4,854合格、4失敗は既知の非関連テスト)。
関連Issue
#128747(同一テーマのpal_rsa.c向けJNI例外処理)
#128651(pal_x509chain.cのX509ChainContext作成失敗対応)
#124173(pal_sslstream.cのプラットフォーム信頼
#128506 Fix DataContractSerializer nullable struct initialization cache lookup
- 作成者: @Copilot
- 作成日時: 2026年05月22日 22:40:52(UTC)
- マージ日時: 2026年07月09日 01:34:53(UTC)
- ラベル: area-Serialization
概要
.NET 8+ で DataContractSerializer が Nullable<T> の [DataContract] 構造体を逆シリアル化する際にキャッシュルックアップループのバグにより SerializationException(DataContract cache overflow)が発生する回帰を修正しました。キャッシュスキャンループが元の計算済みIDと比較していたため、有効なコントラクトが見つからずエラーが発生していました。
修正内容:
// 修正前:同じidと繰り返し比較
for (int i = 0; i < currentDataContractId; i++)
{
if (ContractMatches(classContract, s_dataContractCache.GetItem(id))) // idを繰り返し使用
{
return i;
}
}
// 修正後:ループインデックスiで正しくスキャン
for (int i = 0; i < currentDataContractId; i++)
{
if (ContractMatches(classContract, s_dataContractCache.GetItem(i))) // iを使用
{
return i;
}
}
変更内容
- System.Private.DataContractSerialization:
DataContract.GetIdForInitialization(ClassDataContract)でキャッシュスキャンループをループ変数iでインデックスするよう修正 - System.Runtime.Serialization.Xml テスト:
DCS_NullableDataContractStructAsRoot_DeserializesWithoutPriorInitializationという回帰テストを追加。事前のキャッシュ初期化がない状態で nullable root[DataContract]構造体をReadObjectで逆シリアル化するテスト
パフォーマンスへの影響
影響なし。バグ修正であり、パフォーマンスに関連する変更ではありません。
関連Issue
その他
なし
#122093 Add Zip Archives password support
- 作成者: @alinpahontu2912
- 作成日時: 2025年12月02日 14:58:58(UTC)
- マージ日時: 2026年07月09日 11:35:17(UTC)
- ラベル: area-System.IO.Compression
概要
ZipArchive APIにパスワード保護されたZipファイルの読み書き機能を追加します。ZipCryptoとWinZip AES暗号化方式の両方に対応し、既存のエントリの読み取り、新規エントリの作成、更新モードでの操作をサポートします。
変更内容
- ZipArchive/ZipArchiveEntry クラス: パスワードパラメータを受け取るメソッドを追加(
Open(string, Encoding password)など) - 新規暗号化クラス:
WinZipAesStream.cs(674行)、WinZipAesKeyMaterial.cs(99行)を追加し、AES暗号化の実装を提供 - ZipFile/ZipFileExtensions API:
ZipFileCreationOptions、ZipExtractionOptionsを新規追加し、暗号化オプションをサポート - 非同期サポート:
Create.Async.cs、Extract.Async.cs、ZipArchiveEntry.Async.csを拡張してパスワード対応の非同期メソッドを追加 - テスト:
ZipFile.Encryption.cs(1607行)に包括的な暗号化テストを追加 - ファジング: WinZip AES、ZipCrypto対応のファジングテスト用クラスを追加
パフォーマンスへの影響
影響なし(提供情報に具体的なベンチマーク結果なし)
関連Issue
その他
- 互換性: 新規オーバーロードの追加のため、既存のAPIに破壊的変更はなし
- セキュリティ: 暗号化キー導出とストリーム処理に関して複数のセキュリティレビューを経ている
- 留意点: Copilotのレビュー指摘により、更新モード(
loadExistingContent: false)で暗号化されたエントリを開く際に、キーマテリアルの派生と検証が必要な箇所が指摘されている。パスワード要件の厳密な検証が推奨されます。