Skip to content

Commit

Permalink
No compatibility check in US-ASCII case
Browse files Browse the repository at this point in the history
  • Loading branch information
nobu committed Jul 19, 2020
1 parent 1d28e5c commit 59df1c8
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 2 deletions.
5 changes: 3 additions & 2 deletions ext/stringio/stringio.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
6 changes: 6 additions & 0 deletions test/stringio/test_stringio.rb
Original file line number Diff line number Diff line change
Expand Up @@ -195,9 +195,15 @@ def test_write_encoding_conversion
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,
Expand Down

0 comments on commit 59df1c8

Please sign in to comment.