Namazu-users-ja(旧)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
mknmz が coreを吐いて終了する。
- From: Taiji.Can@xxxxxxxxxxxxxxxxxxx
- Date: Thu, 21 Aug 2003 10:57:25 +0900
- X-ml-name: namazu-users-ja
- X-mail-count: 03467
菅と申します。
環境は
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