Namazu-devel-ja(旧)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: namazu-cgi-9 のエラーに関わる話
- From: "Komai @home" <GFH05144@xxxxxxxxxxx>
- Date: Fri, 21 Mar 2003 08:40:04 +0900
- X-ml-name: namazu-devel-ja
- X-mail-count: 02772
- References: <3E7A2F87.FE842E4C@asahi-net.or.jp>
小舞です。
検索結果(CGI)の途中の文字が切れるという現象とも関係ありますでしょうか?
http://www.namazu.org/ml/namazu-win32-users-ja/msg01580.html
http://www.namazu.org/ml/namazu-win32-users-ja/msg01581.html
自分の場合、Windowsではなく、Linuxのサーバー上です。
明らかに、途中のBUFFERが切れているという感じです。
(CGIが返してきた、HTMLの中身を見てみると、文字が切れています)
これと関係はありますでしょうか?
もし、これで解決すると非常に嬉しいです!!。
>寺西です。
>
>namazu-cgi-9 がセグメンテーションフォールトを起こす問題が以前あった
>かと思いますが、当方でも再現しました。
>
>それでいろいろ調べてみると、次の問題を発見しました。
>
>src/rcfile.c
>
> char tmp[BUFSIZE];
>
> char *home;
> if ((home = getenv("HOME")) != NULL) {
> strncpy(tmp, home, BUFSIZE - 1);
> strncat(tmp, "/", BUFSIZE - strlen(tmp) - 1);
>
>これは getenv("HOME") で返される文字列の長さが BUFSIZE - 1 を
>超えないように strn*() を使っているわけですが、バグがありました。
>
>getenv("HOME") で返される文字列の長さが BUFSIZE - 1 を超えた場合、
>まず、strncpy() で BUFSIZE - 1 分コピーされます。
>しかし、'\0' のターミネート文字がありません。
>このため、次の strncat() の strlen(tmp) の値は BUFSIZE - 1 を超える
>場合があります。すると、BUFSIZE - strlen(tmp) - 1 が負の数に
>なります。tmp の文字列は '\0' でターミネートされていない上、
>負の数字で strncat() を実行するので、strncat() を実行した時点で
>メモリを破壊します。
>
>これはかなりまずい問題ではないかと思います。
>
>同様の処理は沢山ありそうです。
>--
>=====================================================================
>寺西 忠勝(TADAMASA TERANISHI) yw3t-trns@xxxxxxxxxxxxxxx
>http://www.asahi-net.or.jp/~yw3t-trns/index.htm
>Key fingerprint = 474E 4D93 8E97 11F6 662D 8A42 17F5 52F4 10E7 D14E
>
>