小松です。

1.5.4のre.cのrb_reg_initialize()で、re->strの代わりに
re->ptrをfree()しているみたいです。

ここを変えるとre->strの初期化が足りなくて落ちるので
いくつか初期化を追加しました。

あと、rb_str_cicmp()はもう消してもいいですよね?

--- ruby-1.5.4.dist/re.c Thu Jun 22 17:29:46 2000 +++ ruby-1.5.4/re.c Sat Jul 1 09:30:06 2000 @@ -90,8 +90,2 @@ rb_memcmp(p1, p2, len) -int -rb_str_cicmp(str1, str2) - VALUE str1, str2; -{ -} - #define REG_CASESTATE FL_USER0 @@ -832,3 +826,3 @@ rb_reg_initialize(obj, s, len, options) if (re->ptr) re_free_pattern(re->ptr); - if (re->str) free(re->ptr); + if (re->str) free(re->str); re->ptr = 0; @@ -881,3 +875,3 @@ rb_reg_new(s, len, options) - re->ptr = 0; re->len = 0; + re->ptr = 0; re->len = 0; re->str = 0; rb_reg_initialize(re, s, len, options); @@ -1038,3 +1032,3 @@ rb_reg_s_new(argc, argv, klass) OBJSETUP(re, klass, T_REGEXP); - re->ptr = 0; re->len = 0; + re->ptr = 0; re->len = 0; re->str = 0; rb_obj_call_init((VALUE)re, argc, argv); @@ -1148,3 +1142,3 @@ rb_reg_clone(re) rb_reg_check(re); - clone->ptr = 0; clone->len = 0; + clone->ptr = 0; clone->len = 0; clone->str = 0; rb_reg_initialize(clone, RREGEXP(re)->str, RREGEXP(re)->len, -- 小松克行 / Katsuyuki Komatsu <komatsu / sarion.co.jp>