diff options
-rw-r--r-- | io.c | 3 | ||||
-rw-r--r-- | test/ruby/test_io_m17n.rb | 14 |
2 files changed, 17 insertions, 0 deletions
@@ -5970,7 +5970,10 @@ static int io_strip_bom(VALUE io) { VALUE b1, b2, b3, b4; + rb_io_t *fptr; + GetOpenFile(io, fptr); + if (!(fptr->mode & FMODE_READABLE)) return 0; if (NIL_P(b1 = rb_io_getbyte(io))) return 0; switch (b1) { case INT2FIX(0xEF): diff --git a/test/ruby/test_io_m17n.rb b/test/ruby/test_io_m17n.rb index ccb124a46b..8ba34845fa 100644 --- a/test/ruby/test_io_m17n.rb +++ b/test/ruby/test_io_m17n.rb @@ -2168,6 +2168,20 @@ EOT assert_nil(enc) end + def test_bom_non_reading + with_tmpdir { + enc = nil + assert_nothing_raised(IOError) { + open("test", "w:bom|utf-8") {|f| + enc = f.external_encoding + f.print("abc") + } + } + assert_equal(Encoding::UTF_8, enc) + assert_equal("abc", File.binread("test")) + } + end + def test_cbuf with_tmpdir { fn = "tst" |