From d8892979334d88c19dddd18c6717b69766d4888e Mon Sep 17 00:00:00 2001 From: akr Date: Mon, 18 Aug 2008 16:04:09 +0000 Subject: * io.c (rb_open_file): don't access argv[-1] by File.allocate.instance_eval { initialize }. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@18698 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ io.c | 18 ++++++++++-------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index a107dc8b53..1b118814f9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Tue Aug 19 01:02:19 2008 Tanaka Akira + + * io.c (rb_open_file): don't access argv[-1] by + File.allocate.instance_eval { initialize }. + Tue Aug 19 00:56:01 2008 Tanaka Akira * re.c (rb_reg_inspect): don't raise for uninitialized Regexp. diff --git a/io.c b/io.c index e4084e7104..de5e6cf136 100644 --- a/io.c +++ b/io.c @@ -4461,14 +4461,16 @@ rb_open_file(int argc, VALUE *argv, VALUE io) int flags; unsigned int fmode; - opt = rb_check_convert_type(argv[argc-1], T_HASH, "Hash", "to_hash"); - if (!NIL_P(opt)) { - VALUE v; - v = rb_hash_aref(opt, sym_mode); - if (!NIL_P(v)) vmode = v; - v = rb_hash_aref(opt, sym_perm); - if (!NIL_P(v)) perm = v; - argc -= 1; + if (0 < argc) { + opt = rb_check_convert_type(argv[argc-1], T_HASH, "Hash", "to_hash"); + if (!NIL_P(opt)) { + VALUE v; + v = rb_hash_aref(opt, sym_mode); + if (!NIL_P(v)) vmode = v; + v = rb_hash_aref(opt, sym_perm); + if (!NIL_P(v)) perm = v; + argc -= 1; + } } rb_scan_args(argc, argv, "12", &fname, &vmode, &perm); -- cgit v1.2.3