Ticket #41144

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

Open Date: 2021-01-13 02:56 Last Update: 2021-01-18 21:31

Reporter:
(Anonymous)
Owner:
Type:
Status:
Closed
Component:
(None)
Priority:
5 - Medium
Severity:
5 - Medium
Resolution:
Fixed
File:
None

Details

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
Comment

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

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

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
Comment

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

2021-01-16 23:42 Updated by: habu
Comment

修正を担当します。

2021-01-17 00:26 Updated by: habu
  • Resolution Update from None to Fixed
Comment

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

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

2021-01-18 21:31 Updated by: deskull
  • Status Update from Open to Closed
Comment

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

Attachment File List

No attachments

Edit

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » Login