[#23332] to_str再考 — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

15 messages 2004/04/05

[#23380] [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

山本です。

17 messages 2004/04/15
[#23400] Re: [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/04/16

山本です。落ちる場所がわかりました。

[#23402] Re: [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/04/16

山本です。

[#23403] Re: [SEGV] make test-all (bccwin32 ruby1.9.0) — nobu.nakada@... 2004/04/16

なかだです。

[#23405] Re: [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/04/16

山本です。

[#23407] Re: [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/04/16

山本です。

[ruby-dev:23431] regexp match stack limit over in Ruby 1.9

From: <kkosako@...>
Date: 2004-04-23 02:33:48 UTC
List: ruby-dev #23431
正規表現のスタック制限オーバーのエラーを
正しく処理していませんでした。

修正前:
$ ruby -e 'p " "*327679 =~ / */'
nil

修正後:
$ ruby -e 'p " "*327679 =~ / */'
-e:1: match-stack limit over: / */ (RegexpError)

スタック制限は現在500000個にしているのですが、
この値を可変にするのは対応可能です。
(500000はバイト数ではなく個数。x86なら多分一個20バイト)
--
小迫@出向中

--- re.c.orig	2004-04-14 13:06:25.000000000 +0900
+++ re.c	2004-04-23 11:09:23.000000000 +0900
@@ -920,14 +920,16 @@ rb_reg_search(re, str, pos, reverse)
     if (FL_TEST(re, KCODE_FIXED))
 	kcode_reset_option();
 
-    if (result == -2) {
-	rb_reg_raise(RREGEXP(re)->str, RREGEXP(re)->len,
-		     "Stack overflow in regexp matcher", re);
-    }
-
     if (result < 0) {
-	rb_backref_set(Qnil);
-	return result;
+      if (result == ONIG_MISMATCH) {
+        rb_backref_set(Qnil);
+        return result;
+      }
+      else {
+        char err[ONIG_MAX_ERROR_MESSAGE_LEN];
+        re_error_code_to_str((UChar* )err, result);
+        rb_reg_raise(RREGEXP(re)->str, RREGEXP(re)->len, err, 0);
+      }
     }
 
     match = rb_backref_get();

In This Thread

Prev Next