io.c: read BOM only for reading

* io.c (io_strip_bom): just abandon detecting UTF encoding by BOM
  unless opened for reading.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60884 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2017-11-23 07:10:56 +00:00
parent dee6a91002
commit 1046eae781
2 changed files with 17 additions and 0 deletions

3
io.c
View File

@ -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):

View File

@ -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"