[#21225] Re: [ruby-cvs] ruby: * enum.c (inject_i): use rb_yield_values. — "U.Nakamura" <usa@...>

こんにちは、なかむら(う)です。

14 messages 2003/08/22
[#21227] Re: [ruby-cvs] ruby: * enum.c (inject_i): use rb_yield_values. — nobu.nakada@... 2003/08/22

なかだです。

[#21228] Re: [ruby-cvs] ruby: * enum.c (inject_i): use rb_yield_values. — matz@... (Yukihiro Matsumoto) 2003/08/22

まつもと ゆきひろです

[#21281] 大量メモリ消費攻撃に対する対応 — Hidetoshi NAGAI <nagai@...>

永井@知能.九工大です.

16 messages 2003/08/29
[#21285] Re: 大量メモリ消費攻撃に対する対応 — matz@... (Yukihiro Matsumoto) 2003/08/29

まつもと ゆきひろです

[#21288] Re: 大量メモリ消費攻撃に対する対応 — Hidetoshi NAGAI <nagai@...> 2003/08/29

永井@知能.九工大です.

[#21306] Re: 大量メモリ消費攻撃に対する対応 — matz@... (Yukihiro Matsumoto) 2003/09/03

まつもと ゆきひろです

[ruby-dev:21227] Re: [ruby-cvs] ruby: * enum.c (inject_i): use rb_yield_values.

From: nobu.nakada@...
Date: 2003-08-22 15:50:58 UTC
List: ruby-dev #21227
なかだです。

At Fri, 22 Aug 2003 22:26:28 +0900,
U.Nakamura wrote:
> String#scanがブロックを伴うとき、SEGVします。
> # そのため、minirubyよりあとがビルドできなかったり。

で、これでもmake testが通らなかったりするわけですが、そもそも
rb_yield_splat()の意図はどういうものでしょうか。

[ruby-dev:21214]を読みかえして思ったんですが、ひょっとして 
"a".scan(/(.)/) {|x|p x} も "a".scan(/./) {|x|p x} 同様、"a"に
なるようにしようということでしょうか。


Index: enum.c
===================================================================
RCS file: /cvs/ruby/src/ruby/enum.c,v
retrieving revision 1.38
diff -u -2 -p -r1.38 enum.c
--- enum.c	22 Aug 2003 08:09:57 -0000	1.38
+++ enum.c	22 Aug 2003 15:28:44 -0000
@@ -500,5 +526,5 @@ each_with_index_i(val, memo)
     NODE *memo;
 {
-    rb_yield_values(val, INT2FIX(memo->u3.cnt));
+    rb_yield_values(2, val, INT2FIX(memo->u3.cnt));
     memo->u3.cnt++;
     return Qnil;
Index: eval.c
===================================================================
RCS file: /cvs/ruby/src/ruby/eval.c,v
retrieving revision 1.518
diff -u -2 -p -r1.518 eval.c
--- eval.c	22 Aug 2003 08:13:36 -0000	1.518
+++ eval.c	22 Aug 2003 15:14:39 -0000
@@ -4255,4 +4255,7 @@ rb_yield_splat(values)
     VALUE values;
 {
+    if (TYPE(values) != T_ARRAY) {
+	return rb_yield_0(values, 0, 0, Qfalse, Qfalse);
+    }
     if (RARRAY(values)->len == 0) {
 	return rb_yield_0(Qundef, 0, 0, Qfalse, Qfalse);


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread