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
を指しているからです。NULL
で g_list_free()
を呼び出しても全く効力がありませんし、手続きの終わりに残されていたリストへのポインタさえありませんでした。
この問題を解決するため、ポインタが data_list
にあるリストの始まりを指せるよう、コードが data_list
上で繰り返す補助変数を使用するように変更しました。
このバグは 2004年1月17日付 CVS の downloads_cb.c の 144 行目にありました。二三、他の場所にも同じ問題を抱えていました、このため gtk-gnutella を通常の使用法で 3 時間走らせた後に、およそ 1MB のサイズのメモリ漏出が測定されました。