[Bug #18898] Fallback invalid external encoding to the default

This commit is contained in:
Nobuyoshi Nakada 2022-07-06 18:08:31 +09:00 коммит произвёл GitHub
Родитель 53afacd036
Коммит 5ef3c7ea2d
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
2 изменённых файлов: 13 добавлений и 1 удалений

4
io.c
Просмотреть файл

@ -2914,6 +2914,8 @@ io_enc_str(VALUE str, rb_io_t *fptr)
return str;
}
static rb_encoding *io_read_encoding(rb_io_t *fptr);
static void
make_readconv(rb_io_t *fptr, int size)
{
@ -2925,7 +2927,7 @@ make_readconv(rb_io_t *fptr, int size)
ecopts = fptr->encs.ecopts;
if (fptr->encs.enc2) {
sname = rb_enc_name(fptr->encs.enc2);
dname = rb_enc_name(fptr->encs.enc);
dname = rb_enc_name(io_read_encoding(fptr));
}
else {
sname = dname = "";

Просмотреть файл

@ -1142,8 +1142,18 @@ EOT
IO.pipe do |r, w|
assert_nothing_raised(bug5567) do
assert_warning(/Unsupported/, bug5567) {r.set_encoding("fffffffffffxx")}
w.puts("foo")
assert_equal("foo\n", r.gets)
assert_warning(/Unsupported/, bug5567) {r.set_encoding("fffffffffffxx", "us-ascii")}
w.puts("bar")
assert_equal("bar\n", r.gets)
assert_warning(/Unsupported/, bug5567) {r.set_encoding("us-ascii", "fffffffffffxx")}
w.puts("zot")
begin
assert_equal("zot\n", r.gets)
rescue Encoding::ConverterNotFoundError => e
assert_match(/\((\S+) to \1\)/, e.message)
end
end
end
end