Skip to content

Commit e538efa

Browse files
committed
Replicate all corner cases of StringIO#write encoding handling
1 parent 4a8801c commit e538efa

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

lib/truffle/stringio.rb

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -280,8 +280,12 @@ def write(str)
280280
str = String(str)
281281
return 0 if str.empty?
282282

283-
unless str.encoding == Encoding::BINARY # difference to IO
284-
str = Truffle::IOOperations.write_transcoding(str, external_encoding)
283+
# difference to IO, see https://github.com/ruby/stringio/blob/009896b973/ext/stringio/stringio.c#L1498-L1506
284+
enc = external_encoding
285+
unless enc == Encoding::BINARY or enc == Encoding::US_ASCII
286+
unless !str.ascii_only? && (str.encoding == Encoding::BINARY || str.encoding == Encoding::US_ASCII)
287+
str = Truffle::IOOperations.write_transcoding(str, enc)
288+
end
285289
end
286290

287291
d = @__data__

0 commit comments

Comments
 (0)