パスワードを忘れた? アカウント作成
539164 journal

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 が使えたらいいなあ(と妄想して逃げてどうする...

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • -hogehuga.txtなんかのファイル名は面倒ですよね。
    拙作のコードではできるだけレスポンスファイルを使うようにしてあります。

    ところで、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も一緒に圧縮されてしまう仕様になっていたはずです。
    • CAB のサブディレクトリ探索の不具合は統合アーカイバの開発 ML あたりで見たことがあったような気がします。私はその現象を ZIP の [ 文字の取り扱いと同様の取り扱い(不具合知ってるけど特に対処せず) をしていますが(^^;

      とりあえず、レスポンスファイル利用バージョンをさっくり作ってテストしてみましたが、zip/tar.* 系は適当なハイフンバグの回避手段が見つからなかったので、当面は拙作圧縮ソフトの制限事項 (- を冒頭にもつファイルを圧縮してはいけない) とすることにしました。現在スクラッチから作ってる .NET 版の圧縮解凍クラスではこういった問題をできるだけ回避できるようにしたいところですね。
      親コメント
typodupeerror

私はプログラマです。1040 formに私の職業としてそう書いています -- Ken Thompson

読み込み中...