Namazu-devel-ja(旧)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Subject field search bug when NULL characteris contained
寺西です。
TSUCHIYA Masatoshi wrote:
>
> >nkf 2.02 でこの結果になるのが問題のように思いますので、nkf 側での対処
> >も必要なのではないかと思います。何せ null 文字を作りだしてしまうので
> >すから。
>
> と言いきってしまって良いかどうかは,多少の疑問があります.問題を再現す
$ od -t xCa test.txt
0000000 53 75 62 6a 65 63 74 3a 20 5b 4d 65 77 2d 64 69
S u b j e c t : sp [ M e w - d i
0000020 73 74 20 31 31 31 38 32 5d 20 52 65 28 32 29 3a
s t sp 1 1 1 8 2 ] sp R e ( 2 ) :
0000040 20 2b 42 61 63 6b 75 70 20 20 20 20 20 20 20 20
sp + B a c k u p sp sp sp sp sp sp sp sp
0000060 20 20 20 20 20 20 20 20 28 68 1b 2e 41 1b 4e 69
sp sp sp sp sp sp sp sp ( h esc . A esc N i
0000100 20 68 1b 4e 69 20 68 1b 4e 69 2e 2e 2e 29 0a
sp h esc N i sp h esc N i . . . ) nl
0000117
少なくともこの文字列は(たぶん)ISO-2022-JP-2 の文字列で、でたらめな
制御文字が入っているというわけではありません。
nkf が ISO-2022-JP に対応していないにしろ、nkf を通したことで、
(たぶん)でたらめな変換をして、途中に nul 文字を生成するのは
バグといえるでしょう。
# 対応していないのなら、少なくともそのまま出さないとね。
何にしてもテキストのフィルタを通したら nul 文字が途中に入るのは
ダメでしょ。(元データに入っているならともかく)
> 個人的には,この nkf の挙動がバグであると言いきることは難しいと思いま
> す.この挙動がバグであると言うためには,この入力に対する nkf の『正し
> い出力』が定義できることが必要です[*].しかし,ここでの入力は,文字コー
> ドとしては不完全な byte 列ですから,『正しい出力』が定義できるようには
> 思えません.
まぁバグだと思いますが、百歩譲って仮に仕様だとした場合、
想定外のデータを入力させるのが悪いってことになります。
すると Namazu でも想定外のデータを入力するのが悪いって論理に
なるので、
> ですから,namazu(mknmz) としては,nkf が NULL 文字や制御文字を含む文字
> 列を返したとしても,それなりに動くように設計しておくべきだと思います.
なんてことは言えないですよね。(すくなくとも'べき'とは言えなく
なります。)
想定外のデータ(nul 文字や改行を途中に含む)を入力した場合の対処に
ついては既にパッチを作っているので、それを使えば NKF 2.X の問題も
解決しまうのだが、問題は nkf 2.X でデタラメな変換を行うことの方です。
nkf 2.X の挙動が不明な以上、それをそのまま使い続けるのは危険です。
> >で、nkf が修正されれば本件の問題は解決するでしょう。通常のメールであ
> >れば、これで問題が起こることはないでしょう。
>
> nkf が修正される(できる)かどうかは,個人的には疑問です.
そうかな?
# 簡単に直るかどうかは別の話だけど。
nkf が直らないなら、nkf を捨てるという選択肢もあるわけで、挙動不振の
nkf 2.X を使わなければならない理由はないでしょう。
完全に置き換えはできませんが、iconv で代用するのでも良いでしょう。
(不足する機能は追加しないといけませんけどね。)
--
=====================================================================
寺西 忠勝(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