Namazu-users-ja(旧)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: mknmz がcoreを吐いて終了する。



臼田です。

> > > % ./File /home/Apache/htdocs/xxxx/doc/mp/manual/13prgm.txt
> > > /home/Apache/htdocs/xxxx/doc/mp/manual/13prgm.txt: application/octet-stream
> > File-MMagicはバイナリデータであることを知っているが、mknmzは拡張子を信じてテキ
> > ストと判断しているということだと思います。
> 
> たぶん未知データは全てバイナリとみなしているのであって、決して
> バイナリデータであると知っているわけではないと思います。
File::MMagic::checktype_data内で
File::MMagic::check_binaryを用いてバイナリファイルであるかテキスト
ファイルであるかを判定しています。
ファイル先頭ブロック中にコントロールコード等が全体の1割以上含まれて
いたらバイナリデータであるとしているのでここでバイナリファイルとみな
されたものは文字コードでなさそうなものをかなり含んでいると思われます。
(未知のテキストデータの場合は未定義の値が返ります。

ということから
> > バイナリであることが分かっているのを拡張子判定でplane/textにしているのはもった
> > いないのでmknmz内での判定式を修正するとよいのでしょう。
と考えました。
話題としていた"13prgm.txt"はcheck_binaryでバイナリと判定されているの
でmknmz内でのdecide_typeの判定条件を修正し対応できるだろうと思ったの
ですが、

check_binaryでもテキストと判定される"18.DOC"のようなファイルは
・コントロールコードが混在しているが1割未満である
・テキスト部分のうしろにバイナリ部分をつけて1つのファイルにしてある
というように判定をすり抜けるものなのだろうと思います。
参考のためにどのような構造のファイルなのか知りたいところです。

臼田幸生