Namazu-devel-ja(旧)


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

「idxnameがwなどで終わる場合ページリストに問題」の応急対処法 (namazu-bugs-ja#52)



Full_Name: Akihiro Sagawa
Version: 2.0.5
OS: Linux
Submission from: 203-174-70-43.data-hotel.net (203.174.70.43)


Re: INCOMMING/44

output.cにあるprint_query関数内の462行目で呼ばれている
nmz_strprefixcmp関数の仕様が問題のようです。

このnmz_strprefixcmp (util.cで定義) は引数を2つ取り、
*短い方の文字列の長さ*の分だけ比較をします。

print_query関数では、
QUERY_STRING(qa)の先頭から1文字ずつずらして"whence="を検索する処理を
このnmz_strprefix関数で行っています。

はじめのころは、QUERY_STRINGの文字列が"whence="に比べ長いため、
"whence="をQUERY_STRINGの先頭から探していくという意図した動作をします。

しかし、ポインタを進めるうちQUERY_STRINGの残りが、"whence="よりも短くなると、
"whence="の中から、QUERY_STRINGの残りを探すという動作に*逆転*し、
末尾のw や wh が、whence〜に置き換わってしまうようです。

そこで、strncmpを用いこの現象を解決するための一時的なパッチを添付します。
私の試した範囲内ではこの修正による不具合はなさそうです。

他にもこの逆転現象が起こる可能性があるので、
参考していただければ幸いです。

% diff -u output.c.orig output.c
--- output.c.orig       Thu Sep 14 17:49:28 2000
+++ output.c    Wed Apr 18 15:38:18 2001
@@ -458,7 +458,7 @@
 {
     int foo = 0;
     while (*qs) {
-       if (nmz_strprefixcmp(qs, "whence=") == 0) {
+       if (strncmp(qs, "whence=", strlen("whence=")) == 0) {
            foo = 1;
            printf("whence=%d", w);
            for (qs += strlen("whence="); isdigit(*qs); qs++);