Namazu-users-ja(旧)


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

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



  菅と申します。

  環境は

  Linux drastic.mei9.advantest.co.jp 2.4.20-19.9smp 
  perl, v5.8.0
  Namazu 2.0.12

  を利用しています。確かSolarisでやっていたときには core を吐いて
  死ぬようなことはなかったと思うのですが。。。。

  で、2点問題があって、

1. binary データを text/plain として扱い core を吐いて死ぬ。

ex: mknmz をしているときの log です。

134064/184948 - /home/Apache/htdocs/xxxx/doc/mp/manual/13prgm.txt [text/plain]

  これで core を吐いて死にました。.txt とは書かれていますが、中身は

% file /home/Apache/htdocs/xxxx/doc/mp/manual/13prgm.txt
/home/Apache/htdocs/xxxx/doc/mp/manual/13prgm.txt: data

  と、なります。以前作った File コマンドを使うと

% ./File /home/Apache/htdocs/xxxx/doc/mp/manual/13prgm.txt
/home/Apache/htdocs/xxxx/doc/mp/manual/13prgm.txt: application/octet-stream

  と、なります。File コマンドは最後に付けておきます。
  
2. binary データを text/plain として扱い core を吐いて死ぬ。ですが、
   File コマンド自体での認識が 1 と異なります。

192817/194393 - /home/Apache/htdocs/xxx/yyy/18.DOC [text/plain]

% file /home/Apache/htdocs/xxx/yyy/18.DOC
/home/Apache/htdocs/xxx/yyy/18.DOC: data

  となりますが、File コマンドだと

%./File /home/Apache/htdocs/xxx/yyy/18.DOC
/home/Apache/htdocs/xxx/yyy/18.DOC: text/plain

  となります。

  どちらも実際は data なのですが、text/plain として処理されています。
  問題なのはその後 core を吐いて止ってしまうことです。これはどの様に
  対処すべきでしょうか? 

  Linux環境に移ってから今までにも同じ現象がありました。
  rpm 等が対象となったときに core を吐いて止ってしまう、と言う件です。
  これらは元々 .rpm 等だったので mknmz 側で rpm を非対象とすることで
  対応できましたが、今回は .txt, .DOC 等なので非対象にするわけには
  いきません。もう後一息のところでどちらも index 化が出来ないので悔しい
  限りです。。

※すいませんが、これらのファイルは出すことはできません。_o_

% cat File     
#! /usr/bin/perl -w

use strict;

#use FileHandle;
use File::MMagic; 
use Compress::Zlib;

for my $filename (@ARGV) {
        my $mm = new File::MMagic;
    $mm->addSpecials("text/plain; x-type=rfc",
                        "^Network Working Group",
                        "^Request for Comments:",
                        "^Obsoletes:",
                        "^Category:",
                        "^Updates:");
    $mm->addSpecials("application/x-tex",
        '^\\\\document(style|class)');
    $mm->addFileExts('\\.tex$', 'application/x-tex');

        my $fh = new FileHandle "< $filename";
        my $cont = join('', <$fh>);
        my $type = $mm->checktype_contents($cont);
        if ($type =~ /^application\/x-gzip/) {
                {
                        my $offset = 0;
                        $offset += 3;
                        my $flags = unpack('C', substr($cont, $offset, 1));
                        $offset += 1;
                        $offset += 6;
                        $cont = substr($cont, $offset);
                        $cont = substr($cont, 2) if ($flags & 0x04);
                        $cont =~ s/^[^\0]*\0// if ($flags & 0x08);
                        $cont =~ s/^[^\0]*\0// if ($flags & 0x10);
                        $cont = substr($cont, 2) if ($flags & 0x02);
                }
                my $x = inflateInit(-WindowBits     =>  - MAX_WBITS()) ;
                my ($inf, $stat) = $x->inflate($cont);
                $cont = $inf if $stat == Z_OK or $stat == Z_STREAM_END ;
                $type = $mm->checktype_contents($cont);
                print "Compressed:"
        }
        print "$filename: $type\n";
}
-- 

					ADVANTEST corp.
					Taiji.Can@xxxxxxxxxxxxxxxxxxx