* marshal.c (r_object0): struct allocation first to check if a

class is a struct.  compatibility check should come next.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13423 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
matz 2007-09-09 16:23:27 +00:00
Родитель 3ee33a6dbc
Коммит c19fafb0a4
2 изменённых файлов: 10 добавлений и 5 удалений

Просмотреть файл

@ -1,3 +1,8 @@
Mon Sep 10 01:21:23 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
* 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@ruby-lang.org>
* range.c (range_step): fixed integer overflow. [ruby-dev:31763]

Просмотреть файл

@ -1254,18 +1254,18 @@ r_object0(struct load_arg *arg, int *ivp, VALUE extmod)
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++) {