[Freewnn-users 72] Re: freewnn-jserver が辞書登録で落ちる場合がある

Zurück zum Archiv-Index

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...




freewnn-users メーリングリストの案内
Zurück zum Archiv-Index