summaryrefslogtreecommitdiffstats
path: root/marshal.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-09-29 08:17:48 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-09-29 08:17:48 +0000
commitee2c93e8004437cc10ad642439adc11dfae5a0f4 (patch)
treeadbd40c0c5715c59ec92a661eed4a4df6eaa4acf /marshal.c
parente37a2ac7bcfdf77ec637f26292c234cc3c051a12 (diff)
downloadruby-ee2c93e8004437cc10ad642439adc11dfae5a0f4.tar.gz
ruby-ee2c93e8004437cc10ad642439adc11dfae5a0f4.tar.xz
ruby-ee2c93e8004437cc10ad642439adc11dfae5a0f4.zip
* marshal.c (r_leave): move proc invocation from r_entry() to
avoid potential crash. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@13567 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'marshal.c')
-rw-r--r--marshal.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/marshal.c b/marshal.c
index f4cc37942..626a2d078 100644
--- a/marshal.c
+++ b/marshal.c
@@ -1016,9 +1016,6 @@ r_entry(VALUE v, struct load_arg *arg)
if ((VALUE)real_obj != Qundef)
OBJ_TAINT((VALUE)real_obj);
}
- if (arg->proc) {
- v = rb_funcall(arg->proc, rb_intern("call"), 1, v);
- }
return v;
}
@@ -1035,7 +1032,10 @@ r_leave(VALUE v, struct load_arg *arg)
compat->loader(real_obj, v);
}
st_delete(arg->compat_tbl, &key, 0);
- return real_obj;
+ v = real_obj;
+ }
+ if (arg->proc) {
+ v = rb_funcall(arg->proc, rb_intern("call"), 1, v);
}
return v;
}