他人の空似

2013 年 6 月 22 日

wordpressコメントフィードでIf-Modified-Sinceがおかしいバグのパッチ出しました

Filed under: 未分類 — 中の人 @ 3:22 PM

該当チケット

If-Modified-Sinceはその日時より後に更新があった場合だけ本文をくれとお願いするHTTPの機能。
wordpressは今見ているここでも実際に使われているブログソフトウェア。
コメントのフィードはこのブログでは以下のurlで見れる。
rss
atom

バグの内容を簡単に説明すると、コメントのフィードにも関わらず、最後に記事を投稿もしくは編集した時刻を元に判定しており、If-Modified-Sinceを使用するといくらコメントしても記事を投稿するまで見えない、というもの。

気付いたのは、google readerからTiny Tiny RSSへと移行をしていた時。
漏れがあると怖いので両方をチェックするようにしていたのだが、なぜかgoogle readerの方にだけスパムコメント付いた旨が通知されてくる。

そこでTiny Tiny RSSの更新処理のログをチェックしてみたところ

[21:06:48/13726] local cache will not be used for this feed
[21:06:48/13726] fetching [http://#{domain}/?feed=comments-rss2]...
[21:06:48/13726] If-Modified-Since: Fri, 07 Jun 2013 05:15:00 GMT
[21:06:48/13726] fetch done.
[21:06:48/13726] unable to fetch: HTTP Code: 304 [304]
[21:06:48/13726] source claims data not modified, nothing to do.

との表示が。

自分でコメント日時より前のIf-Modified-Sinceをつけてアクセスしてみれば確かに304が返ってくる。
そこでwordpressのソースコードを読んでみて前述のバグを発見。
trunkでの再現チェック、パッチ作成、説明する英文書きを経て、開発チームのトラックへバグチケットを投げたという形だ。

出来ればテストコードも付けてパッチを投げたかったのだが、該当関数は現在ノーテストであったうえ、付与するheaderのリストアップから実際にレスポンスヘッダーに追加する処理までがひとつの関数内で行われており、さらに内部でexitまで実行していて、環境依存にならないテスト方法が思いつかなかったため断念。
リファクタリングしてまでテスト突っ込むのは気力的にも、初バグ報告という立場的にも難しかった。

以上、備忘録兼情報共有ということで記事を書いた。
バグなので、wordpress3.6には入るんじゃないかなと。
現在これで困っているという人は該当チケットのパッチを当てておけばいいかと思います。

Powered by WordPress