ノート
[BUG] 8382937: [lworld] System.arraycopy can copy null into a null-restricted array
FlatArrayKlass::copy_array で null-restricted 配列への null コピーが検出されるように修正しました。
概要#
Valhalla では null を取り扱える配列と,そうでない配列の2つの概念が登場します。
しかし,flat-array から参照配列へ System.arraycopy する場合に,非 null 配列への null 書き込みチェックが抜ける場合がありました。
問題は FlatArrayKlass::copy_array にありました。
コピー先へ要素を書き込むときに obj_at_put を呼んでいましたが,
例外状態を呼び出し元へ伝えるための CHECK(これはマクロです)が記述されていませんでした。
そのため,null-restricted 配列に対する実行時チェックが期待どおりに働きませんでした1。
oop o = sh->obj_at(src_pos + i, CHECK);
-dh->obj_at_put(dst_pos + i, o);
+dh->obj_at_put(dst_pos + i, o, CHECK);
修正自体は 1 行ですが,null-restricted 配列の不変条件に関わるため,
System.arraycopy が null をコピーしようとしたときに NullPointerException を投げることを確認する
単体テストも追加しました。
2026/06/24 PR 作成#
PR では,flat array から reference array へコピーする経路で
obj_at_put に CHECK が渡されていないことを説明しました2。
この経路では FlatArrayKlass::copy_array が要素を 1 つずつ取り出し,
コピー先配列へ書き込んでいます。
追加したテスト ArrayCopyStoreNull.java では,
まず non-null 値を null-restricted array へコピーできることを確認し,
次に nullable array に入れた null を null-restricted array へコピーしようとします。
ここで NullPointerException が投げられれば成功です1。
nullableArray[1] = null;
try {
System.arraycopy(nullableArray, 1, nullRestrictedArray, 1, 1);
} catch (NullPointerException expected) {
return;
}
2026/06/24-26 レビュー#
Frederic Parain 氏3から,修正とテストについて確認いただきました。 同氏の内部テストでも問題は検出されず,Approve をいただきました。
2026/06/26 統合#
Approve 後に /integrate を行い,同氏に /sponsor していただきました。
最終的に 2752ad84 として Valhalla の lworld ブランチへ統合されました。
Footnotes#
-
8382937: [lworld] System.arraycopy can copy null into a null-restricted array by PeyaPeyaPeyang · Pull Request #2577 · …Fix null checking when copying from flat arrays to reference arrays. Previously, FlatArrayKlass::copy_array called obj_at_put without CHECK. As aresult, the runtime check for null…GitHub
↩ ↩2
-
8382937: [lworld] System.arraycopy can copy null into a null-restricted array by PeyaPeyaPeyang · Pull Request #2577 · …https://openjdk.org/projects/valhalla. Contribute to openjdk/valhalla development by creating an account on GitHub.GitHub
↩
-
https://openjdk.org/census#fparainopenjdk.org↩
-
8382937: [lworld] System.arraycopy can copy null into a null-restrict… · openjdk/valhalla@2752ad8https://openjdk.org/projects/valhalla. Contribute to openjdk/valhalla development by creating an account on GitHub.GitHub
↩