[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[mgp-users-jp 00360] Re: bug in parse.c



まつもと ゆきひろです

In message "[mgp-users-jp 00359] Re: bug in parse.c"
    on 98/11/09, Kazu Yamamoto (山本和彦) <kazu@iijlab.net> writes:

|申し訳ありませんが、どのような資料を書くとバグが出るのか教えて下さい。
|そうでないと、こちらで確認できません。
|
|MagicPoint を書いている人は、かなりよいプログラマーですが、コードの修
|正を見て必ずしもそのバグが連想できるわけではありません。できることもあ
|りますが、できないこともあります。

仰ることはもっともです.[mgp-usres-jp 00358]のいとじゅんさん
の反応からは連想できたように思いますが.

バグの発生する資料を現時点で公開して良いものだか自信がないの
で,バグの内容について説明することで替えさせて下さい.現象と
してはある程度以上の大きさの資料を表示させると予測しにくいタ
イミングでタブでインデントした行が表示されないことがあります.

--- parse.c~	Sun Sep 27 00:32:36 1998
+++ parse.c	Thu Nov  5 22:40:35 1998
@@ -1096,3 +1096,3 @@
 					tmp = cp->ctc_value;
-					cp->ctc_value = strdup(p);
+					p = cp->ctc_value = strdup(p);
 					free(tmp);

この部分で変数pが指していた文字列領域は解放されてしまいます.
が,このコードの後の方ですでに解放された領域を指しているpが
参照されています.解放された領域には古い内容が残っていること
が多いので,一見正常に動作しますが,メモリの使い方のタイミン
グによって内容が破壊され,その先頭の値がたまたま `&' だと行
の表示が欠けてしまいます.

私のところでは20ページ強の資料で発生しました.
この程度でよろしいでしょうか?

                                まつもと ゆきひろ /:|)