待辦事項 #41144

Linux で忍者/修行僧/練気術師で始め、オートローラーを回すと落ちる

啟用日期: 2021-01-13 02:56 最後更新: 2021-01-18 21:31

回報者:
(匿名)
負責人:
類型:
狀態:
關閉
元件:
(無)
優先權:
5 - 中
嚴重程度:
5 - 中
處理結果:
修正
檔案:

細節

release/3.0.0Alpha e2af5c4 を --enable-xft 付きでビルドして確認しました。 そのままでは特にメッセージなどは表示されず突然終了するだけですが、main.c 内の signals_init() をコメントアウトして調べたところ SIGSEGV が発生しているようでした。

gdb で追ってみたところ、player-status-flags.c 内の has_not_ninja_weapon() および has_not_monk_weapon() において、tval の値が 4294967277 (= 2**32 - 19) になっており、これを添字として w_max を参照した結果落ちているようです。 tval の値が変になるのは、inventory_list[INVEN_RARM + i].tval の値が 0 になっているのが原因と思います。

あまりコードを理解できていないのですが、インベントリの初期化漏れとかでしょうか?

Ticket History (3/6 Histories)

2021-01-13 02:56 Updated by: None
  • New Ticket "Linux で忍者/修行僧/練気術師で始め、オートローラーを回すと落ちる" created
2021-01-13 02:57 Updated by: taotao
評語

ログインしてませんでしたが報告者は自分です。失礼いたしました。

もう少しソースを読んでみたのですが、「ふさわしい武器」の判定を行う際に素手かどうかのチェックを行っていないのが原因ではないでしょうか?(違ったらすみません)

v2.2.1 では xtra1.c 内の 5425 行目に has_not_ninja_weapon() および has_not_monk_weapon() 相当の処理があり、そこでは if (buki_motteruka(INVEN_RARM+i)) というチェックが入っていますが、現在のコードではこの判定が消えています。

(Edited, 2021-01-13 04:00 Updated by: taotao)
2021-01-14 01:54 Updated by: deskull
評語

報告ありがとうございます。検証します。

2021-01-16 23:42 Updated by: habu
評語

修正を担当します。

2021-01-17 00:26 Updated by: habu
  • 處理結果 Update from to 修正
評語

下記コミットにて修正。マージをよろしくおねがいします。

https://osdn.net/projects/hengband/scm/git/hengband/commits/373e190dba04c39be09da30f2046b288a5faa4d1

2021-01-18 21:31 Updated by: deskull
  • 狀態 Update from 開啟 to 關閉
評語

当方の改編でやった関数の未装備チェック漏れ申し訳ないです。マージしました。

Attachment File List

No attachments

編輯

Please login to add comment to this ticket » 登入