summaryrefslogtreecommitdiffstats
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
commit6f02881c9a8a39e38d9d3ceacb3fade89a9bc967 (patch)
treea9a9192c6d6aacf439cf1c253954025b00482ddb
parentf6b776a8b55eb97c826cd0fefc16142f469495f4 (diff)
downloadruby-6f02881c9a8a39e38d9d3ceacb3fade89a9bc967.tar.gz
ruby-6f02881c9a8a39e38d9d3ceacb3fade89a9bc967.tar.xz
ruby-6f02881c9a8a39e38d9d3ceacb3fade89a9bc967.zip
* io.c (rb_open_file): don't access argv[-1] by
File.allocate.instance_eval { initialize }. git-svn-id: http://svn.ruby-lang.org/repos/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 a107dc8b5..1b118814f 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 e4084e710..de5e6cf13 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);