[#14850] str[re, -1] raises NoMemoryError — nobu.nakada@...
なかだです。
6 messages
2001/10/03
[#14888] perl6 apocalypse 3 — nobu.nakada@...
なかだです。
7 messages
2001/10/04
[#14903] Re: [rubyist:0825] Re: Thread — nobu.nakada@...
なかだです。
8 messages
2001/10/09
[#14909] ext/socket h_addr_list — WATANABE Tetsuya <tetsu@...>
渡辺哲也です。
9 messages
2001/10/11
[#14922] alias $gvar — Koji Arai <JCA02266@...>
新井です。
19 messages
2001/10/14
[#14941] Re: alias $gvar
— matz@... (Yukihiro Matsumoto)
2001/10/16
まつもと ゆきひろです
[#14924] Re: alias $gvar
— nobu.nakada@...
2001/10/14
なかだです。
[#14932] Re: alias $gvar
— nobu.nakada@...
2001/10/15
なかだです。
[#14934] Re: alias $gvar
— Koji Arai <JCA02266@...>
2001/10/15
新井です。
[#14942] [BUG] SEGV: module_eval — Satoru Takabayashi <satoru@...>
こんなことする方が悪いという気がしますが、次のコードを実行す
5 messages
2001/10/16
[#14961] [PATCH] Marshal.load/dump — nobu.nakada@...
なかだです。
9 messages
2001/10/18
[#14962] alias var and trace_var — "K.Kosako" <kosako@...>
新井さんの指摘から、中田さんのパッチで
12 messages
2001/10/19
[#14963] Re: alias var and trace_var
— nobu.nakada@...
2001/10/19
なかだです。
[#14965] Re: alias var and trace_var
— "K.Kosako" <kosako@...>
2001/10/19
nobu.nakada@nifty.ne.jpさんの
[#14967] Re: alias var and trace_var
— nobu.nakada@...
2001/10/19
なかだです。
[#14971] Re: alias var and trace_var
— "K.Kosako" <kosako@...>
2001/10/22
nobu.nakada@nifty.ne.jpさんの
[#14984] [PATCH] stack overflow while GC marking. — nobu.nakada@...
なかだです。
7 messages
2001/10/23
[#14987] tracer.rb — keiju@... (Keiju ISHITSUKA)
けいじゅ@日本ラショナルソフトウェアです.
5 messages
2001/10/23
[#14998] TCPSocket.gethostbyname で Segmentation fault — tomohiko machida <machida@...>
はじめまして。
4 messages
2001/10/25
[#15001] finalizer problem — keiju@... (Keiju ISHITSUKA)
けいじゅ@日本ラショナルソフトウェアです.
3 messages
2001/10/25
[#15006] Re: eval.c (rb_stack_check): prohibit recursive raising error — WATANABE Hirofumi <eban@...>
わたなべです。
13 messages
2001/10/26
[#15008] Re: eval.c (rb_stack_check): prohibit recursive raising error
— Shugo Maeda <shugo@...>
2001/10/26
前田です。
[#15207] Re: eval.c (rb_stack_check): prohibit recursive raising error
— nobu.nakada@...
2001/11/19
なかだです。
[#15209] Re: eval.c (rb_stack_check): prohibit recursive raising error
— matz@... (Yukihiro Matsumoto)
2001/11/19
まつもと ゆきひろです
[#15210] Re: eval.c (rb_stack_check): prohibit recursive raising error
— nobu.nakada@...
2001/11/19
なかだです。
[#15211] Re: eval.c (rb_stack_check): prohibit recursive raising error
— matz@... (Yukihiro Matsumoto)
2001/11/19
まつもと ゆきひろです
[#15212] Re: eval.c (rb_stack_check): prohibit recursive raising error
— nobu.nakada@...
2001/11/19
なかだです。
[#15214] Re: eval.c (rb_stack_check): prohibit recursive raising error
— matz@... (Yukihiro Matsumoto)
2001/11/19
まつもと ゆきひろです
[ruby-dev:14844] Re: custom marshal
From:
nobu.nakada@...
Date:
2001-10-02 12:27:14 UTC
List:
ruby-dev #14844
なかだです。
At Tue, 2 Oct 2001 19:28:43 +0900,
Tanaka Akira <akr@m17n.org> wrote:
> えぇと、ruby-dev:14835 のなかださんのパッチをあてる前には
> ArgumentError であったであろうことには同意します。すでに環境がないので
> 確認したわけではありませんが。
>
> ruby-dev:14837 で core を吐くと述べたのは、ruby-dev:14835 のなかださ
> んのパッチをあてた後、marshal.c:1.45 でのはなしです。
>
> marshal.c:1.45 でも core を吐きませんか?
落ちました。そうか、Hash < Objectだからあれじゃダメか。あそこ
でチェックすべきなのは継承関係じゃなくて、むしろ内部的な整合性
を保っているかどうか、じゃないとまずいのかな。しかし、cのインス
タンスが具体的に何(T_*)になるかって作ってみなけりゃ分からないし、
どうしたものやら。
# 汚ひ…。
Index: marshal.c
===================================================================
RCS file: /cvs/ruby/src/ruby/marshal.c,v
retrieving revision 1.45
diff -u -2 -p -r1.45 marshal.c
--- marshal.c 2001/10/01 23:28:57 1.45
+++ marshal.c 2001/10/02 12:25:11
@@ -771,4 +771,42 @@ r_ivar(obj, arg)
}
+static int
+match_type(c, v)
+ VALUE c, v;
+{
+ static VALUE c2t[T_MASK+1];
+ static ID eqq, le;
+ const VALUE *p;
+
+ if (!eqq) {
+ eqq = rb_intern("===");
+ le = rb_intern("<=");
+ }
+ if (BUILTIN_TYPE(v) != T_OBJECT || RTEST(rb_funcall(rb_cStruct, eqq, 1, v))) {
+ return RTEST(rb_funcall(c, '<', 1, RBASIC(v)->klass));
+ }
+
+ if (!c2t[0]) {
+ int i = 0;
+ c2t[i++] = rb_cClass;
+ c2t[i++] = rb_cClass;
+ c2t[i++] = rb_cModule;
+ c2t[i++] = rb_cFloat;
+ c2t[i++] = rb_cString;
+ c2t[i++] = rb_cRegexp;
+ c2t[i++] = rb_cHash;
+ c2t[i++] = rb_cStruct;
+ c2t[i++] = rb_cBignum;
+ c2t[i++] = rb_cIO;
+ c2t[i++] = rb_cData;
+ c2t[i++] = rb_const_get(0, rb_intern("MatchData"));
+ }
+ for (p = c2t; *p; ++p) {
+ if (RTEST(rb_funcall(c, le, 1, *p)))
+ return Qfalse;
+ }
+ return Qtrue;
+}
+
static VALUE
r_object(arg)
@@ -798,6 +836,5 @@ r_object(arg)
VALUE c = rb_path2class(r_unique(arg));
v = r_object(arg);
- if (rb_special_const_p(v) ||
- !RTEST(rb_funcall(c, '<', 1, RBASIC(v)->klass))) {
+ if (rb_special_const_p(v) || !match_type(c, v)) {
rb_raise(rb_eArgError, "dump format error (user class)");
}
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦