aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-08-18 16:04:09 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-08-18 16:04:09 +0000
commitd8892979334d88c19dddd18c6717b69766d4888e (patch)
treea9a9192c6d6aacf439cf1c253954025b00482ddb
parent93ad576b0511ee435c01bd92e31d625d29c2c22e (diff)
downloadruby-d8892979334d88c19dddd18c6717b69766d4888e.tar.gz
* 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
-rw-r--r--ChangeLog5
-rw-r--r--io.c18
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 <akr@fsij.org>
+
+ * 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 <akr@fsij.org>
* 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);