Namazu-users-ja(旧)


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

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



臼田です

Tadamasa Teranishi wrote:
> 昔、別件でまとめていた判定ルーチンの流れです。(多少間違いが
> あるかもしれません。)

mknmzから該当する部分を引用しますと

sub decide_type ($$) {
    my ($name, $cont) = @_;
    return $name if (!defined $cont || $name eq $cont);

    util::dprint("decide_type: name: $name, cont: $cont\n");
    if ($cont =~ m!^text/plain! && $name =~ m!^text/plain!) {
	return $name;
    } elsif ($cont =~ m!^application/octet-stream!) {
	return $name;
    } elsif ($cont =~ m!^application/(excel|powerpoint|msword)! &&
	     $name !~ m!^application/octet-stream!)  {
	# FIXME: Currently File::MMagic 1.02's checktype_data() 
	# is unreliable for them.
	return $name;
    }

    return $cont;
}

となっているので
> 6. $mtype_c が未定義か、$mtype_c と $mtype_n が同じなら $mtype_n
>    $mtype_c, $mtype_n が text/plain なら text/plain
>    $mtype_c が application/octet-stream なら application/octet-stream
は
$mtype_c が application/octet-stream なら $mtype_n
でしょう。

ここが今回の問題のもとと思われるので
$mtype_c が application/octet-stream で
   $mtype_nが text/plainでなければ$mtype_n
   $mtype_nがtext/plainであればapplication/octet-stream
としておけば少し安全になるのでしょう。
(妥協した解決法ですが)

>    // $mtype_c が application/(excel|powerpoint|msword) で
>   // $mtype_n が application/octet-stream なら $mtype_n
は
    // $mtype_c が application/(excel|powerpoint|msword) で
   // $mtype_n が application/octet-stream でないなら $mtype_n

だろうと思います。

臼田幸生