Namazu-users-ja(旧)


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

Re: mknmz で .gz ファイルを処理中にコアダンプ



<39D5CDB0.15141482@xxxxxxxxx>の記事において
teranisi@xxxxxxxxxさんは書きました。

>> IRIX 5.3 の環境で、大きな .gz ファイルを mknmz で
>> 処理すると、コアダンプすることがわかりました。

  この件なのですが、どれくらいのサイズで core dump しますか?

  filter/gzip.pl から Compress::Zlib で展開する処理のみを取りだしたス
クリプトを作って試してみましたが、とりあえず 5MB 程度のファイルは問題
なく展開できました。

# Compress::Zlib 1.05 です。
-- 
野首 貴嗣
E-mail: knok@xxxxxxxxxxxxx (private)
        nokubi@xxxxxxxxx (official)

# check-zlib.pl

use Compress::Zlib;

my $content;

while (<>) {
    $content .= $_;
}

my $contref = \$content;

    my $offset = 0;
    $offset += 3;
    my $flags = unpack('C', substr($$contref, $offset, 1));
    $offset += 1;
    $offset += 6;
    $$contref = substr($$contref, $offset);
    $$contref = substr($$contref, 2) if ($flags & 0x04);
    $$contref =~ s/^[^\0]*\0// if ($flags & 0x08);
    $$contref =~ s/^[^\0]*\0// if ($flags & 0x10);
    $$contref = substr($$contref, 2) if ($flags & 0x02);

    my $zl = inflateInit(-WindowBits => - MAX_WBITS());
    my ($inf, $stat) = $zl->inflate($$contref);
    if ($stat == Z_OK() or $stat == Z_STREAM_END()) {
	$$contref = $inf;
    } else {
	$$contref = '';
	return 'Bad compressed data.';
    }

print $content;
exit 0;