まつもと ゆきひろです

In message "[ruby-list:9341] /\377/n =~ "\377""
    on 98/08/29, Wakou Aoyama <wakou / fsinet.or.jp> writes:

|青山です。
|
|p /\376/n =~ "\376"  # 0
|p /\377/n =~ "\377"  # false
|p /\378/n =~ "\378"  # 0
|
|これは勘違いでは無いですよね?
|1文字のせいかと思ったら \377 のせいだったのか。

そうですね.現象をまとめると

  \377とそれ以上

のリテラルが存在するとダメということのようです.\377とそれ以
上では原因は別のところにあったのですが,それはまあどうでも良
い話です.以下のパッチをお試し下さい.

--- regex.c	1998/08/27 03:55:28	1.1.1.2.2.30
+++ regex.c	1998/08/31 06:34:39
@@ -1899,3 +1899,3 @@
 	      p += numlen;
-	      if (current_mbctype && c > 0x7f)
+	      if (c > 0x7f)
 		  c1 = 0xff;
@@ -1920,6 +1920,6 @@
 		      p = p_save;
-		      c = scan_oct(p_save, 3, &numlen);
+		      c = scan_oct(p_save, 3, &numlen) & 0xff;
 		      p = p_save + numlen;
 		      c1 = 0;
-		      if (current_mbctype && c > 0x7f)
+		      if (c > 0x7f)
 			  c1 = 0xff;
@@ -2201,5 +2201,2 @@
 
-  if (blen < llen)
-    return 0;
-
   c = *little;
@@ -2207,2 +2204,3 @@
     c = *++little;
+    llen--;
     fescape = 1;