Namazu-devel-ja(旧)


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

1行文字列出力部分の修正について



寺西です。

1行文字列出力部分で、改行コードや nul 文字が入っていても、そのまま
出力してしまう問題を回避するために以下の修正を考えています。
(以下の修正では改行コード、nul 文字以降を捨てるようにしています。)

目的は
・テキスト中に nul 文字が入るのを防ぐ
・1行出力のつもりが 改行コードを含むために複数行出力してしまい、
 つじつまが合わなくなることを防ぐ
です。

通常はこれらのことは起こりませんが、エラーデータの場合、起こらない
とは限らないため、安全策として実装するに過ぎません。

pl/nmzidx.pl には1行分のデータを出力するために putline が用意され
ているので、これを修正することで問題解決かと思いましたが、
NMZ.field.* に関しては mknmz 本体で直接操作している部分がありました。
# 将来、統合した方が良いでしょうね。

制御文字については今回削除するようにはしていませんが、NMZ.field.uri 
以外は削除した方が良いでしょう。
(NMZ.field.uri が eucJP に統合された場合は、NMZ.field.uri も制御文字
を削除した方が良い。)
都合の良いことに mknmz には NMZ.field.uri 以外を加工処理している
部分があるので、そこに制御文字削除処理を加えればよいでしょう。
(0x00, \n をそこで削除しないこと)
今回制御文字を削除する処理を加えていないのは、制御文字が入っていて
特に支障がでることはないためです。

どうしようか悩んだのですが、\r に関しては \n 同様の処理をした方が
良いでしょうか? (\n と同様の処理の方が良いような気がしてきました。)

なお、この修正で NKF 2.X により nul 文字が NMZ.field.subject 
に含まれる問題も解決できてしまいますが、そちらはあくまでも
NKF 2.X の問題なので、NKF 側が修正されるか nkf 1.71 あるいは
修正パッチ済み nkf 1.9 を使うようにしてください。
NKF 2.X では他にも問題が生じる可能性がありますから。

# 推奨バージョンは nkf 1.71 に戻っちゃいましたね。


$ cvs diff pl/nmzidx.pl scripts/mknmz.in
Index: pl/nmzidx.pl
===================================================================
RCS file: /storage/cvsroot/namazu/pl/nmzidx.pl,v
retrieving revision 1.13.4.2
diff -r1.13.4.2 nmzidx.pl
143a144,148
>       my $output;
>
>         ($output) = split(/\x00|\n/, shift);
>         $output .= "\n";
>
145c150
<         $self->{'body'}->print(shift);
---
>         $self->{'body'}->print($output);
Index: scripts/mknmz.in
===================================================================
RCS file: /storage/cvsroot/namazu/scripts/mknmz.in,v
retrieving revision 1.85.4.38
diff -r1.85.4.38 mknmz.in
692c692,694
<           $output .= "\n";
---
>           my $data;
>           ($data) = split(/\x00|\n/, $output);
>           $output = $data . "\n";
-- 
=====================================================================
寺西 忠勝(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