ちょっとソースを読んでみました。それで気がついた事を書きます。
その前に、示してもらったパッチですが、

From: matz / netlab.co.jp (Yukihiro Matsumoto)
Subject: [ruby-dev:2800] Re: convert Perl's t/regexp.t to ruby
Date: Tue, 2 Jun 1998 11:22:28 +0900

> In message "[ruby-dev:2797] Re: convert Perl's t/regexp.t to ruby"
>     on 98/06/02, Inaba Hiroto <inaba / st.rim.or.jp> writes:

> |スタックサイズのチェックで失敗した場合は例外をあげるという仕様には
> |できないでしょうか?
> 
> もともとそういう仕様のつもりだったんですが,わたしのミスで例
> 外を発生させる条件が間違ってました.パッチです.
> 
> --- re.c	1998/06/01 04:23:40	1.1.1.2.2.23
> +++ re.c	1998/06/02 02:22:02
> @@ -439,3 +439,3 @@
>  
> -    if (start == -2) {
> +    if (result == -2) {
>  	reg_raise(RREGEXP(reg)->str, RREGEXP(reg)->len,

このパッチをあてると、reg_raiseが呼ばれるようになりましたが、その
reg_raiseで

    if (rb_in_eval)
	Raise(eRegxpError, "%s: %s", err, RSTRING(desc)->ptr);
    else
	Error("%s: %s", err, RSTRING(desc)->ptr);

としています。スクリプトを普通に実行している状況ではrb_in_evalは0になっ
ているようで、単にエラーメッセージを表示する事しかしません。

それではソースを見て気がついた事ですが、スタックサイズのチェックという
のはregex.cにあるPUSH_FAILURE_POINTマクロ中の

	if (len > re_max_failures * MAX_NUM_FAILURE_ITEMS)		\

だと思えます。この変数re_max_failuresの初期値は2000になっています。

このre_max_failuresを4000とかに増やすと、2000のとき失敗していた
/a{1,3201}/が成功します。

この変数にassignするコードがrubyのソース中に一箇所もないように見えます。

この変数の値をrubyスクリプトからassignできるようにする事には問題がある
でしょうか?(スレッド?)

ところで、本題ではありませんが、regex.cを読むと、実はrubyはPOSIXの
character classをサポートしているのですね。

  % ruby -e '"+-123abcxyz" =~ /[[:xdigit:]]+/ and p $&'
  "123abc"

マニュアルには触れられてないのですが。
--
			   稲葉 浩人 (inaba / st.rim.or.jp)