Namazu-devel-ja(旧)


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

Re: Subject field search bug when NULL characteris contained (was:fieldsearch bug?)



寺西です。

Yukio USUDA wrote:
> 
> mknmzに通す前と通した後のNMZ.field.subjectで一部コードが変わっています。
> 
> 私は
> perlは version 5.005_03 built for i386-freebsd
> nkfは Network Kanji Filter Version 2.0 (2/0301/Shinji Kono)
>        に付属のnkfモジュール
> を使用しているのですが、nkfのバージョン違いによるものではないかと思います。

ビンゴでしょう。当方は nkf 1.71 のモジュールを使っています。

> $ nkf -emXZ1 spool/1 |grep --binary-files=text "Subject" |od -t xCa
> 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  00  20  68
>           sp  sp  sp  sp  sp  sp  sp  sp   (   h esc   .   A nul  sp   h
> 0000100    00  20  68  00  2e  2e  2e  29  0a  74  68  65  20  61  63  63
>          nul  sp   h nul   .   .   .   )  nl   t   h   e  sp   a   c   c
> 0000120    65  6e  74  73  20  69  6e  20  74  68  65  20  53  75  62  6a
>            e   n   t   s  sp   i   n  sp   t   h   e  sp   S   u   b   j
> 0000140    65  63  74  20  61  73  20  27  00  27  20  6f  72  20  61  73
>            e   c   t  sp   a   s  sp   ' nul   '  sp   o   r  sp   a   s
> 0000160    20  27  5c  33  35  31  27  2e  20  20  54  68  61  74  20  73
>           sp   '   \   3   5   1   '   .  sp  sp   T   h   a   t  sp   s
> 0000200    65  65  6d  73  20  74  6f  20  68  61  70  70  65  6e  0a
>            e   e   m   s  sp   t   o  sp   h   a   p   p   e   n  nl
> 0000217

$ nkf -emXZ1 spool/1 |grep --binary-files=text "
Subject" |od -t xCa
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 74
         sp   h esc   N   i  sp   h esc   N   i   .   .   .   )  nl   t
0000120 68 65 20 61 63 63 65 6e 74 73 20 69 6e 20 74 68
          h   e  sp   a   c   c   e   n   t   s  sp   i   n  sp   t   h
0000140 65 20 53 75 62 6a 65 63 74 20 61 73 20 27 1b 4e
          e  sp   S   u   b   j   e   c   t  sp   a   s  sp   ' esc   N
0000160 69 27 20 6f 72 20 61 73 20 27 5c 33 35 31 27 2e
          i   '  sp   o   r  sp   a   s  sp   '   \   3   5   1   '   .
0000200 20 20 54 68 61 74 20 73 65 65 6d 73 20 74 6f 20
         sp  sp   T   h   a   t  sp   s   e   e   m   s  sp   t   o  sp
0000220 68 61 70 70 65 6e 0a
          h   a   p   p   e   n  nl
0000227

のように nkf 1.71 ではそのまま出力されます。
が、nkf 2.02 の場合は臼田さんの結果になります。

nkf 2.02 でこの結果になるのが問題のように思いますので、nkf 側での
対処も必要なのではないかと思います。
何せ null 文字を作りだしてしまうのですから。

で、nkf が修正されれば本件の問題は解決するでしょう。
通常のメールであれば、これで問題が起こることはないでしょう。

それとは別に Subject: from: に指定した文字列をデコードして、
null 文字や改行コード、およびその他の制御文字が含まれる場合に
ついては、どうするのが良いかは別に考えるのが良いでしょう。

(null 文字、改行コードについては意図的に仕組まない限り、通常は
入っていないはずです。制御コードについては、通常のメールでも
入っている場合があるようです。)

1. null 文字については、null 以降は削除
2. 改行 文字については、改行 以降は削除
3. そのほかの制御文字は制御文字を削除

ぐらいでしょうか。BS などはまともに処理した方が良いのかな。
(そのまま削除しても大きな問題ではないだろうけど。)
-- 
=====================================================================
寺西 忠勝(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