diff options
author | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-05-08 08:47:26 +0000 |
---|---|---|
committer | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-05-08 08:47:26 +0000 |
commit | 4834aa5307d8c4750b7598b6b2ef8728d01d98b4 (patch) | |
tree | 3d4339c6e04d7cd902072637e9d7fc25a60e5573 | |
parent | ce573f3166d8b80d6a0b9c6c027b0c5e10f05c4b (diff) | |
download | ruby-4834aa5307d8c4750b7598b6b2ef8728d01d98b4.tar.gz |
* io.c (rb_io_ext_int_to_encs): ignore internal encoding if external
encoding is ASCII-8BIT. [Bug #8342]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@40610 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | io.c | 8 | ||||
-rw-r--r-- | test/ruby/test_io_m17n.rb | 36 |
4 files changed, 51 insertions, 2 deletions
@@ -1,3 +1,8 @@ +Wed May 8 17:43:55 2013 NARUSE, Yui <naruse@ruby-lang.org> + + * io.c (rb_io_ext_int_to_encs): ignore internal encoding if external + encoding is ASCII-8BIT. [Bug #8342] + Wed May 8 13:49:38 2013 NARUSE, Yui <naruse@ruby-lang.org> * ext/json/generator/generator.c (isArrayOrObject): cast char to @@ -39,6 +39,10 @@ with all sufficient information, see the ChangeLog file. === Core classes compatibility issues (excluding feature bug fixes) +* IO + * incompatible changes: + * open ignore internal encoding if external encoding is ASCII-8BIT. + * Module#ancestors The ancestors of a singleton class now include singleton classes, @@ -4868,9 +4868,13 @@ rb_io_ext_int_to_encs(rb_encoding *ext, rb_encoding *intern, rb_encoding **enc, ext = rb_default_external_encoding(); default_ext = 1; } - if (intern == NULL && ext != rb_ascii8bit_encoding()) - /* If external is ASCII-8BIT, no default transcoding */ + if (ext == rb_ascii8bit_encoding()) { + /* If external is ASCII-8BIT, no transcoding */ + intern = NULL; + } + else if (intern == NULL) { intern = rb_default_internal_encoding(); + } if (intern == NULL || intern == (rb_encoding *)Qnil || (!(fmode & FMODE_SETENC_BY_BOM) && (intern == ext))) { /* No internal encoding => use external + no transcoding */ diff --git a/test/ruby/test_io_m17n.rb b/test/ruby/test_io_m17n.rb index ec2086186c..ac3b8eaa1e 100644 --- a/test/ruby/test_io_m17n.rb +++ b/test/ruby/test_io_m17n.rb @@ -105,6 +105,42 @@ EOT } end + def test_open_r_ascii8bit + with_tmpdir { + generate_file('tmp', "") + EnvUtil.with_default_external(Encoding::ASCII_8BIT) do + EnvUtil.with_default_internal(Encoding::UTF_8) do + open("tmp", "r") {|f| + assert_equal(Encoding::ASCII_8BIT, f.external_encoding) + assert_equal(nil, f.internal_encoding) + } + open("tmp", "r:ascii-8bit") {|f| + assert_equal(Encoding::ASCII_8BIT, f.external_encoding) + assert_equal(nil, f.internal_encoding) + } + open("tmp", "r:ascii-8bit:utf-16") {|f| + assert_equal(Encoding::ASCII_8BIT, f.external_encoding) + assert_equal(nil, f.internal_encoding) + } + end + EnvUtil.with_default_internal(nil) do + open("tmp", "r") {|f| + assert_equal(Encoding::ASCII_8BIT, f.external_encoding) + assert_equal(nil, f.internal_encoding) + } + open("tmp", "r:ascii-8bit") {|f| + assert_equal(Encoding::ASCII_8BIT, f.external_encoding) + assert_equal(nil, f.internal_encoding) + } + open("tmp", "r:ascii-8bit:utf-16") {|f| + assert_equal(Encoding::ASCII_8BIT, f.external_encoding) + assert_equal(nil, f.internal_encoding) + } + end + end + } + end + def test_open_r_enc_in_opt with_tmpdir { generate_file('tmp', "") |