[Namazu-devel-ja 781] Re: File::MMagic::magicMatchStr Re: Re: File::MMagic::checktype_data

Tadamasa Teranishi yw3t-trns @ asahi-net.or.jp
2005年 12月 17日 (土) 23:48:37 JST


寺西です。

Yukio USUDA wrote:
> 
> File::MMagic::magicMatchStr と
> File::MMagic::readMagicLine の実行回数が異常に多かった理由がわかりました。

おお。すごい。

> 【1.File::MMagic::readMagicLine の不具合】
> 引数で持っている配列のレファレンスをコピーしていて失敗しているようです。

これはバグなんですね。それで遅いのは勿体無い。

> 【2.File::MMagic::magicMatchStr (pdfファイルの場合)】
...
> $self->{magic}->[]の中身の順番を判定すべきファイルを先頭に持っていくことが
> できればと思います。

ですね。

> 【3.File::MMagic::magicMatchStr (htmlファイルの場合)】
> 内蔵の magic データが古いため <!DOCTYPE HTML PUBLIC
> で始まるファイルを text/html として識別できず全 magic データでの
> チェックを行っています。
> File::MMagic::magicMatchStr がファイル数の100倍以上呼び出されていた
> 理由は主にこれでした。
> <!DOCTYPE HTML PUBLIC を magic データに追加するか mknmz の filter/html.pl
> 側で addSpecials をしておくのが良いと思います。

手元の /usr/share/magic も

0   string/cB   \<!doctype\ html        HTML document text
0   string/c    \<head                  HTML document text
0   string/c    \<title                 HTML document text
0   string/c    \<html                  HTML document text

となっているので古いですね。

0       string          \<!DOCTYPE\ HTML text/html
0       string          \<!DOCTYPE\ html text/html

を追加すると良いですかね。(XHTMLは html が小文字)
ついでに

sub new { の 

$self->{SPECIALS} = {
    "text/html" => [

にも追加したいところですが、行単位のチェックなので先頭行のみの
判定を書くのは無理ですかね。(SPECIALS じゃ無理?)

> これらの修正で magicMatchStr の呼び出し回数が 80,000回から 8,000回まで減り
> ました。

1割になるのはすごいです。
-- 
=====================================================================
寺西 忠勝(TADAMASA TERANISHI)  yw3t-trns @ asahi-net.or.jp
http://www.asahi-net.or.jp/~yw3t-trns/index.htm
Key fingerprint =  474E 4D93 8E97 11F6 662D  8A42 17F5 52F4 10E7 D14E




Namazu-devel-ja メーリングリストの案内