[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[freewnn:00100] Re: illigal memory access.
- To: freewnn@tomo.tomo.gr.jp
- Subject: [freewnn:00100] Re: illigal memory access.
- From: KATAYAMA Yoshio <kate@XXXX>
- Date: Fri, 20 Aug 1999 15:00:53 +0900
- In-Reply-To: Your message of 18 Aug 1999 13:43:47 +0900. <86so5hzojg.fsf@itl.co.jp>
- Reply-To: freewnn@tomo.gr.jp
- Sender: kate@XXXX
片山@PFUです。
Date: 18 Aug 1999 13:43:47 +0900
From: MOTOKI Sinichi <sin@itl.co.jp>
> 事の発端は、日々 FreeWnn を使っていると時々、付属語ファイル
> 関連でエラーが出ることから始まります。
どのようなエラーなのでしょうか。私が気が付いていないだけなのか、
環境の違いのためなのか、このようなエラーを見たことがありません。
> さて、エラーになるのも腹が立つのでデバックしようと -g と
> Electric Fence(malloc debugger の一種) をリンクした jserver
> を立ち上げたのですが、エラー以前に segmentation fault して
> しまいました。
> fkz_ckvt内で、引数を
>>ft->kango_vect_area(struct kangovectへのポインター) + vector(引数)
> として fkz_ck_vector を呼び出しているのですが、
> fkz_ck_vector内で、このポインターの指す領域を参照している部
> 分があり、ここで segmentation fault しているようです。
> (確保した領域の先頭から -1 した領域ならば segmentation
> fault で当然ですよね?)
sizeof(struct kangovect) は 13 * sizeof(int) なので、大抵の環境
では、先頭 - 1 の要素も参照できてしまいます。
#もちろん、代入したらアウトです
Electric Fence は知らないのですが、malloc debugger の一種という
ことですので、これが影響している可能性もあります。或は、fzk_ckvt
が誤った結果を返すために、後の部分で誤った領域を破壊しているのか
も知れません。
それはともかく、バグには違いありませんので、修正は必要ですね。
> - sbn_kai(bnsetu_kai.c), zen_sbn(jikouho_d.c) において、
> endvect1 が WNN_VECT_NO の場合は、fkz_ckvt を呼び出さない
> ようにした。
>*** bnsetu_kai.c.orig Wed Aug 18 13:38:48 1999
>--- bnsetu_kai.c Wed Aug 18 12:53:16 1999
>*** jikouho_d.c.orig Wed Aug 18 13:38:06 1999
>--- jikouho_d.c Wed Aug 18 13:17:00 1999
fzk_ckvt() を使っている場所は4ヶ所ありますから、2ヶ所修正漏れ
になっています。
># 本題のエラーはさっぱり出なくなってしまいました (^^;
エラーが出なくなったということですが、修正漏れがあるのは気持ち悪
いので、fzk_ckvt() を直した方がよいと思います。
――――ここから――――ここから――――ここから――――ここから――――
--- fzk.c.ORG Tue Mar 23 18:24:44 1999
+++ fzk.c Fri Aug 20 14:34:57 1999
@@ -539,7 +539,7 @@
fzk_ckvt(vector)
register int vector;
{
- return (fzk_ck_vector(((struct kangovect *) ft->kango_vect_area + vector)));
+ return vector >= 0 && fzk_ck_vector(&ft->kango_vect_area[vector]);
}
――――ここまで――――ここまで――――ここまで――――ここまで――――
#ついでに、意味不明なポインター式をすっきりさせました
安全のためには vector の上限のチェックも入れるべきなのですが、附
属後ファイルを読み込んだ時に上限値を捨ててしまっています。:-(
上限値を struct FT に入れておくように修正するのは、落ち着いてか
らにしたいと思います。
--
片山@PFU