diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2022-08-30 18:12:08 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2022-08-31 17:27:59 +0900 |
commit | 576bdec03f0d58847690a0607c788ada433ce60f (patch) | |
tree | da8277b325bfa1c033c2572662a6e781b589ae0f /sprintf.c | |
parent | 9dc60653db186b1ae9400ed75b413a07728ce6ff (diff) | |
download | ruby-576bdec03f0d58847690a0607c788ada433ce60f.tar.gz |
[Bug #18973] Promote US-ASCII to ASCII-8BIT when adding 8-bit char
Diffstat (limited to 'sprintf.c')
-rw-r--r-- | sprintf.c | 13 |
1 files changed, 9 insertions, 4 deletions
@@ -454,13 +454,18 @@ rb_str_format(int argc, const VALUE *argv, VALUE fmt) str = tmp; goto format_s1; } - else { - n = NUM2INT(val); - if (n >= 0) n = rb_enc_codelen((c = n), enc); - } + n = NUM2INT(val); + if (n >= 0) n = rb_enc_codelen((c = n), enc); if (n <= 0) { rb_raise(rb_eArgError, "invalid character"); } + int encidx = rb_ascii8bit_appendable_encoding_index(enc, c); + if (encidx >= 0 && encidx != rb_enc_to_index(enc)) { + /* special case */ + rb_enc_associate_index(result, encidx); + enc = rb_enc_from_index(encidx); + coderange = ENC_CODERANGE_VALID; + } if (!(flags & FWIDTH)) { CHECK(n); rb_enc_mbcput(c, &buf[blen], enc); |