summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--io.c10
2 files changed, 13 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 03468dc571..17220f5ae5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Thu May 29 22:29:39 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * io.c (argf_external_encoding, argf_internal_encoding): fix SEGV by
+ ARGF.external_encoding.
+
Wed May 28 18:05:28 2008 Akinori MUSHA <knu@iDaemons.org>
* array.c (rb_ary_nitems, Init_Array): Axe Array#nitems().
diff --git a/io.c b/io.c
index 0b4b4b64b2..e4a0c21c19 100644
--- a/io.c
+++ b/io.c
@@ -6942,13 +6942,19 @@ rb_io_set_encoding(int argc, VALUE *argv, VALUE io)
static VALUE
argf_external_encoding(VALUE argf)
{
- return rb_io_external_encoding(current_file);
+ if (!RTEST(current_file)) {
+ return rb_enc_from_encoding(rb_default_external_encoding());
+ }
+ return rb_io_external_encoding(rb_io_check_io(current_file));
}
static VALUE
argf_internal_encoding(VALUE argf)
{
- return rb_io_internal_encoding(current_file);
+ if (!RTEST(current_file)) {
+ return rb_enc_from_encoding(rb_default_external_encoding());
+ }
+ return rb_io_internal_encoding(rb_io_check_io(current_file));
}
static VALUE