Tomoki AONO
aono****@cc*****
2010年 12月 8日 (水) 02:46:30 JST
青野です。ご報告ありがとうございます。 <20101****@debia*****>の記事において henri****@debia*****さんは書きました。 >> twitter で教えていただいたのですが、Debian squeeze 以降の freewnn-jserver >> で emacs から辞書登録を行うと jserver が落ちる現象が出る場合があるようです。 >> 原因と思われる部分についてパッチを頂きました。ご意見頂けますか? そのやり取りについては(たまたま近い時間帯にWeb検索で見つけ たので)見せていただきました。やまねさんにご報告された @pachira23 さんにも(Twitterやってないのでこの場で)お礼申し 上げます。 >> $ diff -u freewnn-1.1.1~a021+cvs20100325/Wnn/jserver/de_header.h{.original,} >> --- freewnn-1.1.1~a021+cvs20100325/Wnn/jserver/de_header.h.original 2004-12-30 02:45:32.000000000 +0900 >> +++ freewnn-1.1.1~a021+cvs20100325/Wnn/jserver/de_header.h 2010-11-28 22:16:36.000000000 +0900 >> @@ -548,7 +548,7 @@ >> extern void Get_knj2 (); >> extern void get_kanji_str (); >> extern void Get_kanji_str_r (); >> -extern unsigned char *kanjiaddr (); >> +extern unsigned char kanjiaddr (); >> extern int create_null_dic (); >> extern int create_hindo_file (); >> extern int input_header_jt (); >> >> >> >> 問題の調査については以下のように詳細に確認頂いています。 (略) >> > そこで、len の値を決めている kanjiaddr が定義されている Wnn/etc/bdic.c を見たところ、 >> > >> > UCHAR >> > kanjiaddr (UCHAR* d0, w_char* kanji, w_char* yomi, w_char* comment) (略) >> > となっていました。ここでは、返り値は確かに UCHAR です。 >> > しかし、jishoop.c でインクルードしている Wnn/jserver/de_header.h では、 >> > >> > extern unsigned char *kanjiaddr (); >> > >> > となっているために、 >> > >> > len = (int) kanjiaddr (dest, kanji, yomi, comment); >> > >> > の部分が、コードで意図した「UCHAR を int にキャストする」ことにならずに、 >> > ポインタを int にキャストする結果になっています。 (以下略) これはすごいですね…。de_header.hの該当部分はWnn4.2の頃か らそうなってたみたいです。32bitアーキテクチャならこのまま でも動いていたということでしょうか。 #やまねさんはTwitterでkvm上(の仮想環境?)で再現しないとおっ #しゃってましたが、それはやはり32bitだったんでしょうか。 分析の細かい所についてはコメントできないのですが、明らかに 単純な記述ミスなので修正すべきだと思いました。辞書登録で jserverが落ちるという話は以前にもあったのですが、これで直っ たらいいのですが…。 ---- 青野智樹 (aono****@cc*****) Personal opinion only...