summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--marshal.c8
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 <matz@ruby-lang.org>
+
+ * marshal.c (r_leave): move proc invocation from r_entry() to
+ avoid potential crash.
+
Sat Sep 29 12:28:08 2007 Tanaka Akira <akr@fsij.org>
* 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;
}