2006年6月21日

[Namazu-devel-ja 1097] Re: mknmz: text/plain に誤認識されアプリ固有フィルタが適用されない問題

さとうふみやす @ ミラクルです。

At Tue, 20 Jun 2006 13:37:09 +0900,
Tadamasa Teranishi wrote:
> > ファイル名の拡張子での判定は最後の手段というか
> > あまり推奨されていなかったかと思います。
>
> 拡張子での判定はできるかぎり避けてください。

> (バイナリデータでどうしても拡張子で判定せざるを得ない場合にのみ
> 使用してください。)

残念ながら、バイナリデータです。具体的には、
Fuji Xerox の DocuWorks データとフィルタで発生しました。

http://www.fujixerox.co.jp/soft/docuworks/download203.html

> > File-MMagic の addSpecials で判定パターンを
> > 登録しておいたほうがよいと思います。
>
> というよりも、そうして下さい。

(以下、HEAD ブランチ)

pl/document.pl の _guess_mimetype() 内において、

my $mtype_n = $Magic->checktype_byfilename($cfile);

で $mtype_n が application/foobar と判定され、

my $mtype_c = $Magic->checktype_data($$contref);

で $mtype_c が undef で、

my $mtype_m;
$mtype_m = $Magic->checktype_magic($$contref)
if ((!defined $mtype_c) ||
$mtype_c =~
/^(text\/html|text\/plain|application\/octet-stream)$/);

で $mtype_m が undef か text/html, text/plain か
application/octet-stream のいずれかで、

$mtype_c = $mtype_m
if (defined $mtype_m &&
$mtype_m !~
/^(text\/html|text\/plain|application\/octet-stream)$/);

で $mtype_c が undef のままということであれば、
このドキュメントの MIME タイプは application/foobar と
するのが妥当だと思うのですが、いかがでしょうか?

その後に

(a)
$mtype_c = 'text/plain' unless defined $mtype_c;

としている理由がわかりませんでした。
一方、同ファイルの _decide_type() で

return $name if (!defined $cont || $name eq $cont);

としていて、$cont ($mtype_c) が undef の場合は
$name ($mtype_n) が採用されるような実装になっていますが、
$cont ($mtype_n) は絶対に undef にならないので、
「!defined $cont」を判定する意味はないことになります。
いつかの変更のタイミングでこの矛盾(?)が入り込んで
しまったのでしょうかね。

--
-- Name: SATOH Fumiyasu / fumiyas @ miraclelinux.com
-- Business Home: http://www.MiracleLinux.com
-- Personal Home: http://www.SFO.jp/blog/
_______________________________________________
Namazu-devel-ja mailing list
Namazu-devel-ja@xxxxx
http://www.namazu.org/cgi-bin/mailman/listinfo/namazu-devel-ja

投稿者 xml-rpc : 2006年6月21日 20:09
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/40314
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。