Namazu-users-ja(旧)


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

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



寺西です。

Taiji.Can@xxxxxxxxxxxxxxxxxxx wrote:
>
>   を利用しています。確かSolarisでやっていたときには core を吐いて
>   死ぬようなことはなかったと思うのですが。。。。

想定外のデータを扱った場合は、OS によって挙動が異なることはあります。
 
> 1. binary データを text/plain として扱い core を吐いて死ぬ。
> 
> ex: mknmz をしているときの log です。
> 
> 134064/184948 - /home/Apache/htdocs/xxxx/doc/mp/manual/13prgm.txt [text/plain]
> 
>   これで core を吐いて死にました。.txt とは書かれていますが、中身は

.txt であれば、拡張子を優先してファイルのタイプを決定しますので、
このファイルは text/plain と認識します。

実際にはバイナリデータにも関わらず、text/plain として処理を行うと、
内部で不具合が生じます。Linux で core を吐くこともありえます。
Solaris で core を吐かなかったとしても、それはたまたまということ
です。(あるいは、core の size が 0 に制限されているとか。)

> 2. binary データを text/plain として扱い core を吐いて死ぬ。ですが、
>    File コマンド自体での認識が 1 と異なります。
>
> 192817/194393 - /home/Apache/htdocs/xxx/yyy/18.DOC [text/plain]

.DOC の場合はどういう順番でファイルタイプを決定するのかをきちんと
調べていませんが、MS-WORD ファイル あるいは text/plain であると
仮定している部分はあるかもしれません。

未知のバイナリデータで .DOC という拡張子を付けた場合は、誤認すること
は十分に考えられます。

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

対処方法としては、拡張子を変えることぐらいしか今のところありません。
(たぶん)
あるいは、そのバイナリデータ用のフィルタを作成するかです。

これは、拡張子がファイルタイプを示すという文化(Windows が主ですが、
Unix もある程度はそうなります。)があるので、仕方がないところです。

もっとも、バイナリを plain/text と誤認した場合に core を吐くような
ことが起こらないように mknmz を対処すべきではあります。
検証用のデータがあれば対処することも可能かもしれませんが、ない以上は
どこで core を吐くのかチェックできません。
-- 
=====================================================================
寺西 忠勝(TADAMASA TERANISHI)  yw3t-trns@xxxxxxxxxxxxxxx
http://www.asahi-net.or.jp/~yw3t-trns/index.htm
Key fingerprint =  474E 4D93 8E97 11F6 662D  8A42 17F5 52F4 10E7 D14E