2011年6月25日土曜日

PEAR File_Archiveのバグ マルチバイト文字(SJIS)対応編

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

■現象
SJISのファイル名を圧縮しようとすると、対象ファイルが出力ファイルに含まれない場合がある。

○対象バージョン
1.5.4

■例
○対象ファイル
ソ/1.jpg

○「ソ/」を対象に書庫ファイルを生成した時の書庫内容物
(空っぽ)

■原因
PHPのいわゆる「5C問題」

■対策パッチ
/usr/share/pear/File/Archive/Reader.php
こうしたら直った。

- $std = str_replace("\\", "/", $path);
+ $std=$path;

○補足
ディレクトリの区切り文字を「\」(0x5c)から「/」に置き変える処理なんですけど、SJIS文字の2byte目に含まれる0x5cまで置換してしまっています。
マルチバイト対応版str_replace関数を自作するなどして置き換えてやるのが正攻法なんでしょうが、僕のやりたいことはLinux上にすでに存在するローカルファイルを圧縮するだけなんで、この関数は不要だと思った。
Windows版PHPとか使ってる人は、だめですよ。

○過去にさかのぼって調べてみた
調べてません。

0 件のコメント: