aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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);