[前][次][番号順一覧][スレッド一覧]

ruby-changes:1932

From: ko1@a...
Date: 10 Sep 2007 01:23:34 +0900
Subject: [ruby-changes:1932] matz - Ruby:r13423 (trunk): * marshal.c (r_object0): struct allocation first to check if a

matz	2007-09-10 01:23:27 +0900 (Mon, 10 Sep 2007)

  New Revision: 13423

  Modified files:
    trunk/ChangeLog
    trunk/marshal.c

  Log:
    * marshal.c (r_object0): struct allocation first to check if a
      class is a struct.  compatibility check should come next.

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=13423&r2=13422
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/marshal.c?r1=13423&r2=13422

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 13422)
+++ ChangeLog	(revision 13423)
@@ -1,3 +1,8 @@
+Mon Sep 10 01:21:23 2007  Yukihiro Matsumoto  <matz@r...>
+
+	* marshal.c (r_object0): struct allocation first to check if a
+	  class is a struct.  compatibility check should come next.
+
 Mon Sep 10 01:05:25 2007  Yukihiro Matsumoto  <matz@r...>
 
 	* range.c (range_step): fixed integer overflow.  [ruby-dev:31763]
Index: marshal.c
===================================================================
--- marshal.c	(revision 13422)
+++ marshal.c	(revision 13423)
@@ -1254,18 +1254,18 @@
 	    ID slot;
 
 	    klass = path2class(r_unique(arg));
-	    mem = rb_struct_s_members(klass);
 	    len = r_long(arg);
 
+            v = rb_obj_alloc(klass);
+	    if (TYPE(v) != T_STRUCT) {
+		rb_raise(rb_eTypeError, "class %s not a struct", rb_class2name(klass));
+	    }
+	    mem = rb_struct_s_members(klass);
             if (RARRAY_LEN(mem) != len) {
                 rb_raise(rb_eTypeError, "struct %s not compatible (struct size differs)",
                          rb_class2name(klass));
             }
 
-            v = rb_obj_alloc(klass);
-	    if (TYPE(v) != T_STRUCT) {
-		rb_raise(rb_eArgError, "dump format error");
-	    }
 	    v = r_entry(v, arg);
 	    values = rb_ary_new2(len);
 	    for (i=0; i<len; i++) {

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧]