From: Katsuyuki Komatsu Date: 1999-08-10T14:27:46+09:00 Subject: [ruby-dev:7596] Re: make test failure on sunos 小松です。 In the message of [ruby-dev:7560] Re: make test failure on sunos on 1999/8/8 18:19:24 Katsuyuki Komatsu wrote: |スクリプト (test.rb) の指定の仕方が絶対パスだと失敗して |相対パスだと通るという症状で、 |で作ったものはmake testが通ります。 ここの、絶対パス・相対パスというのは、$0のパス指定の 長さによって症状が変わることを意味しています。 念のため。 % uname -r -s SunOS 5.5.1 % ./ruby -v ruby 1.3.7 (1999-08-06) [sparc-solaris2.5.1] % ./ruby ../sample/./././././././././././test.rb …… end of test(test: 290) % ./ruby ../sample/././././././././././././test.rb …… not ok string & char 21 -- ../sample/././././././././././././test.rb:618 …… test: 290 failed 1 % それはともかく、どうやらregex.cの問題のようでp1が 開始位置より前にいってへんな所をアクセスしてしまうから らしいです。 で、Quick Hackはこんな感じですが、本来どうすべきかはわかりません。 ここに、 if (p1 < pstart) abort(); とかを入れてデバッグすればいいのかもしれませんが、 ちょっと私の能力を超えています。 --- regex.c-ruby-dev-7583 Mon Aug 9 13:03:26 1999 +++ regex.c Tue Aug 10 14:15:14 1999 @@ -3288,6 +3288,7 @@ re_match(bufp, string_arg, size, pos, re unsigned char *p1; /* Pointer to beyond end of buffer. */ + register unsigned char *pstart = p; register unsigned char *pend = p + bufp->used; unsigned num_regs = bufp->re_nsub; @@ -4085,7 +4086,7 @@ re_match(bufp, string_arg, size, pos, re EXTRACT_NUMBER_AND_INCR (mcnt, p1); p1 += mcnt; - if (p1 >= pend) break; + if (p1 < pstart || p1 >= pend) break; if (( is_a_jump_n && (enum regexpcode)*p1 == succeed_n) || (!is_a_jump_n && (enum regexpcode)*p1 == on_failure_jump)) { if (failed_paren) { -- 小松克行 / Katsuyuki Komatsu