gtk-gnutella logo
現在のバージョン: 1.2.3

Code 101 - 解答

テスト 1

作成者: Richard Eckart

解答

ダウンローダが "Server" ではなく常に "User-Agent" を与えていました。このように 13 行目の誤ったテストが、常に "User-Agent" から取り出したユーザエージェント文字列を NULL で上書きしてしまいます。なぜなら "Server" ヘッダが利用できなかったからです。

13行目は以下のようにすべきです

13: if (user_agent == NULL)

このバグは 2004年1月17日付 CVS の uploads.c の 2088 行目にあったものです。

テスト 2

作成者: Richard Eckart

解答

補助変数を使用する代わりに、直接 data_list 上で for-loop を繰り返すのが問題でした。なぜなら data_list でのループの終わりが NULL を指しているからです。NULLg_list_free() を呼び出しても全く効力がありませんし、手続きの終わりに残されていたリストへのポインタさえありませんでした。

この問題を解決するため、ポインタが data_list にあるリストの始まりを指せるよう、コードが data_list 上で繰り返す補助変数を使用するように変更しました。

このバグは 2004年1月17日付 CVS の downloads_cb.c の 144 行目にありました。二三、他の場所にも同じ問題を抱えていました、このため gtk-gnutella を通常の使用法で 3 時間走らせた後に、およそ 1MB のサイズのメモリ漏出が測定されました。

Users Love Us Community Choice SF Favourite Community Leader Open Source Excellence SourceForge.net Logo RSS Feed Available Open Hub metrics Coverity Scan Build Status gtk-gnutella at GitHub
Copyright © 2000-2014 Yann Grossel, Raphaël Manfredi および手伝って 下さった数多く の方々。