From 0d077554723c88f06dd351d29edd2246693e0a42 Mon Sep 17 00:00:00 2001 From: matz Date: Sat, 29 Sep 2007 08:17:48 +0000 Subject: * marshal.c (r_leave): move proc invocation from r_entry() to avoid potential crash. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13567 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ marshal.c | 8 ++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index ac07a55523..b887f48b71 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Sat Sep 29 17:14:44 2007 Yukihiro Matsumoto + + * marshal.c (r_leave): move proc invocation from r_entry() to + avoid potential crash. + Sat Sep 29 12:28:08 2007 Tanaka Akira * bootstraptest/runner.rb (assert_normal_exit): new method. diff --git a/marshal.c b/marshal.c index f4cc37942e..626a2d0783 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; } -- cgit v1.2.3