diff options
-rw-r--r-- | io.c | 4 | ||||
-rw-r--r-- | test/ruby/test_io_m17n.rb | 10 |
2 files changed, 14 insertions, 0 deletions
@@ -8334,6 +8334,10 @@ rb_io_set_encoding_by_bom(VALUE io) if (fptr->encs.enc2) { rb_raise(rb_eArgError, "encoding conversion is set"); } + else if (fptr->encs.enc && fptr->encs.enc != rb_ascii8bit_encoding()) { + rb_raise(rb_eArgError, "encoding is set to %s already", + rb_enc_name(fptr->encs.enc)); + } if (!io_set_encoding_by_bom(io)) return Qnil; return rb_enc_from_encoding(fptr->encs.enc); } diff --git a/test/ruby/test_io_m17n.rb b/test/ruby/test_io_m17n.rb index 022ff330b5..e5b0ef0585 100644 --- a/test/ruby/test_io_m17n.rb +++ b/test/ruby/test_io_m17n.rb @@ -2102,6 +2102,9 @@ EOT File.open(path, "rb") {|f| assert_equal(Encoding.find(name), f.set_encoding_by_bom) } + File.open(path, "rb", encoding: "iso-8859-1") {|f| + assert_raise(ArgumentError) {f.set_encoding_by_bom} + } } end end @@ -2114,6 +2117,10 @@ EOT bug3407 = '[ruby-core:30641]' result = File.read(path, encoding: 'BOM|UTF-8') assert_equal("a", result.b, bug3407) + + File.open(path, "rb", encoding: "iso-8859-1") {|f| + assert_raise(ArgumentError) {f.set_encoding_by_bom} + } } end @@ -2148,6 +2155,9 @@ EOT File.open(path, "rb") {|f| assert_nil(f.set_encoding_by_bom) } + File.open(path, "rb", encoding: "iso-8859-1") {|f| + assert_raise(ArgumentError) {f.set_encoding_by_bom} + } } end |