[#10793] 今度こそ (patch of the ruby-1.4.6 for NT4.0&VC4.0 on DEC Alpha.) — kou@...1609.sip.eee.yamaguchi-u.ac.jp (Koichi Okada)

岡田です。

10 messages 2000/09/01

[#10920] SIGINT on windows — "Nobuyoshi.Nakada" <nobu.nakada@...>

なかだです。

17 messages 2000/09/14
[#11077] Re: SIGINT on windows — matz@... (Yukihiro Matsumoto) 2000/09/27

まつもと ゆきひろです

[#10944] dummy DLL on Windows — "Nobuyoshi.Nakada" <nobu.nakada@...>

なかだです。

19 messages 2000/09/18
[#10955] Re: dummy DLL on Windows — WATANABE Hirofumi <eban@...> 2000/09/19

わたなべです.

[#10963] Re: dummy DLL on Windows — "Nobuyoshi.Nakada" <nobu.nakada@...> 2000/09/19

なかだです。

[#10964] Re: dummy DLL on Windows — WATANABE Hirofumi <eban@...> 2000/09/19

わたなべです.

[#10978] [PATCH] require in require — "Nobuyoshi.Nakada" <nobu.nakada@...>

なかだです。

15 messages 2000/09/20

[#10985] httphead.rb proxy version problem — Katsuyuki Komatsu <komatsu@...>

小松です.

16 messages 2000/09/20
[#10989] Re: httphead.rb proxy version problem — Minero Aoki <aamine@...> 2000/09/20

あおきです。

[ruby-dev:10829] [BUG] re_search with range

From: Minero Aoki <aamine@...>
Date: 2000-09-04 13:42:27 UTC
List: ruby-dev #10829
あおきです。

String#index に範囲の引数を追加しようと思っていろいろやってたら
バグ発見したみたいです。range を小さくしてマッチするより前に
止めるようにしても、range をつきぬけてマッチしてしまいます。
挙動は添付のプログラムで確認しました。いくつか pos と range を
変えてこのプログラムを実行した結果も以下にのせます。

("abcdef" に /def/ をマッチさせているので
 インデックス 3 でマッチする)

pos=3   range=2   ret=3
pos=3   range=1   ret=3
pos=3   range=0   ret=3

pos=2   range=2   ret=3
pos=2   range=1   ret=3
pos=2   range=0   ret=-1

pos=1   range=2   ret=3
pos=1   range=1   ret=3      (×)
pos=1   range=0   ret=-1

pos=0   range=2   ret=3      (×) 
pos=0   range=1   ret=3      (×)
pos=0   range=0   ret=-1

-------------------------------------------------------------------
あおきみねろう

#include <stdio.h>
#include "ruby.h"
#include "regex.h"
#include "re.h"

int
main(argc, argv)
    int argc;
    char **argv;
{
    char *str = "abcdefg";
    char *sub = "def";
    struct re_pattern_buffer *re;
    int ret;
    int pos;
    int range;

    if (argc != 3) {
        puts("# of args must be 2");
        exit(1);
    }
    pos = atoi(argv[1]);
    range = atoi(argv[2]);

    re = malloc(sizeof(struct re_pattern_buffer));
    memset(re, 0, sizeof(struct re_pattern_buffer));
    re->buffer = malloc(16);
    re->allocated = 16;
    re->fastmap = malloc(256);
    re_compile_pattern(sub, strlen(sub), re);

    ret = re_search(re, str, strlen(str), pos, range, 0);
    printf("pos=%-3d range=%-3d ret=%-3d\n", pos, range, ret);

    return 0;
}

In This Thread

Prev Next