[#29736] [提案] Kernel#p をもっと便利に — "Yusuke ENDOH" <mame@...>

遠藤侑介と申します。

19 messages 2006/11/01

[#29765] merge with YARV — SASADA Koichi <ko1@...>

 ささだです。

16 messages 2006/11/03

[#29767] 1.8 proposal of RUBY_PATCHLEVEL — URABE Shyouhei <root@...>

-----BEGIN PGP SIGNED MESSAGE-----

52 messages 2006/11/04
[#29771] Re: 1.8 proposal of RUBY_PATCHLEVEL — Shugo Maeda <shugo@...> 2006/11/04

前田です。

[#29925] ruby -v — Urabe Shyouhei <shyouhei@...>

卜部です。

28 messages 2006/11/24

[#29964] 1.8, 1.9, svn化, などなどのまとめ — "U.Nakamura" <usa@...>

こんにちは、なかむら(う)です。

15 messages 2006/11/28

[#29970] BUG: Incorrect handling of Ignorecase matching (regex.c of 1.8.5) — "きむらこういち" <hogemuta@...>

木村です。

15 messages 2006/11/28

[ruby-dev:29970] BUG: Incorrect handling of Ignorecase matching (regex.c of 1.8.5)

From: "きむらこういち" <hogemuta@...>
Date: 2006-11-28 15:29:02 UTC
List: ruby-dev #29970
木村です。

2ちゃんねるのRubyスレで報告されていたのですが、1.8以前のregex
ルーチンの (?i) フラグの処理に問題があります。たとえば

  /(B|(?i)c)/ =~ 'B'

でマッチに失敗します。

これは検索の高速化のために作成している fastmap の生成時に
(?i) フラグを見つけた時点で「Ignorecase指定がされている」という
フラグ(下のパッチにも見えるRE_MAY_IGNORECASE)を立て
てしまうので、(?i)が見つかる以前にfastmapに登録した内容が
無効になってしまい、結果として検索に失敗する。というものです。

いろいろ考えてみたのですが、あまり広範囲に渡る修正は避ける
という方針で以下のようなパッチを作成してみました。

Ignorecase指定を見つけたら、それまでに登録したfastmapへの
情報を更新するようにしたものです。

バグの説明等でもっと詳細を知らせろということなら再度書きます
のでよろしくお願いします。なおす/なおさないの判断や、修正の
方針についてはお任せします。


--- regex.c.orig        2006-08-07 12:43:42.000000000 +0900
+++ regex.c     2006-11-28 23:31:32.274500000 +0900
@@ -2836,6 +2836,20 @@ re_compile_fastmap(bufp)
      case casefold_on:
       bufp->options |= RE_MAY_IGNORECASE;
       options |= RE_OPTION_IGNORECASE;
+          {
+              static found_casefold = 0;
+              if (!found_casefold) {
+                  unsigned char *p = (unsigned char*)fastmap;
+                  int i;
+                  for (i=0; i<=(1<<BYTEWIDTH); i++) {
+                      if (p[i]) {
+                          /* p[i] = 0; Do we need this line?*/
+                          p[translate[i]] = 1;
+                      }
+                  }
+                  found_casefold = 1;
+              }
+          }
       continue;

      case casefold_off:



-- 
木村浩一
 I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
 mail kbk at kt.rim.or.jp
 web  www.kt.rim.or.jp/~kbk/zakkicho/index.html

In This Thread

Prev Next