ardryの日記: 圧縮バグ発覚 2
日記 by
ardry
拙作の圧縮ソフトに -ほげほげ.txt といったファイルを圧縮しようとすると誤動作/圧縮不能に陥るというバグレポが寄せられた。
本来は WIKI の日誌のネタなんだけど、興味深い事象なのでこちらに書くことにした。
事前に予期はしてたけど、βテスト時にテスト漏れしてそのままになってた事象だなあ(汗)
軽く調べてみたが、UNLHA32.DLL では -- オプションは別の意味で予約されていて使えない T_T ファイル名の先頭に -gb をつけて -gb-ほげほげ.txt としなければいけないらしい。
ZIP32J.DLL CAB32.DLL TAR32.DLL のドキュメントには - 文字を含むファイルの対処策が書かれていなかった。
レスポンスファイル使用への仕様変更を検討するべき時期がきたのかもしれない。...大幅な動作変更になるから、Ver.2.2.x 系でこんな変更はあまりやりたくないんだけどなあ。Borland C++ 5.5.1 とか Visual C++ 6.0 とかで NUnit が使えたらいいなあ(と妄想して逃げてどうする...
レスポンスファイル (スコア:1)
拙作のコードではできるだけレスポンスファイルを使うようにしてあります。
ところで、CAB32.DLLはレスポンスファイルなしではうまく動かなかった気がします。
というのは、-r(サブフォルダも検索)オプションの扱いがほかのDLLと違っていて、たとえば次の構造
+ file.txt
|
+ test1\
| |
| + file.txt
|
+ test2\
|
+ foo.txt
で、file.txtとtest2\をまとめて圧縮しようとして
-a -r cabname.cab file.txt test2\*.*
とするとtest1\file.txtも一緒に圧縮されてしまう仕様になっていたはずです。
Re:レスポンスファイル (スコア:1)
とりあえず、レスポンスファイル利用バージョンをさっくり作ってテストしてみましたが、zip/tar.* 系は適当なハイフンバグの回避手段が見つからなかったので、当面は拙作圧縮ソフトの制限事項 (- を冒頭にもつファイルを圧縮してはいけない) とすることにしました。現在スクラッチから作ってる .NET 版の圧縮解凍クラスではこういった問題をできるだけ回避できるようにしたいところですね。