From: Yusuke ENDOH Date: 2008-05-19T22:47:30+09:00 Subject: [ruby-dev:34761] Re: [ruby-cvs:23717] Ruby:r16477 (trunk): * regparse.c (PINC): use optimized enclen() instead of 遠藤と申します。 08/05/19 に SASADA Koichi さんは書きました: > この変更から,開発用マシン(x86 linux on vmware)で > > ('A'..'Z').each{|w| > eval("p(/#{w}/ =~ '#{w}')") > } > > > が 全部 nil を返すようになってしまいました(文字全般がヒットしな > い?).しかし,別の amd64 マシンでは問題なく動きます. memcmp の長さに 0 を指定すると未定義になるという噂です。 # 知らなかった。 Index: regexec.c =================================================================== --- regexec.c (revision 16481) +++ regexec.c (working copy) @@ -2765,7 +2765,7 @@ if (*s == *target) { p = s + 1; t = target + 1; - if (memcmp(t, p, target_end - t) == 0) + if (target_end == t || memcmp(t, p, target_end - t) == 0) return s; } s += n; @@ -2776,7 +2776,7 @@ if (*s == *target) { p = s + 1; t = target + 1; - if (memcmp(t, p, target_end - t) == 0) + if (target_end == t || memcmp(t, p, target_end - t) == 0) return s; } s += enclen(enc, s, end); -- Yusuke ENDOH