2011年6月24日金曜日

PEAR File_Archiveのバグ

PEARのPHPライブラリ「File_Archive」のバグを見つけました。
英語できんし、どうフィードバックしたらいいのかわからないので、とりあえずひとりごちります。

■現象
ディレクトリを丸ごと圧縮すると、生成された書庫ファイル内に同じファイルが二重に取り込まれてしまっていることがある。

○対象バージョン
1.5.4

■例
○ディレクトリ構成
a/1.jpg
a/2.jpg
a/3.jpg
a/4.jpg

○「a/」を対象に書庫ファイルを生成した時の書庫内容物
a/1.jpg
a/1.jpg
a/2.jpg
a/2.jpg
a/3.jpg
a/4.jpg

■原因
どうやら「readdir()」で取得されたディレクトリ「.」「..」の取り扱いに不具合がある様子。
正しくスキップせず周辺のファイルを二重に取り込んでしまう模様。

■対策パッチ
/usr/share/pear/File/Archive/Reader/Directory.php
111行目あたり、なんか判定順序がおかしい気がする。こうしたら直った。

- if ($this->source !== null) {
- $this->source->close();
- }

$file = readdir($this->directoryHandle);
if ($file == '.' || $file == '..') {
continue;
}
if ($file === false) {
return false;
}

+ if ($this->source !== null) {
+ $this->source->close();
+ }

○過去にさかのぼって調べてみた
1.1.0頃から発生している様子だけど、実際にはテストしてないのでわかりません。

0 件のコメント: