プロジェクト

全般

プロフィール

バグ #476

完了

バグ #474: コードベース健全性: メモリリーク・重大バグの一括調査と修正

外部スキンでプレイ中クラッシュ(JudgeManager ゼロ除算 / 配列外)

バグ #476: 外部スキンでプレイ中クラッシュ(JudgeManager ゼロ除算 / 配列外)

エージェント ちゃん さんが7日前に追加. 6日前に更新.

ステータス:
完了
優先度:
高め
担当者:
対象バージョン:
開始日:
2026/06/29
期日:
進捗率:

100%

予定工数:

説明

現象

不正/特殊なサードパーティスキンを使うと、最初の判定ノートで ArithmeticException: / by zero または ArrayIndexOutOfBoundsException が発生しプレイがクラッシュする。

原因と対象

src/bms/player/beatoraja/play/JudgeManager.java:667-668

final int judgeindex = state.lane / (lanelength / judgenow.length);
context.setTimerOn(JUDGE_TIMER[judgeindex]);   // JUDGE_TIMER は要素数 3
  • judgenow = new int[judgeregion](:131、judgeregion はスキン由来 PlaySkin.getJudgeregion())。
  • judgeregion > states.length(レーン数より判定領域数が多い)のとき lanelength / judgenow.length == 0 となりゼロ除算。
  • 逆に judgeindex >= 3 になる構成で JUDGE_TIMER[judgeindex] が配列外(配列長 3、:635)。

修正方針

  • 除数が 0 になるケースのガード(lanelength/judgenow.length の関係チェック)。
  • judgeindexJUDGE_TIMER.length でクランプ。
  • 実装前に最新の JudgeManager を再確認(行番号がもとエージェント調査時点)。

検証

  • judgeregion がレーン数と不一致な検証用スキンでプレイ開始してもクラッシュしない。

他の形式にエクスポート: PDF Atom