From ddb2acbba60302201f01175f019d8ecd99934add Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Sun, 19 Jul 2020 16:08:03 +0900 Subject: [ruby/stringio] No compatibility check in US-ASCII case https://github.com/ruby/stringio/commit/59df1c8293 --- ext/stringio/stringio.c | 5 +++-- test/stringio/test_stringio.rb | 6 ++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/ext/stringio/stringio.c b/ext/stringio/stringio.c index 9ab8537ac1..d55af518c7 100644 --- a/ext/stringio/stringio.c +++ b/ext/stringio/stringio.c @@ -1429,14 +1429,15 @@ strio_write(VALUE self, VALUE str) long len, olen; rb_encoding *enc, *enc2; rb_encoding *const ascii8bit = rb_ascii8bit_encoding(); + rb_encoding *usascii = 0; if (!RB_TYPE_P(str, T_STRING)) str = rb_obj_as_string(str); enc = get_enc(ptr); enc2 = rb_enc_get(str); - if (enc != enc2 && enc != ascii8bit) { + if (enc != enc2 && enc != ascii8bit && enc != (usascii = rb_usascii_encoding())) { VALUE converted = rb_str_conv_enc(str, enc2, enc); - if (converted == str && enc2 != ascii8bit) { /* conversion failed */ + if (converted == str && enc2 != ascii8bit && enc2 != usascii) { /* conversion failed */ rb_enc_check(rb_enc_from_encoding(enc), str); } str = converted; diff --git a/test/stringio/test_stringio.rb b/test/stringio/test_stringio.rb index ab448f0aed..54f57165a4 100644 --- a/test/stringio/test_stringio.rb +++ b/test/stringio/test_stringio.rb @@ -195,9 +195,15 @@ class TestStringIO < Test::Unit::TestCase s = StringIO.new.set_encoding(conversion_encoding) s.write(convertible) assert_equal(conversion_encoding, s.string.encoding) + s = StringIO.new.set_encoding(Encoding::UTF_8) s.write("foo".force_encoding("ISO-8859-1"), convertible) assert_equal(Encoding::UTF_8, s.string.encoding) + + s = StringIO.new.set_encoding(Encoding::US_ASCII) + s.write("foo".force_encoding("US-ASCII"), convertible) + assert_equal(Encoding::UTF_8, s.string.encoding) + all_assertions do |a| [ inconvertible, -- cgit v1.2.3