[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[FDclone-users:00614] Re: 仕切り直します。
- Subject: [FDclone-users:00614] Re: 仕切り直します。
- From: Takashi SHIRAI <shirai@unixusers.net>
- Date: Sat, 07 Oct 2006 01:37:37 +0900
しらいです。
In Message-Id <20061005200424.362567.80c00eec@isis.ocn.ne.jp>
yuji tamura <yuji@isis.ocn.ne.jp>さんwrites:
> こんばんは、田村です。
> 今日「/User2/yuji/Documents」の再現条件確認のための作業をして
> いた時に気付いたのですが、普通私はターミナルを「95桁、45行」で使用
> しているのですが、「125桁、45行」に広げて使っていた所、
> 素の fd v2.09 でもファイル名、ディレクトリ名が消えない事に
> 気付きました。
この箇所に関して、ふと思いついたことがあるので三つほど検証
をお願いします。これも一旦素の 2.09 に戻してからお試し下さい。
この一連のファイル名が消える現象で、実際にそのファイル名を
表示しているのは browse.c: putname() という関数です。この中
に malloc() が一つあって、このサイズが端末サイズに依存します。
ここで確保した領域サイズが実際に使用する量を越えてしまって
いたとしたら、buffer overflow が生じてファイル名の格納された
領域を上書きしてしまっているかも知れません。
1) 領域を多めに確保しよう
putname() の中に一箇所ある malloc2() の引数を大きくしてみ
ましょう。元は「col * KANAWID + 1」ですが「col * 128 + 1」く
らいにしてみるとどうでしょうかね?
2) 領域サイズを固定値にしよう
malloc() で確保しないで最初から大きめの配列にしましょう。
putname() 冒頭の「char *buf;」という宣言を「chat buf[1024];」
に書換えます。
配列にすると malloc()/free() でエラーになるので、putname()
の中の malloc()/free() は全部 comment out して下さい。
3) 領域を埋めるのをやめよう
putname() の最後の方で、確保した領域を空白文字で埋めている
箇所があります。これが buffer overflow を起こしてるかも知れ
ないので comment out しましょう。こんな(↓)感じ
// while (len < width) buf[len++] = ' ';
どれも逐一素の 2.09 に戻してから試して下さい。同時に試して
も意味がないので一つずつお願いします。
しらい たかし