[ruby-dev:31718] Re: [BUG] non-initialized struct

From: "U.Nakamura" <usa@...>
Date: 2007-09-03 02:07:28 UTC
List: ruby-dev #31718
こんにちは、なかむら(う)です。

In message "[ruby-dev:31709] [BUG] non-initialized struct"
    on Sep.02,2007 14:49:01, <akr@fsij.org> wrote:
| 以下のようにすると [BUG] が出ます。
| 
| % ./ruby -ve '
| S = Struct.new(:a)
| s = Marshal.dump(S.new(1))
| class Object
|   remove_const :S
| end
| class S
| end
| p Marshal.load(s)'

1.8でも同様なのでとりあえず1.8で見てみましたが、こんな感じで
しょうか?
# メッセージはなんか代案求む

Index: marshal.c
===================================================================
--- marshal.c	(revision 13339)
+++ marshal.c	(working copy)
@@ -1198,6 +1198,8 @@ r_object0(arg, proc, ivp, extmod)
 	    ID slot;
 
 	    klass = path2class(r_unique(arg));
+	    if (TYPE(klass) != T_STRUCT)
+		rb_raise(rb_eArgError, "%s is not a struct", rb_class2name(klass));
 	    mem = rb_struct_s_members(klass);
 	    if (mem == Qnil) {
 		rb_raise(rb_eTypeError, "uninitialized struct");

それでは。
-- 
U.Nakamura <usa@garbagecollect.jp>



In This Thread