2011年7月26日

[Namazu-devel-ja 1875] Re:stable-2-0 に 2.0.21 を反映

臼田です。

On 2011/07/26, at 7:46, Tasamasa Teranishi wrote:

>
> (2011/07/26 7:16), Takahiro Kambe wrote:
>>> 「//IGNORE」を使ってよいということであればとりあえず EUC-JP 不正
>> これは強く止めて欲しいところで、GNUなiconvであるところをconfigureなど

>> で確認した上でしていただきたいところです。
>
> はい。そうですね。
>
> それをするのも厄介なんで、(少なくとも本件で)GNU libiconv に依存する
> 形にはしたくないと思ってはいます。

HEADの 不正文字コードチェックについて
「//IGNORE」を使わない形にしてみました。

stable の check_eucjp を参考にさせてもらい
内部コードの utf-8 にする際にチェックをするように
しました。 Unicode の正規化とは関係なく utf-8 ならば
ftp://ftp.rfc-editor.org/in-notes/std/std63.txt
のなかに入るでしょうからここからはずれるものを空白に
置き換えています。
これで tests/ja-namazu-cgi-3 はクリアします。
diffをつけています。

name="nmzcodeconv.diff"
Content-Transfer-Encoding: 7bit

Index: nmz/codeconv.c
==================================================================RCS file: /storage/cvsroot/namazu/nmz/codeconv.c,v
retrieving revision 1.46
diff -u -r1.46 codeconv.c
--- nmz/codeconv.c 6 Jul 2011 11:18:10 -0000 1.46
+++ nmz/codeconv.c 26 Jul 2011 13:36:22 -0000
@@ -219,6 +219,198 @@
return external_encoding;
}

+static void
+check_utf8(uchar *s)
+{
+ int i;
+ size_t num;
+
+ num = strlen((char *)s);
+ i = 0;
+ while (i < num) {
+ if (s[i] >= 0x20 && s[i] <= 0x7e) {
+ i++;
+ }
+ else if (s[i] >= 0xc2 && s[i] <= 0xdf) {
+ if (i + 1 < num) {
+ if (s[i + 1] >= 0x80 && s[i + 1] <= 0xbf) {
+ i += 2;
+ }
+ else {
+ s[i++] = ' ';
+ s[i++] = ' ';
+ }
+ }
+ else {
+ s[i++] = ' ';
+ }
+ }
+ else if (s[i] == 0xe0) {
+ if (i + 2 < num) {
+ if (s[i + 1] >= 0xa0 && s[i + 1] <= 0xbf
+ && s[i + 2] >= 0x80 && s[i + 2] <= 0xbf) {
+ i += 3;
+ }
+ else {
+ s[i++] = ' ';
+ s[i++] = ' ';
+ s[i++] = ' ';
+ }
+ }
+ else if (i + 1 < num) {
+ s[i++] = ' ';
+ s[i++] = ' ';
+ }
+ else {
+ s[i++] = ' ';
+ }
+ }
+ else if (s[i] >= 0xe1 && s[i] <= 0xec) {
+ if (i + 2 < num) {
+ if (s[i + 1] >= 0x80 && s[i + 1] <= 0xbf
+ && s[i + 2] >= 0x80 && s[i + 2] <= 0xbf) {
+ i += 3;
+ }
+ else {
+ s[i++] = ' ';
+ s[i++] = ' ';
+ s[i++] = ' ';
+ }
+ }
+ else if (i + 1 < num) {
+ s[i++] = ' ';
+ s[i++] = ' ';
+ }
+ else {
+ s[i++] = ' ';
+ }
+ }
+ else if (s[i] == 0xed) {
+ if (i + 2 < num) {
+ if (s[i + 1] >= 0x80 && s[i + 1] <= 0x9f
+ && s[i + 2] >= 0x80 && s[i + 2] <= 0xbf) {
+ i += 3;
+ }
+ else {
+ s[i++] = ' ';
+ s[i++] = ' ';
+ s[i++] = ' ';
+ }
+ }
+ else if (i + 1 < num) {
+ s[i++] = ' ';
+ s[i++] = ' ';
+ }
+ else {
+ s[i++] = ' ';
+ }
+ }
+ else if (s[i] >= 0xee && s[i] <= 0xef) {
+ if (i + 2 < num) {
+ if (s[i + 1] >= 0x80 && s[i + 1] <= 0xbf
+ && s[i + 2] >= 0x80 && s[i + 2] <= 0xbf) {
+ i += 3;
+ }
+ else {
+ s[i++] = ' ';
+ s[i++] = ' ';
+ s[i++] = ' ';
+ }
+ }
+ else if (i + 1 < num) {
+ s[i++] = ' ';
+ s[i++] = ' ';
+ }
+ else {
+ s[i++] = ' ';
+ }
+ }
+ else if (s[i] == 0xf0) {
+ if (i + 3 < num) {
+ if (s[i + 1] >= 0x90 && s[i + 1] <= 0xbf
+ && s[i + 2] >= 0x80 && s[i + 2] <= 0xbf
+ && s[i + 3] >= 0x80 && s[i + 3] <= 0xbf) {
+ i += 4;
+ }
+ else {
+ s[i++] = ' ';
+ s[i++] = ' ';
+ s[i++] = ' ';
+ s[i++] = ' ';
+ }
+ }
+ else if (i + 2 < num) {
+ s[i++] = ' ';
+ s[i++] = ' ';
+ s[i++] = ' ';
+ }
+ else if (i + 1 < num) {
+ s[i++] = ' ';
+ s[i++] = ' ';
+ }
+ else {
+ s[i++] = ' ';
+ }
+ }
+ else if (s[i] >= 0xf1 && s[i] <= 0xf3) {
+ if (i + 3 < num) {
+ if (s[i + 1] >= 0x80 && s[i + 1] <= 0xbf
+ && s[i + 2] >= 0x80 && s[i + 2] <= 0xbf
+ && s[i + 3] >= 0x80 && s[i + 3] <= 0xbf) {
+ i += 4;
+ }
+ else {
+ s[i++] = ' ';
+ s[i++] = ' ';
+ s[i++] = ' ';
+ s[i++] = ' ';
+ }
+ }
+ else if (i + 2 < num) {
+ s[i++] = ' ';
+ s[i++] = ' ';
+ s[i++] = ' ';
+ }
+ else if (i + 1 < num) {
+ s[i++] = ' ';
+ s[i++] = ' ';
+ }
+ else {
+ s[i++] = ' ';
+ }
+ }
+ else if (s[i] == 0xf4) {
+ if (i + 3 < num) {
+ if (s[i + 1] >= 0x80 && s[i + 1] <= 0x8f
+ && s[i + 2] >= 0x80 && s[i + 2] <= 0xbf
+ && s[i + 3] >= 0x80 && s[i + 3] <= 0xbf) {
+ i += 4;
+ }
+ else {
+ s[i++] = ' ';
+ s[i++] = ' ';
+ s[i++] = ' ';
+ s[i++] = ' ';
+ }
+ }
+ else if (i + 2 < num) {
+ s[i++] = ' ';
+ s[i++] = ' ';
+ s[i++] = ' ';
+ }
+ else if (i + 1 < num) {
+ s[i++] = ' ';
+ s[i++] = ' ';
+ }
+ else {
+ s[i++] = ' ';
+ }
+ }
+ else {
+ s[i++] = ' ';
+ }
+ }
+}

/*
*
@@ -275,9 +467,12 @@
{
if (nmz_is_lang_ja()) {
if (nmz_codeconv_jp(query, BUFSIZE)) {
+ check_utf8(query);
utf8_zen2han(query);
return;
- }
+ } else {
+ *(query) = '\0';
+ }
}
}

Index: tests/ja-namazu-cgi-3
==================================================================RCS file: /storage/cvsroot/namazu/tests/ja-namazu-cgi-3,v
retrieving revision 1.2
diff -u -r1.2 ja-namazu-cgi-3
--- tests/ja-namazu-cgi-3 22 Jul 2011 13:22:45 -0000 1.2
+++ tests/ja-namazu-cgi-3 26 Jul 2011 13:36:23 -0000
@@ -45,7 +45,7 @@
pwd=`pwd`
tmprc="$pwd/../src/.namazurc"
echo "Index ../tests/idx1" > $tmprc
-echo "Lang ja" >> $tmprc
+echo "Lang ja_JP.eucJP" >> $tmprc
duprcs
cd ../src

臼田幸生


_______________________________________________
Namazu-devel-ja mailing list
Namazu-devel-ja@xxxxx
http://www.namazu.org/cgi-bin/mailman/listinfo/namazu-devel-ja

投稿者 xml-rpc : 2011年7月26日 22:45
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/105220
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。